gis - H3 六边形在 kepler.gl 中使用交换的经纬度进行渲染

标签 gis projection kepler.gl h3

我想绘制 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 )

这给出了一个类似于以下内容的文件: enter image description here

现在移动到 https://kepler.gl/上传数据时我看到发生了三件奇怪的事情

  1. WKT 线串中的多边形变形。这表明使用了错误的投影。但试图转换为支持的https://github.com/keplergl/kepler.gl/blob/6b380ac6db94e10fed0a76f5e78ef7e55406df21/docs/user-guides/b-kepler-gl-workflow/a-add-data-to-the-map.md Webmercator 没有修复它

enter image description here

  • 当手动添加六边形图层时,它会在也门渲染(基于 H3 地址)。这看起来很奇怪。这可能是开普勒演示中的错误吗? enter image description here 。这看起来真的很奇怪,因为几何形状是使用以下六边形生成的: h3_to_geo_boundary

  • 六边形质心未填充。现在,当使用 h3_to_geo 转换为六边形质心时,并将数据添加回 ha HexBin图层并非所有六边形都被填充。但这很奇怪,因为最初所有六边形都是可用的(参见 1 和 2)。 enter image description here

  • notice how in (3) the hexbin hexagons are projected correctly as hexagons and not distorted.

    最佳答案

    我认为这里发生了一些事情:

    • 假设您使用 h3-pymaster 分支,signature of polyfillpolyfill(geo_json, res, geo_json_conformant=False)。您需要将 geo_json_conformant=True 添加到 polyfill 调用中,否则多边形中的坐标将被解释为 lat,lng 而不是 >经度,纬度。这可能就是您问题的根源。

    • 我不是开普勒专家,但我相信 HexBin 层使用生成的笛卡尔北/南对齐六角网格,这就是它们在屏幕上看起来“正确”的原因。 H3 六边形的扭曲度较低,但它们确实有一些形状和面积扭曲,而且它们永远不会南北对齐。当您使用墨卡托投影(如开普勒投影)显示它们时,它们将具有更多的失真,特别是朝向两极,作为投影的函数。然而,这里的主要失真问题可能是由于切换 lat,lng - h3_to_multi_polygon 函数需要一个额外的 bool 参数来输出 GeoJSON-一致坐标。

    • 我相信 Kepler 还支持 H3 六边形层,因此一种选择是将原始点输入 Kepler 并让 Kepler 对 H3 索引进行聚合。

    关于gis - H3 六边形在 kepler.gl 中使用交换的经纬度进行渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58752374/

    相关文章:

    c++ - Boost.Geometry 的 GIS 扩展

    postgresql - 使用 PostGIS 将点转换为多边形

    c# - Linq投影问题

    java - 这个相机旋转算法有什么问题?

    java - 具有投影的 Hibernate 条件不执行 @OneToMany 映射查询

    node.js - 如何将数据从 BigQuery 移植到已部署在 Google App Engine 上的 ReactJS Webpack 应用程序中

    google-maps - 如何在leaflet-cloudmade中使用Google Maps API

    r - 如何在全局文件中找到像素(单元格)的 4 个坐标(lat-long)?