Вимірювання відстані в кулястому Меркаторі проти зони UTM


11

У мене є точки WGS84 lat / long, і я хотів би виміряти "невеликі" (менше, ніж скажімо, 5 км) відстані між ними.

Я можу використовувати формулу haversine з http://www.movable-type.co.uk/scripts/latlong.html, і вона працює дуже добре.

Я хотів би використовувати бібліотеки Python Shapely, щоб я міг робити більше операцій, ніж просто відстань, а тому, що в масштабі, з яким я працюю, плоска земля є досить хорошим наближенням. Щоб надійно спроектувати географічні координати на декартову координату, я використовую Python proj4, але, схоже, отримую більші помилки, ніж хотілося б.

Якщо я використовую локальну зону UTM, я отримую відмінності між геверином на пару метрів, що добре. Але мені не хочеться опрацьовувати зону UTM (точки можуть бути у всьому світі), тому я спробував "сферичний Меркатор", але зараз відмінності між гаверсином та прогнозованими відстанями значно перевищують 100%. Це дійсно правильно для сферичного Меркатора? Все, що мені дуже хочеться, - це працездатна декартована проекція на дві точки в межах 5 км один від одного в будь-якій точці світу.

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)

У цей момент відстань між ними гаверсину становить 394 м, а з використанням зони utm 27, 395 м. Але якщо я використовую сферичний Меркатор, то декартова відстань дорівнює 904 м, що далеко.


Зону UTM легко "опрацювати" виходячи з довготи. Виберіть типову лямбда-довготу -180 <= лямбда <180 і використовуйте її для обчислення номера зони як Int ((180 + лямбда) / 6) +1. Використовуйте знак широти, щоб визначитись між північчю та півднем. Не потрібно використовувати спеціальні полярні зони у високих широтах; насправді, дійсно близько до полюса ви можете використовувати майже будь-яку зону UTM.
whuber

Відповіді:


17

Так, ви отримаєте подібні помилки при глобальній проекції Меркатора: вона точна на екваторі, а спотворення збільшується в експоненціальній залежності від широти від екватора. Спотворення відстані рівно 2 (100%) на широті 60 градусів. На ваших тестових широтах (64,14 градуса) я обчислював спотворення 2,229, точно узгоджуючи співвідношення 904/394 = 2,229. (Раніше я обчислював 2.301, але це базувалося на сфері, а не на еліпсоїді WGS84. Різниця (0,3%) дає нам відчуття точності, яку ви можете отримати від використання проекції на основі еліпсоїда порівняно з формулою Хаверсіна на основі сфери. )

Не існує такої речі, як глобальна проекція, яка б всюди давала дуже точні відстані. Ось одна з причин використання системи зони UTM!

Одне рішення - використовувати сферичну геометрію для всіх своїх розрахунків, але ви відкинули це (що розумно, якщо ви збираєтеся робити складні операції, але рішення, можливо, варто переглянути).

Ще одне рішення - адаптувати проекцію до точок, що порівнюються . Наприклад, ви могли сміливо використовувати поперечний Меркатор (як у системі UTM) з меридіаном, що лежить поблизу від центру цікавої області. Переміщення меридіана досить просто: просто відніміть довготу меридіана від усіх довжин і використовуйте єдину проекцію ТМ, орієнтовану на основний меридіан (із коефіцієнтом масштабу 1, а не 0,9996 системи UTM). Для вашої роботи цього, як правило, буде більшеточніше, ніж використання самого UTM. Це дасть правильні кути (TM відповідає) та буде надзвичайно точним для точок, розділених лише кількома десятками кілометрів: очікуйте кращої, ніж шестизначної точності. Насправді я схильний би віднести будь-які невеликі відмінності між цими адаптованими відстанями ТМ та гаверсинськими відстанями різниці між еліпсоїдом (використовуваним для проекції ТМ) та сферою (використовуваним Гаверсіном), а не спотворенням у проекція


Це звучить досить ідеально, я думаю, мені потрібно зробити свій власний рядок init для proj4, а не мати можливість використовувати будь-який з існуючих рядків EPSG?
Карл П

1
+1 адаптувати проекцію до точок. Я віддаю перевагу поперечній тарілці з плитою над поперечною Меркатором, але на досить малих площах («великих масштабах») майже будь-яка проекція, «зосереджена» біля області, що цікавить, дасть хорошу точність.
Девід Кері

@David Цікава ідея. Що стосується сфери, поперечна плита Керрі (Кассіні) буде близькою до приблизної формули, яку я дав на gis.stackexchange.com/posts/2964/edit (що може бути прийнятним рішенням тут). Формули для TM і TPC схожі за сферою; на еліпсоїді TPC трохи простіший. ТМ, ймовірно, підтримується більше програмного забезпечення.
whuber

@Karl Ви можете використовувати будь-яку із зон TM, якщо бажаєте. Просто змістіть усі довготи так, щоб центральна точка у вашій цікавій області збігалася з центральним меридіаном вибраної зони. Помножте всі відстані на 1 / 0,9996 (і помножте всі площі на квадрат цього коефіцієнта), не змінюйте жодних кутів чи підшипників, і - якщо ваші розрахунки дають нові точки - просто перенесіть їх довготи назад до початкової системи координат .
whuber

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.