Расчет расстояния в 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]