优步h3能用六边形网格覆盖整个地球吗


优步发布了h3,这是一个有效处理地理空间文件中大数据的框架。使用h3,我试图获得如图所示的六边形网格位置。(https://eng.uber.com/h3/)

我从下面的代码中得到了六边形网格的位置。然后我把它绘制在二维地图上,看看它是否覆盖了整个地球。然而,我在边界上没有得到有效的六边形(-90°、90°、-180°、180°(。而且它似乎并没有覆盖整个地球。(六边形网格(

from h3 import h3
import folium

# Polyfill a Geo Json with hexagons
geoJson1 = {'type': 'Polygon', 'coordinates': [[[90,-180],[90,0],[-90,0],[-90,-180]]]}
geoJson2 = {'type': 'Polygon', 'coordinates': [[[90,0],[90,180],[-90,180],[-90,0]]]}
hexagons = list(h3.polyfill(geoJson1, 1)) + list(h3.polyfill(geoJson2, 1))
# Plot hexagons
polylines = []
for hex in hexagons:
polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False)
outlines = [loop for polygon in polygons for loop in polygon]
polyline = [outline + [outline[0]] for outline in outlines][0]
polylines.append(polyline)
base = folium.Map([0,0], zoom_start=2, tiles='cartodbpositron')
for polyline in polylines:
m = folium.PolyLine(locations=polyline, weight=1, color='black')
base.add_child(m)
m.save('test.html')

我想要覆盖整个地球的六边形的位置。在这种情况下,我使用h3,但我不在乎我能得到这个位置多久。

是的,H3覆盖了整个地球。你在图像中看到的是渲染伪影——根据你在平面投影中渲染全局网格的方式,你可能会在极点或反辐射中得到类似的伪影。例如,请参阅这张地图,了解H3在反导弹上的投影,尽管它在极点周围仍然存在一些问题。

当你填充整个地球时,你会得到H3个穿过反子午线的多边形。这些顶点将同时位于东半球(经度>0(和西半球(经度<0(。你可以使用例如找到这样的多边形

for line in polylines:
if any(p[1] > 0 for p in line) and any(p[1] < 0 for p in line):
print(line)

例如,考虑这个列表中的一个边缘:

(-65.7243888731199, -176.62192487031285), (-66.42506103952591, 175.12130159942038)

它的跨度从经度176到173。H3假设顶点与测地线(最短(路径连接,即在这种情况下,与反辐射相交的短路径。因此,多边形应同时出现在地图的最左侧和最右侧。但当你把它交给像Folium这样的平面地图绘制工具时,它对测地线边或反子午线一无所知,而是画一条横跨整个地球的长直线(地图上的最短线,而不是

地球上的最短线根据您的需求,有几种解决方案。常见的选择是固定每个与反麦地那相交的多边形,在左侧或右侧绘制。假设你将所有这样的多边形向右移动,然后将360添加到所有负经度,将-176替换为184。你会得到一个小多边形,Folium应该能够画出";"正确";,虽然它会伸到180经线的右边(虽然我没有使用Folium的经验,但这是典型的行为(。

相关内容

  • 没有找到相关文章

最新更新