Расчет расстояния в MongoDB не является точным

Я пытаюсь построить пространственный запрос к моей базе данных MongoDB (чтобы найти все результаты, используя geoNear.

Это работает, за исключением того, что рассчитанное расстояние не совсем точно. Итак, вот что у меня есть:

> db.status.find()
{
    "_id":NumberLong(5),
    "location":{
        "latitude":48.8947767,
        "longitudes":2.103352099999997
    }
}

У меня есть индекс:

> db.status.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "ns" : "aroundb.status",
        "name" : "_id_"
    },
    {
        "v" : 1,
        "key" : {
            "location" : "2dsphere"
        },
        "ns" : "aroundb.status",
        "name" : "location_2dsphere"
    }
]

И вот мой запрос:

db.runCommand({ geoNear:"status",near: [ 48.8947767, 2.093352099999997], spherical:true, distanceMultiplier:6371} )

Результат:

{
"ns" : "aroundb.status",
"results" : [
    {
        "dis" : 1.1119514223177513,
        "obj" : {
            "_id" : NumberLong(5),
            "location" : {
                "latitude" : 48.8947767,
                "longitudes" : 2.103352099999997
            }

        }
    }
],
"stats" : {
    "time" : 14,
    "nscanned" : 1,
    "avgDistance" : 1.1119514223177513,
    "maxDistance" : 1.1119514223177513
},
"ok" : 1

}

Как видите, расчетное расстояние (умноженное на радиус Земли, чтобы его рассчитать в км) составляет 1,1119514223177513 км.

Если я рассчитываю расстояние на сайте http://www.lexilogos.com/calcul_distances.htm то рассчитанное расстояние составляет 0,7312508492264875 км.

С помощью Google Maps расстояние также составляет 0,7312508492264875 км.

Итак, вопрос: что я делаю не так?

1 ответ

Решение

MongoDB требует координаты в [longitude, latitude] формат. В вашем случае это [latitude, longitude] и это не имеет значения, если вы пометите поля, чтобы отметить, что порядок отличается от ожидаемого:

"location":{
   "latitude":48.8947767,
   "longitudes":2.103352099999997
}

по-прежнему интерпретируется как [long: 48.8947767, lat: 2.103352099999997]

Другие вопросы по тегам