gis - H3 六边形在 kepler.gl 中使用交换的 lat、long 渲染
问题描述
我想绘制 H3 六边形。奥地利。
下载并解压 https://biogeo.ucdavis.edu/data/gadm3.6/gpkg/gadm36_AUT_gpkg.zip
完整代码可在https://gist.github.com/geoHeil/b5b74887e20e4b659d4bb693a700a402生成以生成六边形,例如:
size = 7
hexagons = pd.DataFrame(h3.polyfill(geoJson, size), columns=['hexagons'])
hexagons.head()
8752e5b80ffffff
8752ee6c1ffffff
注意 h3 需要 epsg:4326 并稍后再次生成相同的投影(https://github.com/uber/h3/issues/121)
现在,当移动到https://kepler.gl/并上传数据时,我看到发生了三件奇怪的事情
- WKT 线串中的多边形失真。这表明使用了错误的投影。但试图转换为支持的https://github.com/keplergl/kepler.gl/blob/6b380ac6db94e10fed0a76f5e78ef7e55406df21/docs/user-guides/b-kepler-gl-workflow/a-add-data-to-the-map .md Webmercator 没有修复它
当手动添加六边形层时,它会在也门渲染(基于 H3 地址。这看起来很奇怪。这可能是开普勒演示中的错误吗? 。这看起来很奇怪,因为几何图形是使用以下六边形生成的:
h3_to_geo_boundary
六边形质心未填充。现在,当使用 转换为六边形质心
h3_to_geo
并将数据添加回 haHexBin
层时,并非所有六边形都已填充。但这很奇怪,因为最初所有的六边形都是可用的(见 1 和 2)。
请注意 (3) 中的 hexbin 六边形如何正确投影为六边形而不是扭曲。
解决方案
我认为这里发生了一些事情:
假设您正在使用 的
master
分支h3-py
,则 的签名polyfill
是polyfill(geo_json, res, geo_json_conformant=False)
。您需要添加geo_json_conformant=True
到您的polyfill
通话中,否则多边形中的坐标将被解释为lat,lng
而不是lng,lat
. 这可能是你问题的根源。我不是开普勒专家,但我相信该
HexBin
图层使用的是生成的笛卡尔南北对齐的六角网格,这就是它们在屏幕上看起来“正确”的原因。H3 六边形具有低失真,但它们确实有一些形状和面积失真,并且它们从不南北对齐。当您使用墨卡托投影(如在开普勒中)显示它们时,它们将具有更大的失真,尤其是在极点处,作为投影的函数。然而,这里的主要失真问题可能是由于切换lat,lng
- 该h3_to_multi_polygon
函数还需要一个额外的布尔参数来输出符合 GeoJSON 的坐标。我相信 Kepler 也支持 H3 六边形层,因此一种选择是将原始点输入 Kepler,让 Kepler 对 H3 索引进行聚合。
推荐阅读
- python - 如何在使用 subprocess.Popen() 时获得实时输出?
- haskell - 当它可以在 CMD 上运行时,如何运行此功能
- python - 集成 Flask/Dill 以转储/加载服务器会话
- android - 即使从 Firestore 获取更新的数据后,如何在 RecyclerView 中保持相同的位置
- vue.js - 如何在 Vue 3 中执行 Vue.set()?
- vue.js - 带有搜索栏的vue js过滤
- javascript - 如何使用 Javascript 函数从 id 获取表格单元格中的详细信息
- jquery - JQuery 将选项作为图像附加到 Bootstrap 5 选择
- android-studio - 在 Android Studio 中将图像上传到资源管理器时无法单击下一步。我应该怎么办
- http - 尝试在 go 中使用通道,但数据未正确发送/接收到通道中