2011-05-12 125 views
1

由于GQL引擎的限制,有人建议想要执行邻近搜索的人应该使用建议的地理模型找到这些限制的一些方法。它可能不是一个非常优雅的或快速的解决方案,但有什么从这里停止使用该算法的人:Google App Engine和Google Maps在Python中搜索近距离搜索

SELECT id, (3959 * acos(cos(radians(lat_t)) * cos(radians(lat)) * cos(radians(lng) - radians(lng_t)) + sin(radians(lat_t)) * sin(radians(lat)))) AS distance FROM Stores HAVING distance < 25 ORDER BY distance

为计算距离的简单方法。即我们简单地通过循环遍历数据存储区中的每条记录来手动计算每对(lat,lng)和(lat_t,lng_t)的距离,从而获得目标距离内所有记录的id,而无需求助于使用HAVING命令?因此,总结一下,我们会做一个简单的GQL查找来获取所有记录并循环遍历所有的lng/lat对,并与我们的目标值进行比较。

http://code.google.com/apis/maps/articles/geospatial.html

回答

2

显然,这片段是SQL的一些味道,并与数据存储的更简单的基于索引的查找不兼容。

如果你的意思是你只想抓取所有的实体并用python在内存中执行距离计算;那么这当然是可能的,但是您将仅限于在相对较小的实体集上执行此操作或使用“任务”批量执行操作。

看看GeoModel这是专为这个非常用例。