我在我的數據庫中有一個Venues列表,我希望按距離到客戶端的順序顯示它們。
我到數據庫查詢如下:
venueCollection.aggregate([
{
'$geoNear': {
'near': {
'type': 'Point',
'coordinates': [ user_lng , user_lat ]
},
'spherical': true,
'distanceField': 'dist'
}
},
{
'$sort': {
'dist': 1
}
}
], function (err, venues) {
// my code...
});
一個簡單的文檔:
{
"_id" : ObjectId("56ec1c833e017f403870e2c5"),
"name" : "A & H",
"city" : "'s-Gravenhage",
"province" : "Zuid Holland",
"location" : {
"type" : "Point",
"coordinates" : [
4.276930300000004,
52.0732475
]
}
}
它個放映場館的列表和distance
領域是正確的,從最接近最遠。
客戶端我用的是latitude
和longitude
(同我傳遞給服務器和同一會場)來計算與谷歌地圖的距離:
var venuePosition = new google.maps.LatLng(attrs.lat, attrs.lng);
var distance = google.maps.geometry.spherical.computeDistanceBetween(scope.user.position.compiled, venuePosition);
element.text((distance/1000).toFixed(2) + ' km');
它正確地顯示2點之間的距離。
的問題是2個值(從蒙戈和gMaps)是不同的,即使列表使用$sort
從MongoDB中顯示它的距離是不按順序,即:
venue 01: 21.350km
venue 02: 21.412km
venue 03: 21.388km // wrong!!!
venue 04: 21.547km
正確顯示
錯誤在哪裏? 我需要按照距離順序排序我的場地,並顯示以km爲單位的距離...並且它應該被排序...
請更新您的文章以及可驗證的代碼和MongoDB文檔。 – Saleem
我添加了示例文件,但我不認爲這是必要的。只需測試每個經緯度位置和另一個距離的位置即可。 Mongo返回的距離不同於Google Maps ... 您實際上並不需要我的文檔... –
MongoDB假設在計算距離時,地球是一個完美的球體。如果您的應用程序對距離敏感,請不要依賴MongoDB的準確性。 – Saleem