Distância de medição em Mercator esférico versus UTM zoneado

11

Tenho pontos no WGS84 lat / long e gostaria de medir distâncias "pequenas" (menos do que 5 km) entre eles.

Eu posso usar a fórmula haversine em http://www.movable-type.co.uk/scripts/latlong.html e funciona muito bem.

Eu gostaria de usar as bibliotecas Python Shapely, para que eu possa fazer mais operações do que apenas distância, e porque na escala em que estou trabalhando, uma terra plana é uma aproximação suficientemente boa. Para projetar com segurança as cordas geográficas em uma coordenada cartesiana, estou usando o Python proj4, mas parece ter erros maiores do que eu gostaria.

Se eu usar a zona UTM local, obtenho diferenças entre a barreira de um par de metros, o que é bom. Mas eu não quero ter que trabalhar na zona UTM (os pontos podem ser mundiais), então tentei com o "Mercator esférico", mas agora as diferenças entre distâncias oceânicas e distâncias projetadas estão bem acima de 100%. Isso é realmente certo para Mercator esférico? Tudo o que eu realmente quero é uma projeção cartesiana viável para dois pontos a 5 km um do outro em qualquer lugar do mundo.

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)

Neste ponto, a distância do haversine entre eles é de 394m, e usando a zona utm 27, 395m. Mas se eu usar Mercator esférico, a distância cartesiana é 904m, o que está muito distante.

Karl P
fonte
A zona UTM é fácil de "trabalhar" com base nas longitudes. Escolha uma lambda de longitude típica, -180 <= lambda <180 e use-a para calcular o número da zona como Int ((180 + lambda) / 6) +1. Use o sinal da latitude para decidir entre norte e sul. Você não precisa usar as zonas polares especiais em altas latitudes; de fato, muito perto de um poste, você pode usar praticamente qualquer zona UTM.
whuber

Respostas:

17

Sim, você receberá esses tipos de erros com uma projeção global de Mercator: é precisa no equador e a distorção aumenta exponencialmente com a latitude longe do equador. A distorção da distância é exatamente 2 (100%) a 60 graus de latitude. Nas latitudes de teste (64,14 graus), calculo uma distorção de 2,294, concordando exatamente com a razão 904/394 = 2,294. (No início, eu calculei a versão 2.301, mas isso foi baseado em uma esfera, não no elipsóide WGS84. A diferença (de 0,3%) nos dá uma sensação da precisão que você pode obter ao usar uma projeção baseada em elipsóide versus a fórmula Haversine baseada em esfera. )

Não existe projeção global que produza distâncias altamente precisas em todos os lugares. Essa é uma das razões pelas quais o sistema de zonas UTM é usado!

Uma solução é usar a geometria esférica para todos os seus cálculos, mas você a rejeitou (o que é razoável se você estiver realizando operações complexas, mas vale a pena revisar a decisão).

Outra solução é adaptar a projeção aos pontos que estão sendo comparados . Por exemplo, você pode usar com segurança um Mercator transversal (como no sistema UTM) com um meridiano próximo ao centro da região de interesse. Mover o meridiano é uma coisa simples de se fazer: basta subtrair a longitude do meridiano de todas as longitudes e usar uma única projeção de TM centrada no Meridiano Principal (com um fator de escala de 1, em vez de 0,9996 do sistema UTM). Para o seu trabalho, isso tenderá a ser maispreciso do que usar o próprio UTM. Ele fornecerá ângulos corretos (a TM é conforme) e será notavelmente preciso para pontos separados por apenas algumas dezenas de quilômetros: espere uma precisão superior a seis dígitos. De fato, eu estaria inclinado a atribuir pequenas diferenças entre essas distâncias de TM adaptadas e as distâncias de Haversine à diferença entre o elipsóide (usado para a projeção de MT) e a esfera (usada por Haversine), em vez de distorção na projeção.

whuber
fonte
Parece perfeito, acho que preciso criar minha própria string de inicialização para o proj4, em vez de poder usar qualquer uma das cadeias EPSG existentes?
18119 Karl
1
+1 adaptar a projeção aos pontos. Eu prefiro o prato transversal de placas em vez do Mercator transversal, mas em áreas suficientemente pequenas ("grande escala"), quase qualquer projeção "centralizada" perto da região de interesse fornecerá boa precisão.
David Cary
@ David Idéia interessante. Na esfera, o Plate Carree transversal (Cassini) estará próximo da fórmula aproximada que dei em gis.stackexchange.com/posts/2964/edit (que pode ser uma solução aceitável aqui). As fórmulas para TM e TPC são semelhantes na esfera; em um elipsóide, o TPC é um pouco mais simples. Provavelmente, a TM é suportada por mais software.
whuber
@Karl Você pode usar qualquer uma das zonas da TM, se desejar. Basta mudar todas as longitudes para que um ponto central na sua região de interesse coincida com o meridiano central da zona escolhida. Multiplique todas as distâncias por 1 / 0,9996 (e multiplique todas as áreas pelo quadrado desse fator), não altere ângulos ou rolamentos e - se seus cálculos produzirem novos pontos - apenas mude suas longitudes de volta ao sistema de coordenadas original .
whuber