Obter posição do mapa quando WGS-84 lat / lon quando latitude / longitude são dadas direito cantos superior esquerdo e inferior

StackOverflow https://stackoverflow.com/questions/1415375

  •  06-07-2019
  •  | 
  •  

Pergunta

Suponha que eu tenho um mapa, por exemplo, de openstreetmaps.org. Eu sei que os WGS-84 lat / lon do canto superior esquerdo e no canto inferior direito do mapa. Como posso encontrar outras posições no mapa de dados WGS-84 lat / lon coordenadas?

Foi útil?

Solução

Se o mapa é mais ou menos do nível da rua / cidade, usa um mercator projeção (como < a href = "http://www.openstreetmap.org" rel = "nofollow noreferrer"> openstreetmap.org parece), e não é muito perto dos pólos, interpolação linear pode ser suficiente preciso. Assumindo o seguinte:

  • TL = lat / lon do canto superior esquerdo
  • BR = lat / lon do canto inferior direito
  • P = latitude / longitude do ponto que deseja localizar no mapa
  • (w, h) = largura e altura do mapa que você tem (pixels?)
  • a origem da imagem do mapa, (0,0), está em seu canto superior esquerdo canto

, que pode interpolar a posição (x, y) correspondente a P como:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon)
y = h * (P.lat - TL.lat) / (BR.lat - TL.lat)

Common pegadinha de:

  • A latitude / longitude notação listas convenções o primeiro latitude e longitude do segundo, isto é, "vertical" antes "horizontal". Esta é oposta à x comum, notação y de coordenadas de imagem.

  • Os valores de latitude aumentam quando indo em uma direção norte-ward ( "up"), enquanto y coordenadas em seu mapa de imagem pode estar aumentando ao fazer-se.

  • Se o mapa cobre uma área maior, interpolação linear não vai ser tão preciso para latitudes. Para um mapa que abrange um grau de latitude e está em zonas habitáveis ??da terra (por exemplo, a área da baía), a latitude centro vai estar fora por 0,2% ou menos, o que é provável que pelo menos de um pixel (dependendo do tamanho)

Se isso é suficiente preciso para suas necessidades, você pode parar por aqui!

A matemática mais precisa para começar a partir latitude de P para uma posição y do pixel começaria com a matemática Mercator. Sabemos que para um P.lat latitude, a posição Y em uma projeção Começando pelo Equador seria o seguinte (eu vou usar um capital Y como ao contrário do valor y estamos procurando, Y começa no equador e aumenta para o norte):

Y = k * ln((1 + sin(P.lat)) / (1 - sin(P.lat)))

A constante k depende da escala vertical do mapa, o que podemos não saber. Felizmente, pode-se deduzir observando que y (TL) - y (BR) = h. Isso nos leva:

k = h / (ln((1 + sin(TL.lat)) / (1 - sin(TL.lat))) - ln((1 + sin(BR.lat)) / (1 - sin(BR.lat))))

(yikes! Isso é quatro níveis de suportes!) Com k conhecido, agora temos a fórmula para descobrir a posição Y de qualquer latitude. Nós só precisamos correto para: (1) o nosso valor começa Y no TL.lat, não do equador, e (2) y cresce em direção ao sul, ao invés de para o norte. Isso nos leva:

Y(TL.lat) = k * ln((1 + sin(TL.lat)) / (1 - sin(TL.lat)))
Y(P.lat)  = k * ln((1 + sin(P.lat )) / (1 - sin(P.lat )))
y(P.lat)  = -(Y(P.lat) - Y(TL.lat))

Então, isso faz com que você:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon) // like before
y = -(Y(P.lat) - Y(TL.lat))                  // where Y(anything) depends just on h, TL.lat and BR.lat 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top