
GIS【免费下载链接】h3Hexagonal hierarchical geospatial indexing system项目地址https://gitcode.com/gh_mirrors/h3/h3点击查看免费下载本篇技术指南聚焦于 H3Hexagonal hierarchical geospatial indexing system在机器学习领域的两大核心能力利用邻居查找函数gridDisk即 v3 中的kRing在六边形网格上执行卷积以及通过cellToLocalIj/localIjToCell将 H3 索引映射到二维 IJ 坐标空间、从而运行常规计算机视觉算法。读者读完本文后将掌握 H3 卷积核的数学性质、相关 C API 的调用方式与内存约束以及如何将地理空间数据组织成可供 ML 模型直接消费的像素网格。为什么 H3 网格适合地理空间机器学习H3 是一个将地球表面递归细分为六边形网格的索引系统。文档 highlights/ml.md 明确指出H3 非常适合对地理空间数据应用机器学习原因是计算机视觉领域的技术——例如卷积convolution——可以直接应用于由 H3 定义的像素网格。这种适配性来自六边形网格的几个结构性优势均可以在当前仓库源码中得到印证均匀的邻居结构六边形每个单元拥有 6 个等距邻居邻居关系对称且稳定天然适合作为卷积核的支撑结构。等面积、近圆形单元与正方形网格相比六边形单元的中心到边界距离更均匀降低了方向性偏差对统计特征的影响。一致的层级关系父单元与子单元的索引可通过位运算直接计算参见 src/h3lib/include/h3Index.h多分辨率特征如金字塔式的多尺度卷积可以廉价地实现。因此将点、轨迹、事件或人口密度等数据按分辨率映射到 H3 单元后每个单元就相当于图像中的一个像素cell mode而单元之间的邻接关系提供了现成的像素邻域语义。卷积的基础用 gridDisk 提取 k 环邻居卷积操作的核心是以每个像素为中心读取其邻域内像素的值并加权求和。在 H3 网格上这一步骤由邻居查找函数完成。文档中提到的kRing在 v4 API 中已更名为gridDisk其声明位于 src/h3lib/include/h3api.h.inDECLSPEC H3Error H3_EXPORT(gridDisk)(H3Index origin, int k, H3Index *out); DECLSPEC H3Error H3_EXPORT(gridDiskDistances)(H3Index origin, int k, H3Index *out, int *distances);k 环的数学性质gridDisk返回距原点网格距离不超过k的所有单元。k-ring 0 即原点自身k-ring 1 是原点加上全部 6 个邻居以此类推见 src/h3lib/lib/algos.c 中的注释说明。输出数组的大小由maxGridDiskSize(k)给出其公式在 src/h3lib/lib/algos.c 中实现size 3 * k * (k 1) 1例如 k1 时大小为 7即 1 个中心 6 个邻居k2 时大小为 19k3 时为 37。这个封闭形式意味着卷积核的感受野是确定且可预分配的——这正是把 H3 邻居查询当作卷积核来用的关键前提。当k过大达到最大分辨率 15 的全网格规模时函数会退化为返回全网格单元数以避免有符号整数溢出这是实现层面的一个防御性边界见 src/h3lib/lib/algos.c。双通道实现快路径与安全回退gridDisk并非简单遍历而是委托给gridDiskDistancessrc/h3lib/lib/algos.c。后者采用先快后慢的策略src/h3lib/lib/algos.c首先尝试快速的gridDiskDistancesUnsafe路径若失败例如跨越五边形导致遍历中断则清空输出数组回退到安全但较慢的_gridDiskDistancesInternal安全路径将输出数组当作哈希集合使用从原点出发递归地向 6 个方向扩展src/h3lib/lib/algos.c遇到五边形E_PENTAGON时跳过该方向的遍历。测试用例 src/apps/testapps/testGridDisk.c 专门验证了gridDiskDistances与安全路径gridDiskDistancesSafe在 k0..2 时的结果与距离完全一致可作为实现正确性的依据。实战提取卷积邻域下面是一段可直接编译运行的 C 示例展示如何为某个 H3 索引提取 k2 的卷积邻域及每个邻居到中心的距离#include algos.h #include h3api.h #include stdlib.h void convolution_neighborhood(H3Index origin, int k) { int64_t size; H3_EXPORT(maxGridDiskSize)(k, size); // 输出数组须预置为 0文档与源码均要求零填充 H3Index *neighbors calloc(size, sizeof(H3Index)); int *distances calloc(size, sizeof(int)); H3Error err H3_EXPORT(gridDiskDistances)(origin, k, neighbors, distances); if (err) { // 处理错误例如 E_DOMAIN、跨五边形导致的遍历失败 return; } for (int64_t i 0; i size; i) { if (neighbors[i] ! 0) { // 跨越五边形时可能留空 // neighbors[i] 是网格距离 distances[i] 的单元 // 可在此累加权重 * 该单元的像素值 } } free(neighbors); free(distances); }几点工程细节值得注意gridDisk的输出顺序不保证distances数组与输出数组平行可用于区分卷积核的环带环形核穿越五边形时输出数组中可能出现 0 占位见 src/h3lib/lib/algos.c 的注释取核内像素值前应做非零判断k必须满足k 0否则返回E_DOMAIN。二维 IJ 坐标空间把六边形网格摊平给 CV 算法虽然gridDisk提供了邻域查询但某些计算机视觉算法如标准二维卷积网络、滑窗特征提取、形态学运算需要规则的二维坐标。H3 通过cellToLocalIj/localIjToCell提供这一能力这正是文档中所述将索引变换到二维 IJ 坐标空间的官方实现。API 与坐标系语义两个函数的声明位于 src/h3lib/include/h3api.h.inDECLSPEC H3Error H3_EXPORT(cellToLocalIj)(H3Index origin, H3Index h3, uint32_t mode, CoordIJ *out); DECLSPEC H3Error H3_EXPORT(localIjToCell)(H3Index origin, const CoordIJ *ij, uint32_t mode, H3Index *out);其实现位于 src/h3lib/lib/localij.c关键语义如下以 origin 为锚点的局部坐标系IJ 坐标并不是全球统一的正交投影而是以某个 origin 单元为锚点建立的局部坐标空间文件头注释明确其目标是在 origin 索引附近提供有用的坐标空间见 src/h3lib/lib/localij.c适合在局部区域上运行算法mode 参数当前必须为 0传入其他值会立即返回E_OPTION_INVALID存在扭曲区域由于五边形造成的畸变局部 IJ 空间可能存在删除区域deleted regions或扭曲warping索引离 origin 过远、或跨过五边形时cellToLocalIj会失败localIjToCell也不保证对所有 IJ 坐标成功输出不跨版本兼容源码注释明确说明该函数的输出不保证在不同 H3 版本间兼容src/h3lib/lib/localij.c因此不应把 IJ 坐标当作长期持久化的键值。底层实现路径从源码结构看cellToLocalIj的实际链路是cellToLocalIjk(origin, index, ijk)—— 先计算以 origin 为锚的三轴CoordIJK坐标声明见 src/h3lib/include/localij.hijkToIj(ijk, out)—— 将三轴坐标投影为两轴的CoordIJ坐标定义于 src/h3lib/include/coordijk.h。反向的localIjToCell则先ijToIjk再localIjkToCell。这套IJK 三轴 → IJ 两轴的降维映射正是文档所说其他计算机视觉算法可以运行其上的二维坐标空间。实战在 IJ 空间执行滑窗处理#include h3api.h // 将 gridDisk 返回的邻域索引统一投影到以 origin 为锚的 IJ 坐标 H3Error project_neighborhood_to_ij(H3Index origin, int k) { int64_t size; H3_EXPORT(maxGridDiskSize)(k, size); H3Index *neighbors calloc(size, sizeof(H3Index)); H3_EXPORT(gridDisk)(origin, k, neighbors); for (int64_t i 0; i size; i) { if (neighbors[i] 0) continue; // 五边形处空槽 CoordIJ ij; H3Error err H3_EXPORT(cellToLocalIj)(origin, neighbors[i], 0, ij); if (err) continue; // 越界或跨五边形丢弃该点 // 此时 (ij.i, ij.j) 即为该邻居在以 origin 为锚的局部二维坐标 // 可填充到二维缓冲区供 CV 算法读取 } free(neighbors); return E_SUCCESS; }在应用层你可以把 H3 单元当作像素、单元值密度、计数、特征向量当作像素值然后选择两种范式之一六边形原生卷积直接用gridDiskDistances的环带信息构造六边形卷积核无需坐标变换适合密度平滑、空间自相关如 Moran 统计等场景IJ 空间变换后卷积以某个锚点单元为中心用cellToLocalIj将局部邻域投影到二维缓冲区再复用成熟的 CV 库滤波、CNN 前向计算。注意 IJ 空间是局部的超出锚点一定范围或跨越五边形会失败因此适合分块处理而非全局投影。实践路径从数据到 ML 特征结合仓库文档 highlights/aggregation.md 与 core-library/overview.md一条典型的 H3 机器学习流水线如下栅格化rasterization将事件点/轨迹用latLngToCell映射到目标分辨率的 H3 单元统计每个单元的计数得到像素值特征化featureization对每个单元执行gridDisk卷积输出平滑密度、梯度方向等特征需要规则张量时再用cellToLocalIj局部投影多尺度multi-scale利用 H3 的父子层级关系cellToParent/cellToChildren构建金字塔式多分辨率特征模拟图像金字塔模型训练将特征送入树模型或 CNN。文档 highlights/ml.md 的 Links 一节还给出了一份 Jupyter notebook 示例《Uber H3 API examples on Urban Analytics in the city of Toulouse (France)》即h3-py-notebooks中的urban_analytics.ipynb演示了用 H3 API 开展城市分析如 POI 分布、核密度估计的完整流程是上述流水线的直接参考实现。H3 的官方语言绑定如 Python 的 h3-py列表见 community/bindings.md在 Python 环境中这些 C API 均有同名封装。使用限制与注意事项五边形畸变H3 网格中有 12 个五边形单元。穿越五边形时gridDisk可能留下空槽cellToLocalIj/localIjToCell可能失败或产生扭曲训练数据预处理时应显式处理例如以空值或插值填充IJ 空间是局部的坐标以 origin 为锚离锚点过远时函数失败不要用它表示全局位置全局定位应使用 H3 索引本身模式参数约束cellToLocalIj/localIjToCell的mode当前仅支持 0传入其他值返回E_OPTION_INVALID版本稳定性IJ 坐标输出不保证跨版本一致避免将其持久化用于长期存储内存预算gridDisk输出数组必须按maxGridDiskSize(k)精确分配且零填充卷积核半径越大内存按k²增长。延伸阅读邻居与距离函数的完整 API 文档api/traversal.mdxgridDisk、gridDiskDistances、gridRing等索引与 IJ 变换相关 APIapi/indexing.mdx单元间距离与路径函数实现src/h3lib/lib/localij.cgridDistance同样基于 IJ 坐标系的ijkDistance邻居算法测试用例src/apps/testapps/testGridDisk.c 与 src/apps/testapps/testGridDiskInternal.c将地理数据聚合为特征的思路highlights/aggregation.md赞分享GIS【免费下载链接】h3Hexagonal hierarchical geospatial indexing system项目地址https://gitcode.com/gh_mirrors/h3/h3点击查看免费下载相关推荐H3-JS基于六边形的地理网格系统H3 JS基于六边形的地理网格系统 项目简介 H3 JS 是一个基于 JavaScript 语言的开源项目它为 H3 核心库提供了一个纯 JavaScripGIS地理空间分析的革命Uber H3六边形网格完整指南地理空间分析的革命Uber H3六边形网格完整指南 在当今数据驱动的世界中 Uber H3六边形地理空间索引系统 正在彻底改变我们理解和分析地理数据的GIS解密六边形网格H3地理空间索引系统的终极架构解析解密六边形网格H3地理空间索引系统的终极架构解析 在当今数据驱动的世界中 H3地理空间索引系统 作为Uber开源的六边形分层地理空间索引工具正在彻底改变我GIS上一篇IronClaw 上下文压缩中的 Active-Task 保留active_task_compaction_append.md 覆盖指令与实现剖析下一篇京东抢购神器终极指南3分钟掌握自动化抢购技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考