2011-05-12 126 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這是專爲這個非常用例。