Hiểu các thuật ngữ trong công thức Độ dài?


13

Các máy tính trực tuyến như http://www.csgnetwork.com/degreelenllavcalc.html (xem nguồn trang) sử dụng các công thức dưới đây để lấy mét trên mỗi độ. Nói chung, tôi hiểu khoảng cách trên mỗi độ thay đổi tùy theo vị trí vĩ độ, nhưng tôi không hiểu làm thế nào nó chuyển sang bên dưới. Cụ thể hơn, các hằng số, các thuật ngữ 3 "cos" trong mỗi công thức và các hệ số (2, 4, 6; 3 và 5) cho "lat" đến từ đâu?

    // 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
Trên một vòng tròn, các số hạng có dạng cos (m * x) cho m = 0, 1, 2, ... đóng vai trò tương tự như các đơn thức 1, x, x ^ 2, x ^ 3, ... làm cho Taylor loạt trên dòng. Khi bạn thấy một bản mở rộng của loại này, bạn có thể nghĩ về nó theo cùng một cách: mỗi thuật ngữ đưa ra một xấp xỉ bậc cao hơn cho một hàm. Thông thường chuỗi lượng giác như vậy là vô hạn; nhưng trong sử dụng thực tế, chúng có thể được cắt ngắn ngay khi sai số gần đúng được chấp nhận. Một số công nghệ như vậy nằm dưới vỏ bọc của mọi GIS vì nhiều hình chiếu hình cầu được tính bằng cách sử dụng chuỗi đó.
whuber

Điều này rất hữu ích để tính toán khoảng cách trong đó khoảng cách giữa các đường vĩ độ khác nhau, cũng hữu ích để giúp xác định vị trí vẽ đồ thị điểm trên bản đồ thủy ngân nếu bạn có lưới x, y dưới dạng lớp phủ

Mẹo: đừng quên sử dụng radian cho lat(mặc dù các biến kết quả latlenlonglenđược tính bằng mét trên mỗi độ, không phải mét trên radian). Nếu bạn sử dụng độ cho lat, bạn thậm chí có thể kết thúc bằng một giá trị âm cho longlen.
Luke Hutchison

Câu trả lời:


23

Bán kính chính của hình cầu WGS84 là a = 6378137 mét và độ phẳng của nó là f = 298.257223563, trong đó độ lệch tâm bình phương là

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

Bán kính kinh tuyến của độ cong ở vĩ độ phi

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

và bán kính cong dọc song song là

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

Hơn nữa, bán kính của song song là

r = N cos(phi)

Đây là các hiệu chỉnh nhân cho các giá trị hình cầu của MN , cả hai đều bằng bán kính hình cầu a , đây là giá trị mà chúng giảm xuống khi e2 = 0.

Nhân vật

Tại điểm màu vàng ở vĩ độ 45 độ Bắc, đĩa màu xanh bán kính M là vòng tròn thẩm thấu ("hôn") theo hướng kinh tuyến và đĩa đỏ bán kính N là vòng tròn thẩm thấu theo hướng song song: cả hai đĩa chứa hướng "xuống" tại thời điểm này. Con số này phóng đại sự làm phẳng trái đất bằng hai bậc độ lớn.

Bán kính cong xác định độ dài của độ: khi một hình tròn có bán kính R , chu vi của nó dài 2 pi R bao gồm 360 độ, trong đó độ dài của một độ là pi * R / 180. Thay thế Mr cho R - - nghĩa là nhân Mr với pi / 180 - đưa ra các công thức chính xác đơn giản cho độ dài độ.

Các công thức này - chỉ dựa trên các giá trị đã cho của af (có thể tìm thấy ở nhiều nơi ) và mô tả hình cầu như một hình elip xoay - đồng ý với các tính toán trong câu hỏi trong vòng 0,6 phần mỗi triệu (một vài cm), gần bằng thứ tự độ lớn của các hệ số nhỏ nhất trong câu hỏi, cho thấy họ đồng ý. (Giá trị gần đúng luôn thấp một chút.) Trong biểu đồ, lỗi tương đối về độ dài của một độ vĩ độ là màu đen và của kinh độ là màu đỏ:

Nhân vật

Theo đó, chúng ta có thể hiểu các phép tính trong câu hỏi là gần đúng (thông qua chuỗi lượng giác cắt ngắn) với các công thức đã cho ở trên.


Các hệ số có thể được tính từ chuỗi cosin Fourier cho Mr là các hàm của vĩ độ. Chúng được đưa ra dưới dạng các hàm elip của e2, sẽ quá lộn xộn để tái tạo ở đây. Đối với hình cầu WGS84, tính toán của tôi đưa ra

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

(Bạn có thể đoán làm thế nào để p4nhập công thức. :) Sự gần gũi của các giá trị này với các tham số trong mã chứng thực tính chính xác của cách hiểu này. Sự gần đúng được cải thiện này là chính xác đến tốt hơn nhiều so với một phần tỷ ở mọi nơi.


Để kiểm tra câu trả lời này, tôi đã thực thi Rmã để thực hiện cả hai phép tính:

#
# 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")

Tính toán chính xác với radiicó thể được sử dụng để in các bảng có độ dài độ, như trong

zapsmall(radii(phi) * pi / 180)

Đầu ra được tính bằng mét và trông như thế này (với một số dòng bị xóa):

          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

Người giới thiệu

LM Bugayevskiy và JP Snyder, Dự đoán bản đồ - Hướng dẫn tham khảo. Taylor & Francis, 1995. (Phụ lục 2 và Phụ lục 4)

JP Snyder, Dự đoán bản đồ - Hướng dẫn làm việc. USGS Professional Paper 1395, 1987. (Chương 3)


Tôi không biết tại sao một xấp xỉ phức tạp như vậy đối với một cặp công thức đơn giản sẽ được sử dụng ....
whuber

Thật là một câu trả lời thấu đáo, xuất sắc! Có vẻ đúng; bây giờ tôi chỉ cần theo dõi toán học này để hiểu nó. :)
Brent

@Brent Tôi đã thêm một con số để giúp bạn hiểu toán.
whuber

0

Đó là công thức Haversine , mặc dù được thể hiện theo một cách kỳ lạ.


Nó rõ ràng không phải là công thức Haversine! Đây là (liên quan đến) một sự nhiễu loạn của nó được sử dụng cho hình cầu. Nó thậm chí không tìm thấy khoảng cách giữa các cặp điểm tùy ý, đó là công thức Haversine được sử dụng cho (trên hình cầu).
whuber

1
Nói cách khác, công thức Haversine tính toán khoảng cách vòng tròn lớn, và công thức này là một nhiễu loạn của nó tính toán khoảng cách ellipsoid chính xác hơn?
Brent
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.