开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
引言
在模拟地基蜂窝网络路由区创建卫星网络路由区时,采用了 Uber H3 六边形空间索引系统,H3 系统为每个六边形单元格分配一个唯一的分层索引,每个有向边和顶点分别根据其原点或所有者单元格分配一个索引。空间索引通过 H3 Core API 建立,每个单元格唯一的索引用来关联卫星的通信范围,建立卫星通信的路由区。
本着对 Uber H3 空间索引建立的好奇,这篇文章将深入解读 H3 空间索引创建的规则。
H3 空间索引的表示
创建一个空间索引
H3 创建空间索引非常简单,将点的经纬度坐标按照所需单元分辨率(六边形单元的边长),分配一个所在单元的一个索引地址,代码如下所示:
H3Core h3 = H3Core.newInstance();
double lat = 25.312930;
double lng = 51.184664;
//分辨4的六边形单元,
//平均面积:1,770.3235517(平方千米)
//平均边长:22.606379400km
//全球共有:288,122个六边形
int res = 4;
//按照分辨率4划分单元,将点 (51.184664,25.312930) 索引到所在小区中心点地址
String hexAddr = h3.latLngToCellAddress(lat, lng, res);
中心点索引地址:
//16进制
84536a3ffffffff
//2进制(64bit)
0000100001000101001101101010010000000000000000000000000000000000
H3 索引表示及类型
H3 Index 是用64位整数,通常序列化为一个十六进制字符串表示,有以下几种模式:
- Mode 0 保留位,用来表示 H3 无效的索引
- Mode 1 是 H3 单元(六边形/五边形)索引
- Mode 2 是 H3 定向边(单元格 A ->单元格 B)索引
- Mode 3 计划为双向边(单元 A <->单元 B)
- Mode 4 是 H3 顶点(即 H3 单元的单个顶点)
H3 索引的位布局
分析索引地址:84536a3ffffffff 位布局, 模式类型 0001 表示六边形索引,000 是模式补充位, 0100 表示是 H3 分辨率为 4。
该点位置依次从 Base cell 解析到 Res4 digit 分辨率数字,如图所示,父六边形大约包含七个子六边形,所以用三位表示下一级分辨率中的第几个。 因为 Resolution 是4 所以从 Res5 开始往下都是 000。
保留位 模式类型 模式类型补充位 分辨率:4
0 | 0001 | 000 | 0100 |
Base cell
0101001 |
Res1 digit
101 |
Res2 digit
101 |
Res3 digit
010 |
Res4 digit
010 |
Res5 digit
000 |
Res6 digit
000 |
Res7 digit
000 |
Res8 digit
000 |
Res9 digit
000 |
Res10 digit
000 |
Res11 digit
000 |
Res12 digit
000 |
Res13 digit
000 |
Res14 digit
000 |
Res15 digit
000 |