Độ chính xác tốt nhất thu được với các mô hình ellipsoidal. Vì lợi ích của sự đơn giản, bạn muốn tránh những điều đó khi bạn phải tự viết mã khoảng cách. Chúng tôi phải trả giá: cho rằng độ phẳng của trái đất là khoảng 1/300, sử dụng mô hình hình cầu hoàn toàn có khả năng gây ra lỗi khoảng cách tương đối lên tới 1/300 cho các tuyến đường rất dài: khoảng 3000 phần triệu. Đây là giá trị khám phá.
Đầu tiên, công thức hình cầu : chỉ cần chuyển đổi (lat, lon) sang tọa độ cartesian, lấy trung bình hai điểm cartesian, sau đó chuyển đổi trung bình trở lại tọa độ hình cầu. Đây là mã giả:
function cartesian(f,l) { // f = latitude, l = longitude
return (cos(f)*cos(l), cos(f)*sin(l), sin(f))
}
function spherical(x,y,z) {
r = sqrt(x^2 + y^2)
if (r == 0) {
if (z > 0) return (90, 0)
elseif (z < 0) return (-90, 0)
else return Undefined // (x,y,z) == (0,0,0)
} else {
return (atan2(r, z), atan2(x, y)) // atan2 must return *degrees*
}
}
function midpoint(f0,l0, f1,l1) {
return spherical((cartesian(f0,l0) + cartesian(f1,l1))/2)
}
(Số học cho midpoint
liên quan đến tổng vectơ và phép chia vô hướng của tổng đó, vì vậy nó thực sự ẩn ba tổng và ba phép chia.)
Đó là trung điểm trong hình học hình cầu. Việc tính toán đòi hỏi hai cosin, hai sin, một căn bậc hai, hai arctang và một số phép nhân và phép cộng: khá nhanh và dễ dàng. Sẽ không có vấn đề nào ở gần các cực hoặc vượt qua kinh tuyến + -180. Kết quả sẽ không được xác định khi hai điểm đối diện nhau.
Một cách để đo lỗi là tính khoảng cách tăng đi qua điểm giữa so với khoảng cách giữa các điểm ban đầu. Nếu mức tăng nhỏ so với khoảng cách ban đầu, chúng ta không có gì phải phàn nàn. Tôi đã tính toán các lỗi này bằng cách sử dụng khoảng cách ellipsoidal chính xác cho ellipsoid WGS84. Như một ví dụ điển hình về kết quả, đây là một chuỗi các lỗi tương đối khi một trong các điểm cuối được sửa tại (lat, lon) = (45, 0):
Các đường viền nằm trên thang đo logarit (cơ sở 10): các đường viền -6 hiển thị các điểm trong đó sai số tương đối là 10 ^ (- 6); đó là, một phần triệu (ppm). Các đường viền -5 (hầu như không nhìn thấy gần (-45, 180), điểm đối diện đường kính) là 10 ppm. -7, -8, v.v. là các phân số của ppm: độ chính xác cao.
Rõ ràng, miễn là chúng ta không cố gắng tính trung điểm của hai điểm gần như đối lập nhau, chúng ta sẽ làm tốt. (Hãy nhớ rằng, phép tính là hoàn toàn chính xác cho hình cầu; những lỗi này là do sự làm phẳng của hình cầu.)
Cho rằng độ chính xác 16 bit là khoảng 16 ppm (một bản ghi cơ sở 10 bằng -4,8), có thể sử dụng công thức hình cầu để tìm điểm giữa với điều kiện hai điểm cách xa nhau hơn một độ so với đối xứng.
Điều gì về công thức tuyến tính đơn giản hơn? Để nghiên cứu điều này, hãy so sánh khoảng cách giữa điểm giữa tuyến tính (thu được bằng cách lấy trung bình hai vĩ độ và hai kinh độ) với trung điểm hình cầu, so với khoảng cách giữa hai điểm cuối. Hình tiếp theo sửa một điểm cuối tại (45, 180) và khám phá một vùng tương đối nhỏ xung quanh nó.
Hầu hết các đường viền này (logarit cơ sở 10 một lần nữa) gần -2: đó là một phần trăm (1%) lỗi. Đối với các hướng bắc-nam không có lỗi, nhưng đối với tất cả các hướng khác , lỗi không thể chấp nhận được đối với nhiều ứng dụng .
Để xem liệu xấp xỉ tuyến tính bao giờ trở nên OK, chúng ta hãy phóng to lên rằng bản đồ trước đó bởi một nhân tố của 10. Bây giờ nó là rộng một mức độ (50 dặm ở vĩ độ này) và một nửa độ qua (35 dặm): chúng tôi đang tìm kiếm ở quy mô của một thành phố lớn hoặc một thành phố nhỏ và vùng ngoại ô của nó.
Bây giờ các đường viền là khoảng -3 đến -4: đó là 100 đến 1000 phần triệu (0,01% đến 0,1%). Khá thô và hầu như không đáng chú ý trên màn hình máy tính độ phân giải cao nếu bạn nhìn kỹ.
Nhìn lại, rõ ràng là công thức hình cầu hơi phức tạp hơn một chút - nhưng vẫn dễ thực hiện - đạt được độ chính xác cao hơn trên toàn cầu so với công thức tuyến tính đơn giản ngay cả ở các địa điểm gần đó. (Tôi hơi khó hiểu một chút, vì tôi đã sử dụng hai cách khác nhau để đo lỗi, vì vậy chúng không thể so sánh trực tiếp được.)
Điểm mấu chốt:
- Công thức tuyến tính sẽ sử dụng sai điểm giữa bởi sai số tương đối từ 0,01% đến 0,1% ở quy mô thành phố; trên các khu vực rộng lớn hơn, việc sử dụng sai mục đích có thể rất sai (1% trên tới hàng trăm%).
- Công thức hình cầu hoàn toàn chính xác cho mô hình trái đất hình cầu. So với công thức ellipsoidal chính xác hơn, nó vẫn nên làm tốt ngoại trừ các điểm gần như ngược chiều.