รัศมีหลักของ WGS84 spheroid คือ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)
นี่คือการแก้ไขหลายค่าให้กับค่าทรงกลมของMและNซึ่งทั้งสองเท่ากับรัศมีทรงกลมaซึ่งเป็นสิ่งที่พวกมันลดลงเมื่อ e2 = 0
ที่จุดสีเหลืองที่ละติจูด 45 องศาเหนือแผ่นดิสก์สีฟ้าของรัศมี M คือ osculating ("kissing") วงกลมในทิศทางของเมริเดียนและดิสก์สีแดงของรัศมี N คือวงออสซิลเลตในทิศทางของขนาน: ทั้งคู่ แผ่นบรรจุทิศทาง "ลง" ณ จุดนี้ ร่างนี้พูดเกินจริงถึงความแบนของโลกด้วยขนาดของสองคำสั่ง
รัศมีของความโค้งจะกำหนดความยาวขององศา: เมื่อวงกลมมีรัศมีRความยาวของรอบ 2 pi R ครอบคลุม 360 องศาดังนั้นความยาวของหนึ่งองศาคือ pi * R / 180 การแทนที่MและrสำหรับR - - นั่นคือการคูณMและrด้วย pi / 180 - ให้สูตรที่แน่นอนสำหรับความยาวองศา
สูตรเหล่านี้ - ซึ่งยึดตามค่าที่กำหนดของaและf (ซึ่งสามารถพบได้ในหลาย ๆ ที่ ) และคำอธิบายของรูปทรงกลมเป็นรูปวงรีของการหมุน - เห็นด้วยกับการคำนวณในคำถามที่อยู่ภายใน 0.6 ส่วนต่อ ล้าน (ไม่กี่เซนติเมตร) ซึ่งมีขนาดใกล้เคียงกันโดยประมาณของค่าสัมประสิทธิ์ที่เล็กที่สุดในคำถามแสดงว่าพวกเขาเห็นด้วย (การประมาณค่าต่ำเล็กน้อยเสมอ) ในโครงเรื่องข้อผิดพลาดสัมพัทธ์ที่มีความยาวระดับละติจูดเป็นสีดำและลองจิจูดเป็นเส้นประสีแดง:
ดังนั้นเราสามารถเข้าใจการคำนวณในคำถามเพื่อประมาณ (ผ่านชุดตรีโกณมิติที่ถูกตัดทอน) ไปยังสูตรที่ระบุด้านบน
สัมประสิทธิ์สามารถคำนวณได้จากอนุกรมฟูริเยร์โคไซน์สำหรับMและrเป็นฟังก์ชันของละติจูด พวกเขาได้รับในแง่ของฟังก์ชั่นรูปไข่ของ e2 ซึ่งจะยุ่งเกินไปที่จะทำซ้ำที่นี่ สำหรับ Spheroid 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
อ้างอิง
LM Bugayevskiy และ JP Snyder, แผนที่ประมาณการ - คู่มืออ้างอิง Taylor & Francis, 1995. (ภาคผนวก 2 และภาคผนวก 4)
JP Snyder, Project Projections - คู่มือการใช้งาน USGS Professional Paper 1395, 1987 (บทที่ 3)