2011-11-27 76 views
3

我有一個網站,人們可以在谷歌地圖上查看一些地方,這些地方是用lat/lng座標存儲的。存儲是mongodb。現在,當用戶導航地圖時,我需要查找現在哪些地方位於地圖的可見部分。Google地圖搜索與mongodb地理空間最佳戰略

我是mongo的新手,但看過空間部分。我的問題現在是執行此查找的有效方法。

每次用戶導航地圖時,我是否需要製作一個ensureIndex,然後如何查詢地圖可見邊界內的所有地方?

+0

確保它也適用於地圖邊界......我知道在阿拉斯加以外沒有很多地方在+ -180°,但仍然有人可能需要它。 –

回答

5

根據蒙戈文檔,您可以在邊框內查詢,像這樣

box = [[40.73083, -73.99756], [40.741404, -73.988135]] 
db.places.find({"loc" : {"$within" : {"$box" : box}}}) 

這裏的關鍵點是內使用的邊框內查詢。

爲了得到值你的箱子,剛剛得到的谷歌地圖的界限,像這樣

map.getBounds() 

其中映射是谷歌地圖的對象。 getBounds將返回一個LatLngBounds對象,您可以從中構建您的框以查詢mongo。

至於ensureIndex,你應該這樣做,據我所知。

+0

我應該做一個db.places.ensureIndex({loc:「2d」}),而不是指定min/max的任何內容嗎? –

+0

假設你使用最小/最大-180/180映射地球上的緯度/經度值,這個loc:「2d」在沒有最小/最大值的情況下就足夠了,如果你映射某個其他範圍的值,那麼你可以用min /最大值,但是loc:「2d」,沒有最小值/最大值指定默認值爲-180/180 – omarello