geospatial - 您如何识别不在陆地上的 GeoHash 点?
问题描述
我有一个已转换为 GeoHash 的纬度/经度坐标列表。我的目标是识别报告在水面上的点(任何国家边界之外的海洋、海洋等)。我也有一个数据集,其中所有世界国家边界的纬度/经度边界的所有形状也转换为 GeoHash。
因此,对于给定的 GeoHash 点,我试图将其归类为是否超过(国际)水域。我曾考虑在海洋中手动选择点,并使用一个简短的 GeoHash 前缀在海洋中创建一个大盒子,但这是相当有限的。
也许通常有一种方法可以理解在任何国家边界之外成为 GeoHash 点意味着什么?
解决方案
它不是很好地使用geohash。Geohash 擅长识别特定点,但不擅长描述国家边界或海洋等复杂形状。
我考虑过在海洋中手动选择点,并使用一个短的 GeoHash 前缀在海洋中创建一个大盒子,但这是相当有限的。
是的,这将给出非常不精确的结果。您需要测试每个点,是否属于任何国家的多边形。您如何执行此操作取决于您使用的平台,例如在 SQL 中您运行ST_Intersects(point, country)
查询。
我只需将 geohash 转换回 lat/lon 对并检查它们。
如果您确实想使用 geohash 或者如果您有太多(数十亿)点,您可以使用简短的 GeoHash 前缀技巧 - 但您需要使用许多前缀来表示每个海洋。类似于以下内容,使用前缀树:
- 从几个字母的 GeoHash 长度开始,
- 对于每个可能的 GeoHash 字符串,计算它的盒子是否完全被海洋或陆地包含(使用 ST_Intersects 或类似的精确方法)。
- 如果整个盒子属于一个类 - 将其添加到前缀树。
- 如果不是 - 添加更多字母(同样,所有可能的组合)并递归地继续直到您需要停止的某个限制。
一旦你建立了这样的树 - 你可以使用 GeoHash 在这棵树中快速查找你的答案。
推荐阅读
- python - ConnectionResetError: [WinError 10054] 将网站读入 Pandas 时
- python - 统计浏览次数文章
- sql - 如何在postgres中获取每个日期的数据计数
- android - Kotlin 协程 UI 未冻结
- python - TidBit 电脑商店的信用计划
- python-3.x - 为什么这个特定的 if 条件永远不会执行?[如果中间 < k <= 正确:]
- java - oracle.net.ns.NetException :ORA-12505, TNS:listener 目前不知道 Oracle18c ExpressEdition 中连接描述符中给出的 SID
- javascript - setTransform 和 Scale 以适合给定图像的 Canvas
- javascript - 如何进行带有错误响应的 JSON api 调用?
- swift - 如何在 SwiftUI 视图上禁用用户交互?