เข้าใจศัพท์เกี่ยวกับสูตรความยาวของปริญญาหรือไม่


13

เครื่องคิดเลขออนไลน์เช่นhttp://www.csgnetwork.com/degreelenllavcalc.html (แหล่งที่มาของหน้าดู) ใช้สูตรด้านล่างเพื่อรับเมตรต่อองศา ฉันเข้าใจโดยทั่วไปแล้วว่าระยะทางต่อองศาแตกต่างกันอย่างไรขึ้นอยู่กับตำแหน่งละติจูด แต่ฉันไม่เข้าใจวิธีการแปลที่ด้านล่าง โดยเฉพาะเจาะจงค่าคงที่คำว่า "cos" 3 ตัวในแต่ละสูตรและค่าสัมประสิทธิ์ (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, ... มีบทบาทเช่นเดียวกับ monomials 1, x, x ^ 2, x ^ 3, ... ทำเพื่อ Taylor ซีรีส์ในบรรทัด เมื่อคุณเห็นการขยายตัวของประเภทนี้คุณสามารถคิดได้ในลักษณะเดียวกัน: แต่ละคำให้การประมาณลำดับที่สูงขึ้นสำหรับฟังก์ชัน โดยทั่วไปแล้วชุดตรีโกณมิติเช่นนี้จะไม่มีที่สิ้นสุด แต่ในการใช้งานจริงพวกเขาสามารถตัดทอนได้ทันทีที่ข้อผิดพลาดของการประมาณเป็นที่ยอมรับได้ เทคโนโลยีบางอย่างอยู่ภายใต้ประทุนของ GIS ทุกตัวเนื่องจากมีการคำนวณ spheroidal ประมาณการจำนวนมากโดยใช้ชุดดังกล่าว
whuber

สิ่งนี้มีประโยชน์มากสำหรับการคำนวณระยะทางที่ระยะห่างระหว่างเส้นรุ้งแตกต่างกันไปยังมีประโยชน์เพื่อช่วยกำหนดตำแหน่งที่จะพล็อตจุดบนแผนที่ Mercator ถ้าคุณมี x, y grid เป็นภาพซ้อนทับ

เคล็ดลับ: อย่าลืมที่จะใช้เรเดียนlat(แม้ว่าตัวแปรที่เกิดlatlenและlonglenอยู่ในเมตรต่อปริญญาไม่เมตรต่อเรเดียน) ถ้าคุณใช้องศาคุณยังสามารถจบลงด้วยค่าลบสำหรับlat longlen
ลุคฮัทชิสัน

คำตอบ:


23

รัศมีหลักของ 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)


ฉันไม่ทราบว่าทำไมการประมาณที่ซับซ้อนเช่นนี้กับสูตรคู่ง่าย ๆ จึงถูกนำมาใช้ ...
whuber

ช่างเป็นคำตอบที่ยอดเยี่ยมมาก! ดูเหมือนว่าถูกต้อง ตอนนี้ฉันแค่ต้องแปรงคณิตศาสตร์นี้เพื่อทำความเข้าใจ :)
เบรนต์

@Brent ฉันได้เพิ่มรูปเพื่อช่วยให้คุณเข้าใจคณิตศาสตร์
whuber

0

นั่นคือสูตร Haversineแต่แสดงออกมาในทางที่แปลก


เห็นได้ชัดว่าไม่ใช่สูตร Haversine! นี่คือ (ที่เกี่ยวข้องกับ) การก่อกวนของมันที่ใช้สำหรับทรงกลม ไม่แม้แต่จะหาระยะทางระหว่างจุดคู่โดยพลการซึ่งเป็นสิ่งที่ใช้สูตร Haversine (บนทรงกลม)
whuber

1
กล่าวอีกนัยหนึ่งสูตร Haversine คำนวณระยะทางวงกลมใหญ่และสูตรนี้เป็นการรบกวนของมันที่คำนวณระยะห่างทรงรีที่แม่นยำยิ่งขึ้น
เบรนต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.