我有一个geohash的db.StringProperty(),通过给定一个哈希码,我如何找到更接近10的结果?
我在下面试过,但似乎不对
pois = POI.all().filter('geohash <', h_latlng).order('-geohash').fetch(10)
答案 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 简单的查找表。