谷歌应用引擎:查询geohash

时间:2011-04-28 07:34:41

标签: google-app-engine

我有一个geohash的db.StringProperty(),通过给定一个哈希码,我如何找到更接近10的结果?

我在下面试过,但似乎不对

pois = POI.all().filter('geohash <', h_latlng).order('-geohash').fetch(10)

1 个答案:

答案 0 :(得分:1)

geohash无法完成找到n个最近结果的任务。您可以通过前缀找到任何方形区域的内容。但要找到包含n-nearest的可靠结果,您需要获取至少9个前缀,这使得它成为一个非常昂贵的查询。使问题复杂化的是需要计算9个方格的前缀。

IMO这个问题目前是app-engine上有效解决的难题。到目前为止,我已经有一年了,还没有找到一个复杂而快速的解决方案。具有地理索引或2个不等式的关系数据库将更好,更快地执行此类任务。但我也对好的解决方案感兴趣。 : - )

引用David Troy:

  

Geohash也有属性as   位数减少(来自   右),准确度降低。这个   属性可以用来做边界   框搜索,作为靠近一个点的点   另一个将分享类似的Geohash   前缀。

     

然而,因为给定点可能   出现在给定Geohash的边缘   边界框,有必要   生成一个Geohash值列表   为了实现真正的接近   搜索一下。因为   Geohash算法使用base-32   编号系统,有可能   得出周围的Geohash值   任何其他给定的Geohash值使用a   简单的查找表。

请参阅:https://github.com/davetroy/geohash-js