WGS84 회전 타원체의 주 반경은 a = 6378137 미터이고 역 평탄화는 f = 298.257223563입니다.
e2 = (2 - 1/f)/f = 0.0066943799901413165.
위도 파이 에서 자오 곡률 반경 은
M = a(1 - e2) / (1 - e2 sin(phi)^2)^(3/2)
평행선을 따른 곡률 반경은
N = a / (1 - e2 sin(phi)^2)^(1/2)
또한 평행의 반경은
r = N cos(phi)
이것들은 구면 반지름 a 와 같은 구면 값 M 과 N 에 대한 곱셈 보정 이며 , e2 = 0 일 때 줄어 듭니다.
북쪽 위도 45 도의 노란색 지점에서 반경 M의 파란색 디스크는 자오선 방향의 진동 원 ( "kissing")이며 반경 N의 빨간색 디스크는 평행 방향의 진동 원입니다. 디스크는이 시점에서 "아래쪽"방향을 포함합니다. 이 수치는 지구의 평탄화를 2 배로 과장합니다.
곡률 반경 정도의 길이를 결정 : 원은 반경 가지는 경우 R을 번 정도의 길이 PI * R / 180 대입 길이 2 파이 R 커버 (360 개)도 그 주위, 어디서 왔는지 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
수식을 입력하는 방법을 추측 할 수 있습니다 . :) 코드의 매개 변수에 대한 이러한 값의 근접성은이 해석의 정확성을 증명합니다. 이 개선 된 근사값은 모든 곳에서 10 억분의 1보다 훨씬 더 정확합니다.
이 답변을 테스트 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
참고 문헌
LM Bugayevskiy 및 JP Snyder, 맵 프로젝션-참조 매뉴얼. Taylor & Francis, 1995. (부록 2 및 부록 4)
JP 스나이더, 맵 프로젝션-작업 매뉴얼. USGS Professional Paper 1395, 1987. (제 3 장)