Розуміння термінів у формулі довжини ступеня?


13

Інтернет-калькулятори, такі як 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));

3
На колі доданки форми cos (m * x) для m = 0, 1, 2, ... відіграють ту саму роль, що і одночлени 1, x, x ^ 2, x ^ 3, ... зробіть для Тейлора серія на лінії. Коли ви бачите розширення подібного роду, ви можете думати про це однаково: кожен додаток дає наближення до вищого порядку до функції. Зазвичай такі тригонометричні ряди є нескінченними; але в практичному використанні їх можна скоротити, як тільки помилка наближення прийнятна. Деякі такі технології лежать під кришкою кожного ГІС, оскільки багато сфероїдальних проекції обчислюються за допомогою таких серій.
whuber

Це дуже корисно для обчислення відстаней, де відстань між лініями широти змінюється, також корисно, щоб допомогти визначити, де побудувати точки на карті Меркатора, якщо у вас є сітка x, y як накладення

Порада: не забудьте використовувати радіани для lat(навіть незважаючи на те, в результаті змінних latlenі longlenв метрах на градус, а не метри нарадіан). Якщо ви використовуєте градуси для lat, ви навіть можете отримати негативне значення для longlen.
Люк Хатчісон

Відповіді:


23

Основний радіус сфероїда WGS84 дорівнює a = 6378137 метрів, а його зворотне сплющення - f = 298.257223563, звідки квадратний ексцентриситет дорівнює

e2 = (2 - 1/f)/f = 0.0066943799901413165.

Меридіональний радіус кривизни на широті phi дорівнює

M = a(1 - e2) / (1 - e2 sin(phi)^2)^(3/2)

а радіус кривизни вздовж паралелі дорівнює

N = a / (1 - e2 sin(phi)^2)^(1/2)

Крім того, радіус паралелі дорівнює

r = N cos(phi)

Це мультиплікативні виправлення сферичних значень M і N , обидва з яких дорівнюють сферичному радіусу a , до чого вони зводяться, коли e2 = 0.

Малюнок

У жовтій точці на 45 градусах північної широти синій диск радіуса М - це коливальне («цілуюче») коло в напрямку меридіана, а червоний диск радіуса N - коливальне коло в напрямку паралелі: обидва диски містять напрямок "вниз" в цій точці. Цей показник перебільшує сплющення землі на два порядки.

Радіуси кривизни визначають довжину градусів: коли коло має радіус R , його периметр довжиною 2 pi R охоплює 360 градусів, звідки довжина одного градуса pi * R / 180. Підставляючи M і r на R - - тобто множення M і r на pi / 180 - дає прості точні формули для градусних довжин.

Ці формули, які ґрунтуються виключно на заданих значеннях a і f (які можна знайти в багатьох місцях ) та описі сфероїда як еліпсоїда обертання, - узгоджуються з розрахунками у питанні в межах 0,6 частин на мільйон (кілька сантиметрів), що приблизно однаковий порядок найменших коефіцієнтів у питанні, вказуючи на те, що вони згодні. (Наближення завжди трохи низьке.) На графіку відносна похибка довжини ступеня широти є чорною, а довгота - пунктирною червоною:

Малюнок

Відповідно, ми можемо зрозуміти, що обчислення у питанні є наближеннями (через усічений тригонометричний ряд) до наведених вище формул.


Коефіцієнти можна обчислити з косинусових рядів Фур'є для M і r як функції широти. Вони задані з точки зору еліптичних функцій e2, які були б надто безладними для відтворення тут. Для сфероїду WGS84 мої розрахунки дають

  m1 = 111132.95255
  m2 = -559.84957
  m3 = 1.17514
  m4 = -0.00230
  p1 = 111412.87733
  p2 = -93.50412
  p3 = 0.11774
  p4 = -0.000165

(Ви можете здогадатися, як p4вводиться формула. :) Близькість цих значень до параметрів у коді свідчить про правильність цього тлумачення. Це покращене наближення точне набагато краще, ніж одна частина на мільярд скрізь.


Щоб перевірити цю відповідь, я виконав Rкод, щоб здійснити обидва обчислення:

#
# Radii of meridians and parallels on a spheroid.  Defaults to WGS84 meters.
# Input is latitude (in degrees).
#
radii <- function(phi, a=6378137, e2=0.0066943799901413165) {
  u <- 1 - e2 * sin(phi)^2
  return(cbind(M=(1-e2)/u, r=cos(phi)) * (a / sqrt(u))) 
}
#
# Approximate calculation.  Same interface (but no options).
#
m.per.deg <- function(lat) {
  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

  latlen = m1 + m2 * cos(2 * lat) + m3 * cos(4 * lat) + m4 * cos(6 * lat);
  longlen = p1 * cos(lat) + p2 * cos(3 * lat) + p3 * cos(5 * lat);
  return(cbind(M.approx=latlen, r.approx=longlen))
}
#
# Compute the error of the approximation `m.per.deg` compared to the 
# correct formula and plot it as a function of latitude.
#
phi <- pi / 180 * seq(0, 90, 10)
names(phi) <- phi * 180 / pi
matplot(phi * 180 / pi, 10^6 * ((m.per.deg(phi) - radii(phi) * pi / 180) / 
       (radii(phi) * pi / 180)),
        xlab="Latitude (degrees)", ylab="Relative error * 10^6",lwd=2, type="l")

Точний розрахунок з radiiможна використовувати для друку таблиць довжини градусів, як у

zapsmall(radii(phi) * pi / 180)

Вихід у метрах і виглядає приблизно так (при цьому деякі рядки вилучені):

          M         r
0  110574.3 111319.49
10 110607.8 109639.36
20 110704.3 104647.09
...
80 111659.9  19393.49
90 111694.0      0.00

Список літератури

Л. М. Бугаєвський та JP JP Snyder, Картографічні проекції - Довідковий посібник. Taylor & Francis, 1995. (Додаток 2 та Додаток 4)

JP Snyder, Проекції карт - робочий посібник. Професійний документ USGS 1395, 1987. (Розділ 3)


Я не знаю, чому таке складне наближення до простої пари формул було б коли-небудь використано.
whuber

Яка ретельна, відмінна відповідь! Це здається правильним; тепер мені просто потрібно розібратися з цією математикою, щоб зрозуміти це. :)
Brent

@Brent Я додав фігуру, яка допоможе вам зрозуміти математику.
whuber

0

Це формула Гаверсіна , хоча і виражена дивним чином.


Очевидно, це не формула Гаверсіна! Це (пов'язане з) збурення його, що використовується для сфероїду. Він навіть не знаходить відстані між довільними парами точок, для чого використовується формула Гаверсіна (на сфері).
whuber

1
Іншими словами, формула Гаверсіна обчислює відстань великого кола, і ця формула є її збуренням, що обчислює більш точну еліпсоїдальну відстань?
Brent
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.