2
在MongoDB中,可以創建索引,而不是在'2d'和'3d'空間中查找指定經度和緯度的文檔near
。MongoDB使用什麼樣的公式來計算geospherical索引中的距離?
MongoDB使用什麼樣的公式來查找兩個給定緯度/經度對之間的距離?
浮現在我的腦海裏有幾個是:
- 歐氏距離
- haversine公式
- Vincenty式
在MongoDB中,可以創建索引,而不是在'2d'和'3d'空間中查找指定經度和緯度的文檔near
。MongoDB使用什麼樣的公式來計算geospherical索引中的距離?
MongoDB使用什麼樣的公式來查找兩個給定緯度/經度對之間的距離?
浮現在我的腦海裏有幾個是:
的MongoDB(如2.2)僅支持2-d地理空間索引,而不是3-d。
單個位置使用MongoDB B樹索引頂部的geohash系統進行編碼。
在MongoDB 1.8+中,對使用十進制度的查詢支持Spherical correction。
有距離計算的two main types:
distance()
spheredist_rad()
。
Stennie,所以當我查詢 '2D' 建立索引的集合是這樣的:'db.runCommand({geoNear: 'my_collection',鄰近:[my_lon,my_lat],球形:真,maxDistance:my_dist_in_radiants})' mongodb將使用'n-Vector',對吧?我會看看代碼,但它是否將地球視爲完美的球體? – Gevorg
@Stennie MongoDB的$ near和javascript的Haversine公式返回的距離是不同的。我想在使用MongoDB球形索引的JavaScript中使用相同的方法。你能幫我解決嗎? –
@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