2014-06-30 80 views
0

我正在開發基於Google App Engine的網絡應用程序。 它有數百個存儲在Data Store中的地方(名稱,緯度,經度)。 我的目標是在谷歌地圖上顯示他們。 由於它們很多,我已經爲地圖的空閒事件註冊了一個javascript函數,並且在執行時將地圖邊界(minLat,maxLat,minLng,maxLng)發佈到請求處理程序,該處理程序應從數據存儲中僅檢索位於指定的邊界。許多地方的Google App Engine NDB查詢

問題是,它不允許我在查詢中執行多個不等式(即Place.latminLat,Place.lntminLng)。

我該怎麼做? (儘量減少所需查詢的數量)

+0

查看了一下geopoints,但它在搜索API中並且相對昂貴。 https://developers.google.com/appengine/docs/python/search/ –

+0

你能發佈你的代碼和你看到的錯誤嗎? –

回答

0

您可以將地圖劃分爲區域,制定將當前位置轉換爲區域的算法,然後通過等式查詢獲取地點。在這種情況下,您需要重疊區域,允許地點成爲其中許多地方的一部分,並且理想情況下使地區大於地圖的大小,以最大限度地減少對多個查詢的需求。

這只是這個想法的一個輪廓,實際的實現會稍微複雜一些,但我手邊沒有。

使用geohashes,這實際上是很酷,你可以閱讀關於他們寫出來,與代碼示例一起,另一個選擇:Scalable, fast, accurate geo apps using Google App Engine + geohash + faultline correction

0

你沒說的數據點是如何經常更新,但假設1)它們不經常更新,並且2)僅有數百個點,然後考慮只查詢一次,並將它們存儲在memcache中。然後你的處理函數只會從memcache中獲取並在內存中過濾。

這不會無限縮放,但由於App Engine定價方式的原因,它每次都可能比查詢數據存儲更便宜。

相關問題