3

我的要求是:

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

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

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

4

1 回答 1

5

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)不会有问题。

于 2013-09-19T21:15:01.133 回答