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

mob*_*com 3 gis map geolocation geospatial geohashing

我的要求是:

给定一个经纬度边界框,返回一组 geohashes,使得:


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

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

Dav*_*ten 5

github https://github.com/davidmoten/geo上的这个 java 项目有一个文档化的算法来做你想做的事。特别是它在 geohash 区域(即极点和 -180/180 经度线)的边界处也能很好地工作。

保持geohashes的数量很小(1到5)以及大约10%的容忍度不会飞我害怕。只有 5 个 geohashes,许多矩形将在目标矩形面积的 600% 处被 geohashes 覆盖。事实上,对于下面的示例,进入该区域的 10% 需要 667 个哈希值!

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

举一个简单的例子,一个边界框的比例更像是一个屏幕,角落是美国的 Schenectady 和 Hartford 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)的移动设备不会有问题。