1

我正在尝试在世界地图上绘制六角网格。后者可以使用 Geopandas 轻松完成:

import geopandas
import matplotlib.pyplot as plt

world = geopandas.read_file(geopandas.datasets.get_path("naturalearth_lowres"))
world.plot()
plt.savefig("world.png")
plt.show()

对于前者,我觉得H3应该可以做到。我已经安装了 H3 以及它的 Python 绑定,现在可以import h3,但是......好吧,我目前可能处于“第 2 步:绘制 effing owl 的其余部分”阶段,或者可能只是我缺少的一两行代码。搜索 H3 文档和教程,发现很多关于六边形优点的讨论,关于如何用 H3 进行各种微妙计算,但我还没有找到任何指出如何绘制实际六边形网格的东西。

那么:如何使用 H3 在 Geopandas 地图上绘制六角网格?(就此而言,H3 确实是这项工作的最佳工具吗?)

4

1 回答 1

3

H3 确实是这项工作的最佳工具吗?

这取决于您想要六角网格的用途。H3 优于“标准”六角网格的优势在于,大多数六角网格是在投影地图上绘制的正六边形,因此每个六角单元的地理区域根据地图上单元的投影和位置而有很大差异。这对于可视化来说仍然是足够的,而且它可能比 H3 更快、更容易推理。

H3 使用全球网格,其中所有单元格的面积都相等(大致 - 全球范围内的变化约为 2 倍;请参阅此地图此表)。根据您的用例,这可能会给您带来更好的结果。

要以特定分辨率绘制整个网格,您可以使用 获取所有基本单元,h3.get_res0_indexes然后使用 将它们扩展到所需的分辨率h3.h3_to_children,例如

[cell for base_cell in h3.get_res0_indexes() 
  for cell in h3.h3_to_children(base_cell, res)]

然后你可以h3.h3_to_geo_boundary用来获取每个单元格的边界。

于 2021-06-28T17:54:39.547 回答