首页 > 解决方案 > 您如何识别不在陆地上的 GeoHash 点?

问题描述

我有一个已转换为 GeoHash 的纬度/经度坐标列表。我的目标是识别报告在水面上的点(任何国家边界之外的海洋、海洋等)。我也有一个数据集,其中所有世界国家边界的纬度/经度边界的所有形状也转换为 GeoHash。

因此,对于给定的 GeoHash 点,我试图将其归类为是否超过(国际)水域。我曾考虑在海洋中手动选择点,并使用一个简短的 GeoHash 前缀在海洋中创建一个大盒子,但这是相当有限的。

也许通常有一种方法可以理解在任何国家边界之外成为 GeoHash 点意味着什么?

标签: geospatiallatitude-longitudegeohashing

解决方案


它不是很好地使用geohash。Geohash 擅长识别特定点,但不擅长描述国家边界或海洋等复杂形状。

我考虑过在海洋中手动选择点,并使用一个短的 GeoHash 前缀在海洋中创建一个大盒子,但这是相当有限的。

是的,这将给出非常不精确的结果。您需要测试每个点,是否属于任何国家的多边形。您如何执行此操作取决于您使用的平台,例如在 SQL 中您运行ST_Intersects(point, country)查询。

我只需将 geohash 转换回 lat/lon 对并检查它们。

如果您确实想使用 geohash 或者如果您有太多(数十亿)点,您可以使用简短的 GeoHash 前缀技巧 - 但您需要使用许多前缀来表示每个海洋。类似于以下内容,使用前缀树:

  • 从几个字母的 GeoHash 长度开始,
  • 对于每个可能的 GeoHash 字符串,计算它的盒子是否完全被海洋或陆地包含(使用 ST_Intersects 或类似的精确方法)。
  • 如果整个盒子属于一个类 - 将其添加到前缀树。
  • 如果不是 - 添加更多字母(同样,所有可能的组合)并递归地继续直到您需要停止的某个限制。

一旦你建立了这样的树 - 你可以使用 GeoHash 在这棵树中快速查找你的答案。


推荐阅读