Как найти в списке значений долготы и широты те, которые наиболее близки к одному значению долготы / широты - PullRequest
0 голосов
/ 17 октября 2019

У меня есть список пар долготы и широты в MongoDB, и я хочу получить все пары широт, которые находятся ближе всего к определенной паре значений долготы / широты, скажем, не более 10 км между данной парой и любой другой парой.

Какой алгоритм использовать для поиска, код для выполнения поиска на самом деле не проблема, поскольку, как только у меня появится понимание того, как найти нужную мне разницу.

Я предполагаю, что должен быть способ найти абсолютную разницу в долготе и широте между данной парой широта / долгота и каждой другой парой широта / долгота в базе данных.

Я видел эту ссылку

Рассчитать расстояние между двумя точками широты и долготы? (Формула Haversine)

и мне нужно знать, как выполнить поиск в MongoDB, сравнивая множество записей с одной парой широта / долгота.

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете использовать встроенную функциональность MongoDB для поиска по радиусу с помощью функции $centerShere.

{
   <location field>: {
      $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] }
   }
}

Например,

db.places.find( {
  loc: { $geoWithin: { $centerSphere: [ [ -88, 30 ], 10/6378.1 ] } }
} )

, где 6378.1 - радиусЗемли в км, используется для преобразования расстояния в 10 км в радианы, просто путем деления значения расстояния на радиус сферы (Земли).

https://docs.mongodb.com/manual/reference/operator/query/centerSphere/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...