Я использую геопространственные запросы MongoDB — $near
, geoNear
и т. д. — и я хотел бы знать, как преобразовать результат dis
команды geoNear
, а также аргумент radius
для запросов $within
в/из читаемых единиц, таких как мили или километров.
Географическое расстояние/радиус MongoDB в полезных единицах
Ответы (3)
если ваши данные находятся в географических координатах (например, 30,47921 N -121,45724 W), вам нужно преобразовать базовую проекцию в нужные вам единицы (выберите проекцию, которая сохраняет расстояние) или вам нужно преобразовать расстояние в координатах что-то вроде миль.
Используйте для расчетов формулу Хаверсина http://www.movable-type.co.uk/scripts/latlong.html
С помощью команды geoNear для значения dis в километрах добавьте параметр:
distanceMultiplier: (6371 * Math::PI / 180.0)
Обратите внимание, что если вы используете Mongodb версии 2.6.0, существует ошибка, которая всегда позволяет новому поведению для сферических систем координат возвращать расстояние в метрах (на основе координат WGS84).
В документации указано, что указание параметра $near
в устаревших координатах, а не в GeoJSON, должно по-прежнему возвращать радианы. Это было исправлено в более новых версиях.
Отчет об ошибке: Ошибка №13540