Географическое расстояние/радиус MongoDB в полезных единицах

Я использую геопространственные запросы MongoDB — $near, geoNear и т. д. — и я хотел бы знать, как преобразовать результат dis команды geoNear, а также аргумент radius для запросов $within в/из читаемых единиц, таких как мили или километров.


person Chris Forrette    schedule 12.08.2010    source источник
comment
Похоже, есть гораздо лучший ответ, чем тот, который отмечен как правильный. Можно ли его изменить?   -  person JohnAllen    schedule 09.10.2014


Ответы (3)


если ваши данные находятся в географических координатах (например, 30,47921 N -121,45724 W), вам нужно преобразовать базовую проекцию в нужные вам единицы (выберите проекцию, которая сохраняет расстояние) или вам нужно преобразовать расстояние в координатах что-то вроде миль.

Используйте для расчетов формулу Хаверсина http://www.movable-type.co.uk/scripts/latlong.html

person TheSteve0    schedule 14.08.2010
comment
Спасибо за Ваш ответ! Мои данные действительно представляют собой точки широты/долготы, и я смог использовать формулу Хаверсина для расчета расстояния между результатами и исходной точкой, вставив оба набора точек широты/долготы, но я до сих пор не уверен, что делать конкретно с «дис» и «радиус». Не могли бы вы пояснить, что вы имели в виду под преобразованием базовой проекции? Кажется, что проще преобразовать 'dis', чем подключить оба набора широты и долготы, не так ли? Нужно ли мне изменить формулу Хаверсина, чтобы она соответствовала моим потребностям? Если да, то какие переменные в уравнении могут включать «dis»/«radius»? - person Chris Forrette; 16.08.2010
comment
Привет, Крис, у меня был аналогичный вопрос (stackoverflow.com/questions/3878702/). Ребята, если не возражаете, можете подробнее объяснить решение? Вы должны использовать карту/уменьшить? Еще раз спасибо! - person Abe; 07.10.2010
comment
Если вы используете Mongo › 1.8, вы можете использовать сферическую модель: mongodb .org/display/DOCS/ - person TheSteve0; 18.04.2012

С помощью команды geoNear для значения dis в километрах добавьте параметр:

distanceMultiplier: (6371 * Math::PI / 180.0)
person tandem    schedule 16.03.2011

Обратите внимание, что если вы используете Mongodb версии 2.6.0, существует ошибка, которая всегда позволяет новому поведению для сферических систем координат возвращать расстояние в метрах (на основе координат WGS84).

В документации указано, что указание параметра $near в устаревших координатах, а не в GeoJSON, должно по-прежнему возвращать радианы. Это было исправлено в более новых версиях.

Отчет об ошибке: Ошибка №13540

person jlapoutre    schedule 22.06.2014