rfrank5356 Ответов: 1

Разница в географической длине пути с использованием VB.NET


У меня есть набор кодов, который вычисляет линии полета, начиная с lat/lon, начального направления, направления поворота,длины трека, ширины трека и количества линий.

Все переменные определяются как десятичные

Используя 135 градусов и 315 градусов, 100-мильную трассу, я получаю 2 разных результата. На трассе "юго-восток" 100.5671 миль друг от друга, и северо-западной точки 99.23002 миль друг от друга. Это искажает начало и конец моих линий полета, но линии параллельны

При тестировании с заголовками 90/270, с более длинными линиями, пары lat/lon, по-видимому, вызывают отклонение в заголовках на 1,1 градуса, но вычисляются с одинаковыми длинами пути и долготой, но с разными долготами, поэтому линии полета не параллельны

Вот несколько формул

Вызов GetNextLineStart(EndLatRadians, EndLonRadians, TrackWidthKM, connectingCourseRadians)
LineStartLatDD = rad2deg(EndLatRadians)
LineStartLonDD = rad2deg(EndLonRadians)
LineCourseRadians = deg2rad (LineCourseDD)вызов GetNextLineStart(EndLatRadians, EndLonRadians, TrackLengthKM, LineCourseRadians)
LineEndLatDD = rad2deg(EndLatRadians)
LineEndLonDD = rad2deg(EndLonRadians)

И

Sub GetNextLineStart(Lat1, Lon1, Dist, Курс)
'широта долгота в радианах, дистанция в км, естественно в радианах
Вызов GetNewlat(Lat1, Lon1, Dist, Курс)
Вызов GetNewlon(Lat1, Lon1, Dist, Course)
NewEndLatDD = RadToDeg(EndLatRadians)
NewEndLonDD = RadToDeg(EndLonRadians)

Конец Подводной Лодки

И настоящее мясо

Sub GetNewlat(Lat1, Lon1, Dist, Подшипник)
Dim R As Decimal = 6378,1
EndLatRadians = Математика.Асин(Математика.Грех(Lat1) * Математика.Потому Что(Р / Р) + Математика.В COS(Lat1) * Математика.Грех(Р / Р) * Математика.Потому Что(Подшипник))
Конец Подводной Лодки
Sub GetNewlon(Lat1, Lon1, Dist, Подшипник)
Dim R As Decimal = 6378,1
EndLonRadians = Lon1 + Математика.Инструмент Atan2(Математика.Грех(Подшипник) * Математика.Грех(Р / Р) * Математика.В COS(Lat1), Математика.Потому Что(Р / Р) - Математика.Грех(Lat1) * Математика.Грех(Lat1))
Конец Подводной Лодки

Что я уже пробовал:

Я изменил переменные на десятичные-никаких изменений,

1 Ответов

Рейтинг:
0

Peter_in_2780

Похоже, вы используете сферическую модель, которая подходит для расчетов с низкой точностью.
Я подозреваю, что фундаментальная причина, по которой вы получаете забавные результаты, заключается в том, что вы вычисляете неявный коэффициент масштабирования долготы (Косинус широты) на одном конце вашей линии.
В расчетах lat/lon есть множество других нелогичных вещей. Например, в общем случае подшипник от А до В в целом не отличается на 180 градусов от подшипника от В до А.
И все становится еще сложнее, когда вы используете более реалистичную эллипсоидальную модель (например, GPS). Если вы хотите увидеть, как это на самом деле звучит, начните с чего-то вроде Технические руководства ICSM - GDA[^]