H3:经纬度和H3索引之间的转换

h3lib使用C语言写的,因此如果要用到库函数,必须得链接一下,大致用到了geoToH3,h3ToGeo和h3ToGeoBoundary三个函数,功能分别为:

geoToH3:经纬度转换成H3索引

h3ToGeo:根据H3索引输出对应六边形格子的中心位置经纬度

h3ToGeoBoundary:根据索引输出对应六边形格子的六个顶点位置经纬度

先看一个简单的例子

NewImage

这里我传入的经纬度是滨江星光大道的位置,精度为8,边长大约400米,通过gcc编译,带上h3库

首先获取索引,然后计算出顶点,最后 输出中心位置

NewImage

此时可以简单查下结果

NewImage

前面是六边形六个顶点,最后一个是中心点

如果觉得这样太麻烦了,H3也可以将它们都编译成可执行程序直接来运行

我这里是MAC的安装过程,首先是brew直接安装一波依赖

brew install clang-format lcov doxygen cmake

然后在H3目录下编译

lihui@2018  ~/caocao/h3   master ●  cmake .
lihui@2018  ~/caocao/h3   master ●  make

这时候就已经生成了可执行程序,如果想安装到系统环境路径下,可以继续执行 make install操作,这里直接bin目录下执行可执行程序

首先带参数执行geoToH3,传入精度,这里是8,交互命令行里输入经纬度,注意的是经度在后面

lihui@2018  ~/caocao/h3/bin   master ●  ./geoToH3 8
30.209012 120.208449
88309a40dbfffff

 获取了索引之后,执行h3ToGeoBoundary,交互输入索引,返回六个顶点

lihui@2018  ~/caocao/h3/bin   master ●  ./h3ToGeoBoundary
88309a40dbfffff
88309a40dbfffff
{
   30.206740285 120.209918360
   30.210887920 120.210645324
   30.214041030 120.206884285
   30.213046536 120.202396017
   30.208898737 120.201669099
   30.205745597 120.205430403
}

最后执行h3ToGeo,输入索引,返回中心

lihui@2018  ~/caocao/h3/bin   master ●  ./h3ToGeo
88309a40dbfffff
30.2098934423 120.2061573351

可以继续查一下大致位置

NewImage

唯一不同的就是demo里经纬度小数部分做了截断,位置基本一致,同一个经纬度只会对应一个六边形索引

发表回复