Я ищу алгоритм, который при задании пары широты и долготы и перевода вектора в метрах в декартовых координатах (x, y) дал бы мне новую координату. Вроде как обратный Haversine. Я мог бы также работать с преобразованием расстояния и курса, но это, вероятно, будет медленнее и не так точно. В идеале алгоритм должен быть быстрым, так как я работаю над встроенной системой. Точность не критична, в пределах 10 метров было бы хорошо.
108
Ответы:
Если ваши смещения не слишком велики (менее нескольких километров), и вы не правы на полюсах, воспользуйтесь быстрой и грязной оценкой, что 111 111 метров (111 111 км) в направлении у составляют 1 градус (широты) и 111 111 * cos (широта) метров в направлении x составляет 1 градус (долготы).
источник
Как говорит Лидман в своем ответе, авиационные формулы Уильямса являются бесценным источником, и чтобы сохранить точность в пределах 10 метров для перемещений до 1 км, вам, вероятно, придется использовать более сложные из них.
Но если вы готовы принять ошибки свыше 10 м для точек со смещением более 200 м, вы можете использовать упрощенный расчет плоской земли. Я думаю, что ошибки все равно будут менее 50 м для смещений до 1 км.
Это должно вернуть:
источник
Я считаю, что Aviation Formulary, здесь отлично подходит для этих типов формул и алгоритмов. Для вашей проблемы, проверьте "широта / длинна с учетом радиуса и расстояния": здесь
Обратите внимание, что этот алгоритм может быть слишком сложным для вашего использования, если вы хотите сохранить низкий уровень использования функций тригонометрии и т. Д.
источник
Возможно, имеет смысл сначала спроецировать эту мысль. Вы могли бы сделать что-то вроде этого псевдокода:
где (x, y) - желаемое смещение.
Вам не нужно использовать utm, любую плоскую систему координат, которая имеет смысл в вашей области.
С каким программным обеспечением вы работаете?
источник
Я создал простую пользовательскую карту на Картах Google, которая иллюстрирует алгоритм оценки, упомянутый в принятом ответе (1/111111 == один метр). Не стесняйтесь видеть и играть с этим здесь:
https://drive.google.com/open?id=1XWlZ8BM00PIZ4qk43DieoJjcXjK4z7xe&usp=sharing
источник