2011-10-20 68 views
26

我試圖讓我的頭在MongoDB和地理空間搜索。 基本上我想要的是用戶能夠查詢文件(圖像),在距離用戶當前位置設置的距離內拍攝。所以我用戶正在搜索距離他所在的地方1公里範圍內拍攝的所有圖像,我嘗試使用下面的例子 ,但我不知道要設置爲最大距離值。用於maxdistance和MongoDB的單位?

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 }}) 

所以我的問題是什麼我設置爲maxdistance如果我1公里半徑範圍內搜索文檔 ?

我完全陷在這裏。

回答

62

爲了使用MongoDB的$near查詢與公里的邊界,需要將半徑值轉換成公里。默認情況下,mongodb $ near接受$maxDistance作爲radius。通過111.12

轉換距離(一個度約爲111.12公里)使用公里時,或離開距離,因爲它是使用度

你的問題

我該怎麼設置爲maxdistance如果我我正在搜尋1公里半徑內的 文件嗎?

您可以使用此

db.places.find({ loc : { $near : [50,50] , $maxDistance : 1/111.12 } }) 

我已經回答瞭如何使用mongo geospatial features here in detail。您可以檢查出

+0

酷,謝謝! $ near和$ nearSphere有什麼區別? –

+13

$ near假設了一個理想化的平坦地球模型,這意味着緯度(y)和經度(x)的arcdegree在任何地方都代表相同的距離。所以你必須將半徑乘以111或69來得到結果。但是在nearSphere,你需要將半徑轉換(6371公里或3959英里)才能使它工作......你可以閱讀更多關於[here](http ://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat) – RameshVel

+0

是否可以查詢分數? – Karl

15

由於的MongoDB 2.4版本,你可以直接在米指定半徑$ maxDistance的價值,像這樣:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

這取決於索引。如果索引是「2d」,這將不起作用,因爲2d索引假定「弧度格式」。如果索引另一方面是'2dsphere',那麼你是正確的。 :-) 文檔:https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen

相關問題