Javascript MongoDB$geoNear距离与Google地图距离不同

Javascript MongoDB$geoNear距离与Google地图距离不同,javascript,mongodb,google-maps,Javascript,Mongodb,Google Maps,我的DB中有一个场地列表,我希望按照与客户的距离顺序显示这些场地 我对DB的查询如下: venueCollection.aggregate([ { '$geoNear': { 'near': { 'type': 'Point', 'coordinates': [ user_lng , user_lat ]

我的DB中有一个场地列表,我希望按照与客户的距离顺序显示这些场地

我对DB的查询如下:

    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
        ]
    }
}
它显示一个场馆列表,并且距离字段从最近到最远都是正确的

客户端我使用
纬度
经度
(与我传递给服务器的相同,与场地的相同)通过谷歌地图计算距离:

      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');
它正确地显示了两点之间的距离

问题在于两个值(来自Mongo和来自GMAP)不同,即使使用mongoDB中的
$sort
正确显示列表,也会显示不符合顺序的距离,即:

venue 01: 21.350km
venue 02: 21.412km
venue 03: 21.388km // wrong!!!
venue 04: 21.547km
错误在哪里?
我需要按距离顺序对场地进行排序,并以公里为单位显示距离。。。它也应该是有序的…

MongoDB假设地球是一个完美的球体,并使用地球的平均半径来计算两点之间的距离。但正如你们所知,地球不是球体,而是更多的椭球体,所以距离计算在MongoDB中不是完美的,而是近似的。然而,谷歌使用非常复杂的公式来获得更好的结果。他们在地球上的不同位置都有巨大的地球半径数据库

请参阅本网站,该网站解释并提供在线计算器,使用地球平均半径计算两点之间的距离

您将看到,上述网站和MongoDB计算的距离是相同的


然而,如果您想得到接近准确的结果,请参阅下面的链接。它使用非常复杂的算法来获得更好的结果。

请用可验证代码和MongoDB文档更新您的帖子。我添加了示例文档,但我认为没有必要。只需测试每个位置的经纬度和另一个位置,以获得距离。Mongo返回的距离与Google地图不同。。。你实际上不需要我的文件…MongoDB假设地球是一个完美的球体,而计算距离时,地球不是。如果您的应用程序是距离敏感的,那么不要依赖MongoDB来获得准确性。好吧,但是为什么要将相同的纬度和经度传递给两个不同的服务呢?我有完全不同的距离?我仍然不明白什么是
distanceField
确切返回的。。。它不是米,也不是英里。。。只是数字…见下面我的帖子。我试着解释为什么你会得到两个不同的结果。好吧,这并不能解决我的问题,但现在我知道为什么会发生了。谢谢,这就是重点。MongoDB无法单独解决您的问题。你需要决定你的应用程序是否能够承受一些不准确的情况,或者精确性正在破坏交易。是的,它可以。我只希望我的数据能被正确地排序。即使我不认为距离是以米为单位的,因为mongo距离和gMaps距离之间的差异太大了……它的值取决于你的索引类型。如果索引是2d,则以弧度为单位;如果索引类型是2d球体,则距离以米为单位。