Il raggio principale dello sferoide WGS84 è a = 6378137 metri e il suo appiattimento inverso è f = 298.257223563, da cui l'eccentricità quadrata è
e2 = (2 - 1/f)/f = 0.0066943799901413165.
Il raggio meridionale della curvatura a latitudine phi è
M = a(1 - e2) / (1 - e2 sin(phi)^2)^(3/2)
e il raggio di curvatura lungo il parallelo è
N = a / (1 - e2 sin(phi)^2)^(1/2)
Inoltre, il raggio del parallelo è
r = N cos(phi)
Queste sono correzioni moltiplicative ai valori sferici di M e N , entrambi uguali al raggio sferico a , che è ciò a cui si riducono quando e2 = 0.
Nel punto giallo a 45 gradi di latitudine nord, il disco blu del raggio M è il cerchio oscolante ("baciare") nella direzione del meridiano e il disco rosso del raggio N è il cerchio oscolante nella direzione del parallelo: entrambi i dischi contengono la direzione "giù" a questo punto. Questa figura esagera l'appiattimento della terra di due ordini di grandezza.
I raggi di curvatura determinano la lunghezza dei gradi: quando un cerchio ha un raggio di R , il suo perimetro di lunghezza 2 pi R copre 360 gradi, da cui la lunghezza di un grado è pi * R / 180. Sostituendo M e r con R - - cioè, moltiplicando M e r per pi / 180 - si ottengono formule esatte semplici per le lunghezze dei gradi.
Queste formule - che si basano esclusivamente sui valori dati di a e f (che possono essere trovati in molti punti ) e sulla descrizione dello sferoide come ellissoide di rotazione - concordano con i calcoli nella domanda entro 0,6 parti per milioni (pochi centimetri), che è approssimativamente lo stesso ordine di grandezza dei coefficienti più piccoli nella domanda, indicando che sono d'accordo. (L'approssimazione è sempre un po 'bassa). Nella trama l'errore relativo in lunghezza di un grado di latitudine è nero e quello di longitudine è tratteggiato in rosso:
Di conseguenza, possiamo comprendere i calcoli nella domanda come approssimazioni (tramite serie trigonometriche troncate) alle formule fornite sopra.
I coefficienti possono essere calcolati dalla serie di coseno di Fourier per M e r come funzioni della latitudine. Sono dati in termini di funzioni ellittiche di e2, che sarebbe troppo disordinato per riprodursi qui. Per lo sferoide WGS84, i miei calcoli danno
m1 = 111132.95255
m2 = -559.84957
m3 = 1.17514
m4 = -0.00230
p1 = 111412.87733
p2 = -93.50412
p3 = 0.11774
p4 = -0.000165
(È possibile indovinare come si p4
inserisce la formula. :) La vicinanza di questi valori ai parametri nel codice attesta la correttezza di questa interpretazione. Questa approssimazione migliorata ha una precisione molto migliore di una parte per miliardo ovunque.
Per testare questa risposta ho eseguito il R
codice per eseguire entrambi i calcoli:
#
# 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")
Il calcolo esatto con radii
può essere utilizzato per stampare tabelle delle lunghezze dei gradi, come in
zapsmall(radii(phi) * pi / 180)
L'output è in metri e si presenta così (con alcune righe rimosse):
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
Riferimenti
LM Bugayevskiy e JP Snyder, Proiezioni di mappe - Un manuale di riferimento. Taylor & Francis, 1995. (Appendice 2 e Appendice 4)
JP Snyder, Proiezioni di mappe - Un manuale di lavoro. USGS Professional Paper 1395, 1987. (Capitolo 3)