2013-07-25 23 views
0

我正在製作地圖應用程序。我有一堆地點的協調。我想返回屏幕上可見區域內的所有點。這是用谷歌地圖API完成的。它爲您提供屏幕上可見的地圖的東北和西南座標。我正在使用MongoDb。地圖應用程序 - 在MongoDB中存儲座標的最佳方式

顯而易見的方法是以ne-sw對角線的中點爲中心,以任意角點爲半徑的距離,並找到該半徑內的所有點。

但是將它們存儲在一個列表中將是O(n)操作 - 對於每個請求都不可縮放。存儲它們以便能夠快速獲得點的更好方法是什麼?

我正在考慮將它們拆分成包含半徑(r)內所有點的桶,並維護一個桶的排序列表。由於屏幕可以位於最多4個桶(單獨桶中的每個角落)上,因此我找到O(log n)中最近的桶和O(1)中最接近的3個桶。現在我只需要對這4個桶進行計算。

但這仍然是很多水桶! Google能夠非常快地在地圖上呈現點。他們有很多點。還有很多用戶。他們如何管理?我不希望達到這種優化水平,但必須有一個更好的數據結構。

+0

http://docs.mongodb.org/manual/applications/geospatial-indexes/ – WiredPrairie

回答

0

也許我不明白...。您的解決方案聽起來很複雜..

你必須在屏幕角落 - NE龍和緯度和SW龍和緯度 因此,你必須SW_Lat,SW_long,NE_lat,SW_Lat

你想把這個邊界內選擇點... 如果您有長&緯度存儲爲十進制使用的僞代碼:

Select * from points 
where point_lat > SW_lat 
and point_lat < NE_lat 
and point_long > SW_long 
and point_long < NE_long 

,將填補可視屏幕。

相關問題