MongoDB Bound Queries: как преобразовать милю в радиан? - PullRequest
16 голосов
/ 07 октября 2010

У меня есть коллекция магазинов с геопространственным индексом по местоположению.

Что я пытаюсь сделать, это учитывая широту пользователя, широту и радиус поиска (ми), я хочу вернутьсписок магазинов, которые находятся в этих параметрах.

Я видел следующий пример в документации MongoDB (http://www.mongodb.org/display/DOCS/Geospatial+Indexing),, но похоже, что расстояние в радианах.

center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

Итак, какова формула для пересчета миль в радианы?

Решение Удивительные люди из mongodb-user помогли мне найти ответ. По сути, то, что я действительно искал, было способомограничить расстояние.

Per, в обновленной документации есть 3-й параметр для запроса $ near: вы также можете использовать $ near с максимальным расстоянием

db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)

Значение для $maxDistance в радианах, поэтому мне пришлось взять расстояние в милях и разделить его на 69.

Спасибо!

Ответы [ 2 ]

15 голосов
/ 07 октября 2010

Как говорят в документах:

На всех расстояниях используются радианы.Это позволяет вам легко умножить на радиус Земли (около 6371 км или 3959 миль), чтобы получить расстояние в выбранных вами единицах.И наоборот, делите на радиус Земли при выполнении запросов.

, поэтому вам просто нужно разделить свой радиус на радиус Земли.в вашем примере это будет:

radius = 10/3959
0 голосов
/ 08 июня 2018

Чтобы использовать mongodb $ вблизи запросов с границами в км, необходимо преобразовать значение радиуса в км.По умолчанию mongodb $ near принимает $ maxDistance в качестве радиуса.

Преобразование расстояния на 111,12 (один градус составляет приблизительно 111,12 километра) при использовании км, или оставьте расстояние, как при использовании степени

, есливаш радиус в км, тогда используйте

 db.places.find( { loc : { $near : [50,50] , $maxDistance : 10/111.12 } } )

, но если ваш радиус в милях, то конвертируйте его в км

...