有哪些高效的 Geohash 边界框覆盖算法?

Posted

技术标签:

【中文标题】有哪些高效的 Geohash 边界框覆盖算法?【英文标题】:What are some efficient Geohash bounding box coverage algorithms? 【发布时间】:2013-08-19 23:07:02 【问题描述】:

我的要求是:

给定一个 lat-lon 边界框,返回一组 geohashes 使得:

集合中的 geohash 数量应该很少(1 到 5 个 geohash 矩形)如果可能的话。 覆盖范围应尽可能接近输入经纬度边界框 可能的。公差约 +/- 10%。可以稍微遮盖和/或遮盖一点。 应该是高效的,可以在移动设备上进行

我对算法或概念方法最感兴趣。如果不存在开源实现,我计划在 Java/Obj-C 中为 androidios 实现它。

【问题讨论】:

【参考方案1】:

github https://github.com/davidmoten/geo 上的这个 java 项目有一个记录在案的算法来做你想做的事。特别是它在 geohash 区域的范围内也能很好地工作(即在两极和 -180/180 经线处)。

恐怕将 geohashes 的数量保持在较小(1 到 5)以及大约 10% 的容差不会飞。只有 5 个地理散列,许多矩形将在目标矩形面积的 600% 处被地理散列覆盖。事实上,对于下面的示例,在 10% 的区域内需要 667 个哈希!

这是从地理项目网站上的自述文件中截取的表格:

作为一个简单的例子,对于一个比例更接近的边界框 在拐角处有美国纽约州斯克内克塔迪和哈特福德 CT 的屏幕:

以下是不同哈希长度的哈希计数:

m 是总散列区域的平方度大小,a 是 边界框的区域。

长度 numHashes m/a 1 1 1694 2 1 53 3 4 6.6 4 30 1.6 5 667 1.08 6 20227 1.02

所使用的算法高效,相关代码不依赖于其他工件,因此部署到支持 java 的移动设备(如 Android)不会有问题。

【讨论】:

感谢您的图书馆。 如果您有一个坐标,并且想要获取覆盖该坐标指定半径的 3 个字符精度的所有地理哈希,那么获取这些地理哈希的方法是什么? 嗨,Dave,哈希长度为 10,半径为 10.0 公里(10,000 米),将生成多少地理哈希?我正在尝试找到一种算法,该算法在给定点(lat-lng)的指定半径内生成所有可能的 Geohashes。

以上是关于有哪些高效的 Geohash 边界框覆盖算法?的主要内容,如果未能解决你的问题,请参考以下文章

Geohash 边界框搜索

无法获取 Geohash 的边界框

高效的多维空间点索引算法 — Geohash 和 Google S2

高效的多维空间点索引算法 — Geohash 和 Google S2

地理空间索引:GeoHash原理

地理空间索引:GeoHash原理