Я хочу найти точку широты и долготы с учетом азимута, расстояния и начальной широты и долготы.
Это кажется противоположностью этого вопроса ( Расстояние между широтой / длинной точкой ).
Я уже изучил формулу haversine и думаю, что это приближение мира, вероятно, достаточно близко.
Я предполагаю, что мне нужно решить формулу haversine для моего неизвестного lat / long, это правильно? Есть ли хорошие сайты, которые говорят о подобных вещах? Кажется, это было бы обычным делом, но мой поиск в Google поднял только вопросы, подобные приведенному выше.
То, что я действительно ищу, это просто формула для этого. Я хотел бы дать ему начальный широта / долгота, азимут и расстояние (мили или километры), и я хотел бы получить из него пару широта / долгота, которые представляют, где бы вы оказались, если бы они путешествовали этот маршрут.
источник
Ответы:
Мне было бы любопытно, как результаты этой формулы сравниваются с peri Esri's .
( цитата ).
Вот HTML-страница для тестирования .
источник
Если вы находились в самолете, то точка, находящаяся на расстоянии r метров от оси в градусах к востоку от севера, смещается на r * cos (a) в северном направлении и на r * sin (a) в восточном направлении. (Эти утверждения более или менее определяют синус и косинус.)
Хотя вы не находитесь в самолете - вы работаете на поверхности изогнутого эллипсоида, который моделирует поверхность Земли - любое расстояние менее нескольких сотен километров покрывает такую небольшую часть поверхности, что для большинства практических целей это может считаться плоским. Единственное оставшееся осложнение состоит в том, что один градус долготы не покрывает такое же расстояние, как градус широты. В сферической модели Земли один градус долготы составляет всего лишь cos (широту), равный градусу широты. (В эллипсоидальной модели это по-прежнему отличное приближение, примерно до 2,5 значимых цифр.)
Наконец, один градус широты составляет примерно 10 ^ 7/90 = 111 111 метров. Теперь у нас есть вся информация, необходимая для пересчета метров в градусы:
Смещение на север составляет r * cos (a) / 111111 градусов;
Смещение на восток составляет r * sin (a) / cos (широта) / 111111 градусов.
Например, на широте -0,31399 градусов и направлении = 30 градусов к востоку от севера, мы можем вычислить
Отсюда, начиная с (-78.4437, -0.31399), новое местоположение находится в (-78.4437 + 0.00045, -0.31399 + 0.0007794) = (-78.4432, -0.313211).
Более точный ответ в современной системе отсчета ITRF00: (-78,4433, -0,313207): это на расстоянии 0,43 метра от приблизительного ответа, что указывает на ошибку приближения на 0,43% в этом случае. Чтобы достичь более высокой точности, вы должны использовать формулы эллипсоидального расстояния (которые намного сложнее) или высокоточный конформный проекция с нулевой расходимостью (чтобы направление было правильным).
источник
Если вам нужно решение JavaScript, рассмотрите эти
functions
и эту скрипку :Так что если вы хотите вычислить новую координату, это может быть так:
источник
Я получил это, работая в ObjectiveC. Ключевым моментом здесь является знание того, что вам нужны точки широты / долготы в радианах, и вам необходимо преобразовать их обратно в широты / долготы после применения уравнения. Также знайте, что расстояние и tc указаны в радианах.
Вот оригинальное уравнение:
Здесь это реализовано в ObjC, где радиан - это радиан, измеренный против часовой стрелки от N (например, PI / 2 - это W, PI - это S, 2 PI / 3 - это E), а расстояние - в километрах.
источник
Если вы заинтересованы в большей точности, есть Винсенти . (Ссылка на «прямую» форму, которая именно то, что вы ищете).
Существует немало существующих реализаций, если вы ищете код.
Кроме того, вопрос: Вы не предполагаете, что путешественник поддерживает один и тот же подшипник на протяжении всей поездки? Если так, то эти методы не отвечают на правильный вопрос. (Вам лучше проецировать на mercator, рисовать прямую линию, а затем не проецировать результат.)
источник
Вот решение Python:
источник
Я использую подход, описанный ниже, при определении следующей координаты, учитывая направление и расстояние от предыдущей координаты. У меня есть проблема с точностью с другим подходом, который я прочитал из Интернета.
Я использую это при определении площади земли, которая является многоугольником, и строю этот полигон в Google Earth. Титул земли имеет азимуты и расстояния, написанные следующим образом: «NorthOrSouth x градусов y минут EastOrWest, z метров до точки n;».
Таким образом, исходя из заданных координат исходной точки, я сначала вычислить расстояние за один градус широты и долготы на один градус, используя формулу гаверсинуса, потому что это зависит от местоположения. Затем я определяю следующую координату по формуле синуса и косинуса тригонометрии.
Ниже приводится JavaScript:
источник