PessoALL, Olá !
Sou novato no site. E estou enveredando pelos caminhos do GPS...
E gostaria da ajuda da equipe de desenvolvedores. Estou fazendo uma aplicação que pega o arquivo gerado pelo tracksource(txt -> coordenadas em graus decimais) e estou querendo converter esta coordenada em ponto X,Y na tela do sistema.
Andei dando uma pesquisada... li sobre projeção, mas está faltando a parte de cálculos. Sempre que os executo, não sai muito parecido com a imagem que gerei.
Gostaria de saber de vocês se existe algum cálculo que posso executar para converter Lat/Lon em posição X,Y.
Desde já, obrigado.
Converter Latitude / Longitude em coordenadas X,Y
-
- Mensagens: 4
- Registrado em: 11 Abr 2010, 06:58
Re: Converter Latitude / Longitude em coordenadas X,Y
Por acaso X,Y seriam as coordenadas da tela em pixels?
Caso seja, onde seria a origem 0,0? No canto superior esquerdo?
Caso seja, onde seria a origem 0,0? No canto superior esquerdo?
nüvi 780 - Oregon 450
-
- Mensagens: 4
- Registrado em: 11 Abr 2010, 06:58
Re: Converter Latitude / Longitude em coordenadas X,Y
Olá Schmidt,
X e Y são as coordenadas da tela e 0,0 estão no canto superior esquerdo.
Obrigado pelo retorno.
X e Y são as coordenadas da tela e 0,0 estão no canto superior esquerdo.
Obrigado pelo retorno.
Re: Converter Latitude / Longitude em coordenadas X,Y
No fundo é só usar regra de 3, para a longitude é direto pois ela cresce na mesma direção das coordenadas de tela e para a latitude é só refletir pois ele cresce no sentido inverso as coordenadas de tela:
variáveis:
max_Lat -> Latitude máxima da sua área de desenho
min_Lat -> Latitude mínima da sua área de desenho
max_Lon -> Longitude máxima da sua área de desenho
min_Lon -> Longitude mínima da sua área de desenho
max_hPixel -> Maior valor em pixel na vertical da tela (canto inferior)
max_wPixel -> Maior valor em pixel na horizontal da tela (canto direito)
Lon -> Valor do ponto em Longitude
Lat -> Valor do ponto em Latitude
xPixel -> Valor do ponto em pixel vertical
yPixel -> Valor do ponto em pixel horizontal
cálculos auxiliares:
hCoord = max_Lat - min_Lat
wCoord = max_Lon - min_Lon
cálculos de coordenadas para pixel:
xPixel = max_wPixel * (Lon - min_Lon)/wCoord
yPixel = max_hPixel * (1 - (Lat - min_Lat)/hCoord)
cálculos de pixel para coordenadas:
Lon = min_Lon + wCoord * xPixel/max_wPixel
Lat = min_Lat + hCoord * (1 - yPixel/max_hPixel)
Você vai precisar tomar alguns cuidados, pois as corrdenadas de tela são números inteiros e as corrdenadas geográficas são números reais. Talvez você precise melhorar as equações com floor e ceiling. Na Wikipedia tem um artigo legal: http://en.wikipedia.org/wiki/Linear_map
Como não testei, se tiver algum erro me avise.
[]'s
variáveis:
max_Lat -> Latitude máxima da sua área de desenho
min_Lat -> Latitude mínima da sua área de desenho
max_Lon -> Longitude máxima da sua área de desenho
min_Lon -> Longitude mínima da sua área de desenho
max_hPixel -> Maior valor em pixel na vertical da tela (canto inferior)
max_wPixel -> Maior valor em pixel na horizontal da tela (canto direito)
Lon -> Valor do ponto em Longitude
Lat -> Valor do ponto em Latitude
xPixel -> Valor do ponto em pixel vertical
yPixel -> Valor do ponto em pixel horizontal
cálculos auxiliares:
hCoord = max_Lat - min_Lat
wCoord = max_Lon - min_Lon
cálculos de coordenadas para pixel:
xPixel = max_wPixel * (Lon - min_Lon)/wCoord
yPixel = max_hPixel * (1 - (Lat - min_Lat)/hCoord)
cálculos de pixel para coordenadas:
Lon = min_Lon + wCoord * xPixel/max_wPixel
Lat = min_Lat + hCoord * (1 - yPixel/max_hPixel)
Você vai precisar tomar alguns cuidados, pois as corrdenadas de tela são números inteiros e as corrdenadas geográficas são números reais. Talvez você precise melhorar as equações com floor e ceiling. Na Wikipedia tem um artigo legal: http://en.wikipedia.org/wiki/Linear_map
Como não testei, se tiver algum erro me avise.
[]'s
nüvi 780 - Oregon 450
-
- Mensagens: 4
- Registrado em: 11 Abr 2010, 06:58
-
- Mensagens: 4
- Registrado em: 11 Abr 2010, 06:58
Re: Converter Latitude / Longitude em coordenadas X,Y
Schmidt, um probleminha encontrado...
se tenho a longitude -18.672254 e -18.684288, se utilizar a função para arredondar, vai retornar, -18 e -18. Isto é, o mesmo ponto na tela.
Teria que ter uma função que fizesse esse retornasse uma diferença de acordo com a resolução da tela a ser utilizada pois depende da quantidade de pixel existente na resolução utilizada.
Então, se não tiver essa função, o gráfico deverá perder algumas informações.
Você saberia me informar como resolver este ?
10ks.
Abraços
se tenho a longitude -18.672254 e -18.684288, se utilizar a função para arredondar, vai retornar, -18 e -18. Isto é, o mesmo ponto na tela.
Teria que ter uma função que fizesse esse retornasse uma diferença de acordo com a resolução da tela a ser utilizada pois depende da quantidade de pixel existente na resolução utilizada.
Então, se não tiver essa função, o gráfico deverá perder algumas informações.
Você saberia me informar como resolver este ?
10ks.
Abraços
Re: Converter Latitude / Longitude em coordenadas X,Y
Olá amigo, não é pra fazer arredondamento direto nas coordenadas, você entendeu o significado de todas as variáveis que coloquei acima?
Quanto a resolução, nas equações acima já existem variáveis prevendo a resolução da tela ( max_hPixel, max_wPixel ).
ex:
Supondo a coordenada (-22.90237, -43.20236), uma janela de latitude de -25.0 até -20.0 e uma janela de longitude de -45.0 até -40.0.
Supondo a resolução de 1024 x 768
De acordo com as equações:
hCoord = -20.0 - (-25.0) = 5.0
wCoord = -40.0 - (-45.5) = 5.0
xPixel = 1024 * (-43.20236 - (-45.0)) / 5.0 = 368.156672
yPixel = 768 * (1 - (-22.90237 - (-25.0)) / 5.0) = 445.804032
Esse resultado que você deve arredondar, pois não existe pixel fracionário. Então o resultado é: (X=368; Y=446)
Quanto a resolução, nas equações acima já existem variáveis prevendo a resolução da tela ( max_hPixel, max_wPixel ).
ex:
Supondo a coordenada (-22.90237, -43.20236), uma janela de latitude de -25.0 até -20.0 e uma janela de longitude de -45.0 até -40.0.
Supondo a resolução de 1024 x 768
De acordo com as equações:
hCoord = -20.0 - (-25.0) = 5.0
wCoord = -40.0 - (-45.5) = 5.0
xPixel = 1024 * (-43.20236 - (-45.0)) / 5.0 = 368.156672
yPixel = 768 * (1 - (-22.90237 - (-25.0)) / 5.0) = 445.804032
Esse resultado que você deve arredondar, pois não existe pixel fracionário. Então o resultado é: (X=368; Y=446)
nüvi 780 - Oregon 450