Онлайн-калькуляторы, такие как http://www.csgnetwork.com/degreelenllavcalc.html (просмотр страницы источника), используют приведенные ниже формулы для получения метров за градус. Я в целом понимаю, как расстояние на градус варьируется в зависимости от местоположения широты, но я не понимаю, как это приводит к приведенному ниже. Более конкретно, откуда берутся константы, 3 члена «cos» в каждой формуле и коэффициенты (2, 4, 6; 3 и 5) для «lat»?
// Set up "Constants"
m1 = 111132.92; // latitude calculation term 1
m2 = -559.82; // latitude calculation term 2
m3 = 1.175; // latitude calculation term 3
m4 = -0.0023; // latitude calculation term 4
p1 = 111412.84; // longitude calculation term 1
p2 = -93.5; // longitude calculation term 2
p3 = 0.118; // longitude calculation term 3
// Calculate the length of a degree of latitude and longitude in meters
latlen = m1 + (m2 * Math.cos(2 * lat)) + (m3 * Math.cos(4 * lat)) +
(m4 * Math.cos(6 * lat));
longlen = (p1 * Math.cos(lat)) + (p2 * Math.cos(3 * lat)) +
(p3 * Math.cos(5 * lat));
lat
(хотя получающиеся переменныеlatlen
иlonglen
указаны в метрах на градус, а не в метрах на радиан). Если вы используете градусы дляlat
, вы можете даже получить отрицательное значение дляlonglen
.Ответы:
Главный радиус сфероида WGS84 составляет a = 6378137 метров, а его обратное уплощение равно f = 298.257223563, откуда квадрат эксцентриситета равен
Меридиональный радиус кривизны на широте фи является
а радиус кривизны вдоль параллели равен
Кроме того, радиус параллели равен
Это мультипликативные поправки к сферическим значениям M и N , которые равны сферическому радиусу a , к которому они уменьшаются, когда e2 = 0.
В желтой точке в 45 градусах северной широты синий диск радиуса M - это осциллирующий круг («поцелуй») в направлении меридиана, а красный диск радиуса N - это осциллирующий круг в направлении параллели: оба диски содержат направление «вниз» в этой точке. Эта цифра преувеличивает уплощение Земли на два порядка.
Радиусы кривизны определяют длины градусов: когда круг имеет радиус R , его периметр длины 2 pi R охватывает 360 градусов, откуда длина одного градуса равна pi * R / 180. Подставляя M и r для R - то есть умножение M и r на pi / 180 - дает простые точные формулы для длин градусов.
Эти формулы, которые основаны исключительно на заданных значениях a и f (которые можно найти во многих местах ) и описании сфероида как эллипсоида вращения, согласуются с расчетами в вопросе с точностью до 0,6 частей на миллион (несколько сантиметров), что примерно соответствует порядку величины самых маленьких коэффициентов в вопросе, что указывает на их согласие. (Приближение всегда немного низкое.) На графике относительная погрешность длины градуса широты черная, а долготы - пунктирная красная:
Соответственно, мы можем понимать, что вычисления в вопросе являются приближениями (через усеченные тригонометрические ряды) к формулам, приведенным выше.
Коэффициенты могут быть вычислены из ряда косинусов Фурье для M и r как функции широты. Они даны в терминах эллиптических функций e2, которые были бы слишком беспорядочными для воспроизведения здесь. Для сфероида WGS84 мои расчеты дают
(Вы можете догадаться, как
p4
входит в формулу. :) Близость этих значений к параметрам в коде свидетельствует о правильности этой интерпретации. Эта улучшенная аппроксимация точнее, чем одна часть на миллиард, везде.Чтобы проверить этот ответ, я выполнил
R
код для выполнения обоих расчетов:Точный расчет с
radii
может быть использован для печати таблиц длин градусов, как вВывод в метрах и выглядит следующим образом (с некоторыми удаленными линиями):
Ссылки
Л.М. Бугаевский и Ю.П. Снайдер. Картографические проекции - справочное руководство. Taylor & Francis, 1995. (Приложение 2 и Приложение 4)
JP Снайдер, Карта проекций - рабочее руководство. USGS Professional Paper 1395, 1987. (Глава 3)
источник
Это формула Haversine , хотя и выражена странным образом.
источник