我在我的数据库中有一个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