我正在製作地圖應用程序。我有一堆地點的協調。我想返回屏幕上可見區域內的所有點。這是用谷歌地圖API完成的。它爲您提供屏幕上可見的地圖的東北和西南座標。我正在使用MongoDb。地圖應用程序 - 在MongoDB中存儲座標的最佳方式
顯而易見的方法是以ne-sw對角線的中點爲中心,以任意角點爲半徑的距離,並找到該半徑內的所有點。
但是將它們存儲在一個列表中將是O(n)操作 - 對於每個請求都不可縮放。存儲它們以便能夠快速獲得點的更好方法是什麼?
我正在考慮將它們拆分成包含半徑(r)內所有點的桶,並維護一個桶的排序列表。由於屏幕可以位於最多4個桶(單獨桶中的每個角落)上,因此我找到O(log n)中最近的桶和O(1)中最接近的3個桶。現在我只需要對這4個桶進行計算。
但這仍然是很多水桶! Google能夠非常快地在地圖上呈現點。他們有很多點。還有很多用戶。他們如何管理?我不希望達到這種優化水平,但必須有一個更好的數據結構。
http://docs.mongodb.org/manual/applications/geospatial-indexes/ – WiredPrairie