我的要求是:
给定一个 lat-lon 边界框,返回一组 geohashes,使得:
- 如果可能,集合中的 geohash 数量应该很小(1 到 5 个 geohash
矩形)。 - 覆盖范围应尽可能靠近输入经纬度边界框。公差约 +/- 10%。可以稍微遮盖和/或遮盖一点。
- 它应该是高效的,并且可以在移动设备上进行
我对算法或概念方法最感兴趣。如果不存在开源实现,我计划在 Android 和 iOS 的 Java/Obj-C 中实现它。
我的要求是:
给定一个 lat-lon 边界框,返回一组 geohashes,使得:
我对算法或概念方法最感兴趣。如果不存在开源实现,我计划在 Android 和 iOS 的 Java/Obj-C 中实现它。
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)不会有问题。