Đo khoảng cách trong Mercator hình cầu so với UTM được khoanh vùng


11

Tôi đã có điểm trong WGS84 lat / long và tôi muốn đo khoảng cách "nhỏ" (chưa đến 5km) giữa chúng.

Tôi có thể sử dụng công thức haversine từ http://www.movable-type.co.uk/scripts/latlong.html và nó hoạt động rất tốt.

Tuy nhiên, tôi muốn sử dụng các thư viện Python Shapely để tôi có thể thực hiện nhiều thao tác hơn chỉ là khoảng cách và vì ở quy mô tôi đang làm việc, một trái đất phẳng là một xấp xỉ đủ tốt. Để dự đoán đáng tin cậy các hợp đồng địa lý theo tọa độ cartesian, tôi đang sử dụng Python proj4, nhưng dường như nhận được các lỗi lớn hơn tôi muốn.

Nếu tôi sử dụng vùng UTM địa phương, tôi sẽ nhận được sự khác biệt giữa haversine của một vài mét, điều đó là tốt. Nhưng tôi không muốn phải tìm ra vùng UTM (điểm có thể trên toàn thế giới), vì vậy tôi đã thử với "Mercator hình cầu" nhưng giờ đây, sự khác biệt giữa haversine và khoảng cách dự kiến ​​là hơn 100%. Điều này thực sự đúng cho Mercator hình cầu? Tất cả những gì tôi thực sự muốn là một phép chiếu Cartesian khả thi cho hai điểm trong phạm vi 5km của nhau ở bất cứ đâu trên thế giới.

from shapely.geometry import Point
from pyproj import Proj

proj = Proj(proj='utm',zone=27,ellps='WGS84')
#proj = Proj(init="epsg:3785")  # spherical mercator, should work anywhere...

point1_geo = (-21.9309694, 64.1455718)
point2_geo = (-21.9372481, 64.1478206)
point1 = proj(point1_geo[0], point1_geo[1])
point2 = proj(point2_geo[0], point2_geo[1])

point1_cart = Point(point1)
point2_cart = Point(point2)

print "p1-p2 (haversine)", hdistance(point1_geo, point2_geo)
print "p1-p2 (cartesian)", point1_cart.distance(point2_cart)

Tại thời điểm này, khoảng cách haversine giữa chúng là 394m, và sử dụng utm vùng 27, 395m. Nhưng nếu tôi sử dụng Mercator hình cầu, khoảng cách Cartesian là 904m, đó là cách.


Vùng UTM dễ dàng "giải quyết" dựa trên kinh độ. Chọn một lambda kinh độ điển hình, -180 <= lambda <180 và sử dụng nó để tính số vùng là Int ((180 + lambda) / 6) +1. Sử dụng dấu hiệu của vĩ độ để quyết định giữa phía bắc và phía nam. Bạn không cần phải sử dụng các vùng cực đặc biệt ở vĩ độ cao; thực tế, rất gần với một cực bạn có thể sử dụng hầu hết mọi vùng UTM.
whuber

Câu trả lời:


17

Có, bạn sẽ nhận được các loại lỗi này với phép chiếu Mercator toàn cầu: nó chính xác ở đường xích đạo và độ méo tăng theo cấp số nhân với vĩ độ cách xa đường xích đạo. Độ méo khoảng cách chính xác là 2 (100%) ở vĩ độ 60 độ. Ở vĩ độ thử nghiệm của bạn (64,14 độ), tôi tính toán độ méo là 2,294, hoàn toàn đồng ý với tỷ lệ 904/394 = 2,294. . )

Không có thứ gọi là phép chiếu toàn cầu mang lại khoảng cách chính xác cao ở mọi nơi. Đó là một lý do hệ thống vùng UTM được sử dụng!

Một giải pháp là sử dụng hình học hình cầu cho tất cả các tính toán của bạn, nhưng bạn đã từ chối điều đó (điều này hợp lý nếu bạn sẽ thực hiện các thao tác phức tạp, nhưng quyết định có thể đáng xem xét lại).

Một giải pháp khác là điều chỉnh hình chiếu cho các điểm được so sánh . Ví dụ: bạn có thể sử dụng Mercator ngang một cách an toàn (như trong hệ thống UTM) với một kinh tuyến nằm gần trung tâm của khu vực quan tâm. Di chuyển kinh tuyến là một việc đơn giản để làm: chỉ cần trừ kinh độ của kinh tuyến khỏi tất cả các kinh độ và sử dụng một phép chiếu TM duy nhất tập trung tại Prime Meridian (với hệ số tỷ lệ là 1, thay vì 0,9996 của hệ thống UTM). Đối với công việc của bạn, điều này sẽ có xu hướng nhiều hơnchính xác hơn sử dụng UTM. Nó sẽ cho các góc chính xác (TM là tuân thủ) và sẽ chính xác đáng kể cho các điểm cách nhau chỉ vài chục km: mong đợi tốt hơn độ chính xác sáu chữ số. Trên thực tế, tôi sẽ nghiêng về bất kỳ sự khác biệt nhỏ nào giữa các khoảng cách TM thích nghi này và khoảng cách Haversine với sự khác biệt giữa ellipsoid (được sử dụng cho phép chiếu TM) và hình cầu (được sử dụng bởi Haversine), thay vì biến dạng trong hình chiếu.


Nghe có vẻ khá hoàn hảo, tôi đoán tôi cần phải tạo chuỗi init của riêng mình cho proj4, thay vì có thể sử dụng bất kỳ chuỗi EPSG hiện có nào?
Karl P

1
+1 phép chiếu thích ứng với các điểm. Tôi thích carrée tấm ngang hơn Mercator ngang, nhưng trên các khu vực đủ nhỏ ("quy mô lớn"), hầu như bất kỳ phép chiếu "tập trung" nào gần khu vực quan tâm sẽ cho độ chính xác tốt.
David Cary

@David Ý tưởng thú vị. Trên mặt cầu, Tấm Carree ngang (Cassini) sẽ gần với công thức gần đúng mà tôi đã đưa ra tại gis.stackexchange.com/posts/2964/edit (có thể là một giải pháp chấp nhận được ở đây). Các công thức cho TM và TPC tương tự nhau trên hình cầu; trên một ellipsoid, TPC đơn giản hơn một chút. TM có thể được hỗ trợ bởi nhiều phần mềm hơn.
whuber

@Karl Bạn có thể sử dụng bất kỳ vùng TM nào nếu muốn. Chỉ cần thay đổi tất cả các kinh độ sao cho điểm trung tâm trong vùng quan tâm của bạn trùng với kinh tuyến trung tâm của vùng đã chọn. Nhân tất cả các khoảng cách với 1 / 0,9996 (và nhân tất cả các khu vực với bình phương của yếu tố này), không thay đổi bất kỳ góc hoặc vòng bi nào và - nếu tính toán của bạn tạo ra điểm mới - chỉ cần chuyển kinh độ của chúng trở lại hệ tọa độ ban đầu .
whuber

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.