您如何识别不在陆地上的GeoHash点?

时间:2019-11-04 14:34:44

标签: geospatial latitude-longitude geohashing

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

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

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

1 个答案:

答案 0 :(得分:0)

这不是好好利用geohash。 Geohash擅长识别特定点,但不擅长描述诸如国家边界或海洋之类的复杂形状。

  

我想过要手动在大洋中   使用较短的GeoHash前缀在海洋中创建一个大盒子,但是   那是相当有限的。

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

我只是将geohash转换回经/纬对并进行检查。

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

  • 以GeoHash开头的几个字母开头,
  • 对于每个可能的GeoHash字符串,计算其框是否完全由海洋或陆地完全容纳(使用ST_Intersects或类似的精确方法)。
  • 如果整个盒子属于一类,则将其添加到前缀树中。
  • 如果不是,请添加更多字母(再次是所有可能的组合),然后递归地继续操作直至达到您需要停止的位置。

一旦构建了这样的树,您就可以使用GeoHash在此树中快速查找答案。