2012-11-23 57 views

回答

3

的MongoDB(如2.2)僅支持2-d地理空間索引,而不是3-d。

單個位置使用MongoDB B樹索引頂部的geohash系統進行編碼。

在MongoDB 1.8+中,對使用十進制度的查詢支持Spherical correction

有距離計算的two main types

+0

Stennie,所以當我查詢 '2D' 建立索引的集合是這樣的:'db.runCommand({geoNear: 'my_collection',鄰近:[my_lon,my_lat],球形:真,maxDistance:my_dist_in_radiants})' mongodb將使用'n-Vector',對吧?我會看看代碼,但它是否將地球視爲完美的球體? – Gevorg

+0

@Stennie MongoDB的$ near和javascript的Haversine公式返回的距離是不同的。我想在使用MongoDB球形索引的JavaScript中使用相同的方法。你能幫我解決嗎? –

+0

@SandeepSharma這個答案指的是MongoDB中較舊的'2d'索引類型,它被MongoDB 2.4和更新的'2dsphere'索引類型取代。這兩種類型在MongoDB 3.4中都是可用的,可以通過'$ near'使用。 '2dsphere'索引計算是通過Google提供的一個開源C++庫,名爲's2',它使用[Haversine公式](https://github.com/mongodb/mongo/blob/ac84a0d028eff2b8ca42817d998cb8b34563816c/src/third_party/s2/ s2latlng.cc#L37)。但是,JS中的浮點計算不如C++精確,因此我不希望得到相同的結果。 – Stennie