GIS【免费下载链接】h3Hexagonal hierarchical geospatial indexing system项目地址https://gitcode.com/gh_mirrors/h3/h3点击查看免费下载H3 是一个把全球划分为六边形单元cell的开源地理空间索引系统由 H3 Core Library 以 C 语言实现提供经纬度定位到单元、单元中心与边界、邻居遍历等一系列 API。本文以官方 Introduction 文档为主线结合仓库源码、统计表与构建脚本系统讲解 H3 的六边形网格设计动机、aperture 7 层级索引机制、H3Index 位布局、分辨率体系、核心应用场景与快速上手路径帮助读者从原理到实践完整掌握这一空间索引方案。H3 是什么一种开源六边形离散全球网格系统H3 是一个地理空间索引系统geospatial indexing system将整个世界划分partition为六边形单元。它以 Apache 2.0 许可证 开源发布允许自由使用、修改与再分发。H3 Core Library 实现了 H3 网格系统本身是项目的核心 C 语言库主要能力包括将经纬度坐标转换为所在 H3 单元latLngToCell查找 H3 单元的中心点cellToLatLng查找 H3 单元的边界几何cellToBoundary查找 H3 单元的邻居如gridDisk、gridRing等。核心库用 C 编写同时官方与社区提供了多种语言的绑定Java、JavaScript、Python、Go、DuckDB 等C 源码主体位于 src/h3lib示例程序位于 examples。为什么选择六边形网格形状的几何优势选择什么样的单元形状直接决定空间分析的质量。理想情况下网格单元应当是一种能规则铺满平面的多边形即三角形、正方形或六边形。三者中六边形具有独特的优势详见 Aggregation 文档邻居等距三角形有 12 个邻居、存在三种不同距离正方形有 8 个邻居、存在两种不同距离而六边形的 6 个邻居全部等距。这种一致性让基于网格的移动分析、卷积与平滑处理变得简单——只需要考虑网格距离grid distance无需区分边邻居与点邻居。近似圆形的扩张环六边形的邻居环ring逐层向外扩张时更接近圆形适合模拟真实世界中的扩散与距离衰减。空间填充最优平均而言用六边形铺满一个多边形区域时误差比用正方形更小。这些特性也是 Uber 数据科学团队最初开发 H3 时面临的真实需求需要对海量位置数据进行分桶聚合详见 Ubers Hexagonal Hierarchical Spatial Index 引用背景并期望网格能支撑移动流分析、异构数据集联接和地理空间机器学习。层级索引机制aperture 7 与近似几何、精确逻辑包含H3 是一种分层地理空间索引hierarchical geospatial index索引按空间层级引用单元在 H3 支持的最大分辨率以下每一个六边形单元在下一层都有7 个子单元这种 7 分裂的细分方式被称为aperture 7详见 Indexing 文档。aperture 7一个父单元下近似包含 7 个子单元六边形无法被干净地细分为 7 个更小的六边形但通过交替网格朝向相邻分辨率网格旋转方向可以近似实现 7 分裂。由此带来一个关键特性几何包含是近似的子单元内的点其父单元可能与子单元不同——即子单元并不总是被同一个父单元在几何上完全包含逻辑包含是精确的索引层级上父与子的隶属关系完全确定可以做精确的逻辑索引。这种近似几何、精确逻辑仅影响精度的截断如cellToParent。对于同一分辨率下的操作——比如把点索引到某分辨率的单元、查找单元邻居——不受近似包含影响单元边界在该分辨率下是精确的。该特性让不同分辨率索引的数据集可以高效关联改变精度的函数cellToParent、cellToChildren仅需少量位运算即可实现速度极快并且由于索引结构设计地理上相近的位置其索引数值往往也相近。分层结构还能在分析中编码精度不确定性例如 GPS 信号精度低时用较粗分辨率索引或当细粒度单元数据点过少时聚合到父单元。层级包含还支撑了经典用法用compactCells把连续单元集合压缩为父单元集合稀疏表示之后可用uncompactCells还原到相同的输入单元集合或测试某单元是否被压缩集合包含。对边界敏感的场景官方建议将层级作为逻辑索引使用或将网格作为优化手段配合更精确的点在多边形内point-in-polygon校验。H3Index64 位整型的位布局与模式H3 对每个单元分配唯一的层级索引每条有向边directed edge与顶点vertex也基于其源单元/所属单元分配索引。H3Index是一个 64 位无符号整数h3api.h.in 中定义为typedef uint64_t H3Index;其**模式mode**字段指示索引所代表的对象类型详见 H3Index 文档Mode含义0保留表示无效索引其中H3_NULL位值等于 0专用于表示无效/缺失/未初始化的索引等价于浮点中的NaN1H3 单元六边形/五边形2有向边Cell A → Cell B3计划中的双向边Cell A ↔ Cell B4H3 顶点某单元的单个顶点索引的规范字符串表示是整数的十六进制形式小写字母、可变长度、无前导零填充、无前缀后缀例如8928308280fffff。H3Index 位字段布局官方文档给出了H3Index的完整位布局高 4 位 → 低 64 位位偏移字段63保留Reserved最高位62–59Mode4 位58–56Mode 相关字段Mode-Dependent随模式不同解释不同55–52Resolution4 位0–1551–45Base cell7 位0–12144–0分辨率相关索引数字Digit 1–15每个 3 位源码 h3Index.h 中的位偏移常量与之完全对应H3_MAX_OFFSET 63最高位H3_MODE_OFFSET 59Mode 位H3_RESERVED_OFFSET 56保留位H3_RES_OFFSET 52分辨率位H3_BC_OFFSET 45Base cell 位H3_PER_DIGIT_OFFSET 3每个分辨率索引数字占 3 位并配套了H3_GET_MODE/H3_SET_MODE、H3_GET_RESOLUTION/H3_SET_RESOLUTION、H3_GET_BASE_CELL/H3_SET_BASE_CELL、H3_GET_INDEX_DIGIT等掩码宏h3Index.h位操作是 H3 高效实现的基础。分辨率体系从 122 个基础单元到 15 级细分H3 网格建立在一个外接于球面的正二十面体icosahedron平面面上单元再通过面向中心的二十面体球心投影inverse face-centered polyhedral gnomonic projection映射到球面坐标系采用 WGS84/EPSG:4326 等积半径authalic radius下的球面坐标详见 Overview 文档。几个关键事实二十面体以Dymaxion 朝向固定于球面由 R. Buckminster Fuller 提出使全部 12 个二十面体顶点都位于海洋中球面/二十面体无法完全由六边形铺满每一分辨率都恰好有 12 个五边形分别以 12 个二十面体顶点为中心分辨率 0 共有122 个单元110 个六边形 12 个五边形称为基础单元base cells按中心点纬度编号 0–121后续每一分辨率按 aperture 7 细分单元边长按sqrt(7)缩放、面积约为上一分辨率的 1/7共提供 15 级更细网格最细的分辨率 15单元面积小于 1 m²。各分辨率单元数量统计表文档 列出了各分辨率的完整单元数摘录如下Res单元总数六边形数五边形数012211012341,16241,15012614,117,88214,117,8701294,842,432,8424,842,432,83012121,660,954,464,1221,660,954,464,1101215569,707,381,193,162569,707,381,193,15012其封闭形式为c(r) 2 120 × 7ʳ任意六边形向下有 7ⁿ 个子单元任意五边形向下有 1 5 × (7ⁿ − 1) / 6 个子单元五边形有 5 个六边形孩子和 1 个五边形孩子由分辨率 0 的 110 个六边形与 12 个五边形组合推导而来。单元面积与边长量级面积与边长按球面模型 WGS84 等积半径计算文档明确注明这一点单元面积会随其相对二十面体顶点的位置变化表中给出的是平均六边形面积分辨率 0 六边形平均面积约 4,357,449 km²五边形约 2,562,182 km²分辨率 10 六边形平均约 0.0150 km²约 15,047 m²分辨率 15 六边形平均约 0.895 m²五边形约 0.452 m²。平均边长从分辨率 0 的约 1281.256 km精确计算逐级缩小到分辨率 15 的约 0.000584 km精确计算分辨率 0–6更细分辨率外推相邻分辨率之间边长约为上一层的 1/√7。完整数据见 restable.md。核心应用场景聚合、联接、流建模与机器学习官方文档将 H3 的典型应用归纳为四类highlights 目录聚合Aggregation将位置数据分桶聚合。六边形等距邻居与近似圆环特性带来平滑梯度可衡量单元间差异——这正是 Uber 数据科学场景的核心诉求。数据联接JoiningH3 作为统一分析单元可把点、线、区域以及栅格等格式组合索引进网格随后以 H3 索引为键与其他数据集轻松 join打破异构数据的空间壁垒。Placekey 等 POI 编码系统正是把 H3 索引编入其标识符Placekey 对比。流建模Flow ModellingH3 提供有向边索引mode 264 位整数表示从某单元到相邻单元的移动可为网格上的每次移动关联权重适合交通、行程时间等流分析。机器学习ML六边形网格可类比图像像素网格用kRing即gridDisk系列获取邻居做卷积或用cellToLocalIj把索引变换到二维 IJ 坐标空间从而运行既有计算机视觉算法。这些能力共同指向一个定位H3 不仅是坐标分桶工具更是一套完整的分层空间索引基础设施。与其他网格方案的对比Comparisons 目录 汇总了 H3 与主流方案的关键差异S2Google同为开源、分层、离散的全球网格单元索引同样是 64 位整数便于大数据系统使用。主要区别是 S2 用正方形aperture 44 个孩子精确细分因此索引点后截断到父单元是精确包含而 H3 的六边形 7 分裂是近似的。此外正方形有两类邻居共边/共点六边形只有一类。Geohash以字符串编码位置、形成方形四叉树网格。其索引面积在不同纬度差异显著且字符串索引有任意精度H3 则是固定 64 位整数、有分辨率上限整数运算通常比字符串更快。Hexbin六边形分箱分析/制图软件中的通用六边形分箱计算便宜、可上 GPU但单元标识不跨网格移植、不可层级关联且受投影边缘如反经线、极点不连续影响。行政边界Admin Boundaries如 ZIP Code 这类区域本质是邮路而非面积大小悬殊、随无关原因变动缺乏可比较的空间分析单元难以与其他数据空间关联。PlacekeyPOI 编码系统其Where Part即为分辨率 10 的 H3 单元索引如示例8a283082a677fff可无损互转。快速上手构建、命令行与 C 示例安装与从源码构建macOS 上可直接通过 Homebrew 安装brew install h3从源码构建需要 C 编译器gcc或clang、CMake。仓库根目录下编译mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make之后可make test或跳过昂贵用例的make test-fast运行测试以-DCMAKE_BUILD_TYPEDebug -DENABLE_COVERAGEON配置后make coverage生成覆盖率报告make benchmarks运行计时基准安装 Doxygen 后make docs生成开发文档make kml可生成可视化网格的 KML 文件输出到 KML 目录。命令行使用构建完成后可用 bin 下的过滤器程序 操作索引。例如获取自由女神像40.689167, -74.044444在分辨率 10 下的单元索引分辨率取值范围 0 最粗到 15 最细./bin/latLngToCell --resolution 10 --latitude 40.689167 --longitude -74.044444输出形如8a2a1072b59ffff的 H3 索引。随后可查询其边界顶点./bin/cellToBoundary --index 8a2a1072b59ffff得到六个顶点的经纬度坐标也可查询单元中心./bin/cellToLatLng --index 8a2a1072b59ffff输出如40.6894218437 -74.0444313999。C 语言调用同样的功能可直接在 C 中使用编译并运行 examples/index.ccc -lh3 examples/index.c -o example ./example输出会打印索引、边界顶点与中心坐标。示例代码的关键调用链examples/index.c展示了标准用法LatLng location; location.lat degsToRads(40.689167); location.lng degsToRads(-74.044444); int resolution 10; H3Index indexed; if (latLngToCell(location, resolution, indexed) ! E_SUCCESS) { printf(Failed\n); return 1; } printf(The index is: % PRIx64 \n, indexed); CellBoundary boundary; if (cellToBoundary(indexed, boundary) ! E_SUCCESS) { /* 错误处理 */ } // boundary.numVerts 表示顶点个数可能不止 6 个 LatLng center; if (cellToLatLng(indexed, center) ! E_SUCCESS) { /* 错误处理 */ }注意两点一是经纬度在 H3 API 中以弧度传递需用degsToRads/radsToDegs转换二是CellBoundary的顶点数不固定单元跨越二十面体边界时可能多于 6 个必须依赖boundary.numVerts。错误处理模型绝大多数 H3 函数返回H3Error32 位无符号整数h3api.h.in值为 0E_SUCCESS表示成功。错误码从 1E_FAILED到 19E_DELETED_DIGIT覆盖了参数越界、无效索引、五边形畸变、内存分配失败等各类情况完整表格见 errors.md。H3Error永不置最高位因此不会与H3Index的 Mode 位冲突应用可自行混用错误码与索引。C 库还提供哨兵值H3_ERROR_END最后一个错误码之后一位便于遍历错误消息各语言绑定会把错误码翻译为对应语言的异常机制。结语H3 用一套 64 位整数、aperture 7 分层、固定 12 个五边形的六边形网格把全球空间索引压缩为高速位运算同时以近似几何包含、精确逻辑包含的取舍换取跨分辨率数据的高效关联。无论用于大规模位置聚合、异构数据联接、移动流建模还是地理空间机器学习理解其网格设计动机、索引位布局与分辨率体系都是正确选型与深度调用的前提。进一步阅读H3 核心概念与术语cell、hexagon、pentagon、directed edge 等严格术语H3 各分辨率统计表单元数、面积、边长完整数据H3 系统概述二十面体投影与坐标系API 参考索引函数latLngToCell、cellToLatLng等H3 索引位布局 与 H3Index 头文件源码级位操作赞分享GIS【免费下载链接】h3Hexagonal hierarchical geospatial indexing system项目地址https://gitcode.com/gh_mirrors/h3/h3点击查看免费下载相关推荐H3 六边形层级地理空间索引系统入门指南核心库、亮点特性与同类网格系统对比H3 六边形层级地理空间索引系统入门指南核心库、亮点特性与同类网格系统对比 H3 是一套将全球划分为六边形网格的地理空间索引系统以 Apache 2 许可证GIS终极小说下载神器novel-downloader 一键保存100网站小说完整指南终极小说下载神器novel downloader 一键保存100网站小说完整指南 你是否曾遇到过这样的情况追了好几个月的小说突然从网站上消失了或者想要在网页爬虫Home Assistant 实战1519 个集成的本地家庭自动化平台Home Assistant 实战1519 个集成的本地家庭自动化平台 如果你的智能家居曾经因为断网变砖或者你隐约意识到设备数据正被厂商服务器收集那多GIS上一篇探索Burp Suite增强之道Awesome Burp Extensions下一篇【免费下载】 探秘PinyinJS一个强大的JavaScript拼音处理库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考