Blog

LISTAR TODOS OS POSTS - Assine os feeds dos posts e comentários

Convertendo coordenadas para decimais

Publicado/atualizado em 23/04/2009 10:37

Estava fazendo uma aplicação aqui que usa os mapas do Google para indicar onde alguns veículos a venda estão estacionados, e o cliente informou as coordenadas utilizando graus, minutos e segundos da seguinte maneira: -20° 47' 26.37", -49° 21' 11.94"

O problema é a classe GLatLng espera valores decimais e não coordenadas, e eu procurei por toda a API do Google Maps, não encontrei nada para converter entre coordenadas e decimais e tive que botar a mão na massa, ou melhor, no código, que está apresentado abaixo.

Antes de mais nada temos que retirar as indicações de graus, minutos e segundos e transformar os valores das coordenadas em decimais simples do tipo -20.472637, -49.211194, e aí sim enviar para a função abaixo, onde eles se convertem em -20.790658, -49.353317, valores que podem ser enviados para a GLatLng.

 1 function coordToDec(coord){
 2    var match, sig, deg, min, sec, dec;
 3    match = /(-)?(\d+\.)(\d{2})(\d{2})(\d{2})/.exec(parseFloat(coord).toFixed(6));
 4    sig   = match[1] ? -1 : 1;
 5    deg   = Math.abs(parseFloat(match[2]));
 6    min   = parseFloat(match[3]);
 7    sec   = parseFloat(match[4]+"."+match[5]);
 8    dec   = (min+sec/60.0)/60.0;
 9    return ((deg+dec)*sig).toFixed(6);
10 }

Tags:

Permalink: http://eustaquiorangel.com/posts/convertendo_coordenadas_para_decimais

salvar no del.icio.ussalvar no diggsalvar no rec6 Veja o que estão dizendo sobre isso.

Comente

Linhas em branco viram saltos de linha. Se você quiser mostrar algum código, por favor use o pastebin e informe a URL.

*

*

Responda: Qual a cor do cavalo branco de Dom Pedro I?  
Clique aqui se não souber essa resposta!

* campos obrigatórios

Comentários

1 - nofxx disse em 22/04/2009 13:38

Tive um cliente mais sem nocao, inventou um jeito, era uma float seguinda de um char "W" ou "S". Mas foi mais simples heh...

Eu tva comecando a implementar isso no GeoRuby, acho q fiz um format as graus.


2 - Thiago Cavalcanti disse em 22/04/2009 21:19

Gostei. Só resta avisar a eles para que eles atualizem a API...


3 - Altherlex Alves disse em 23/04/2009 10:04

Grande Taq...

Legal, parabens!!!

Abraço.


4 - nofxx disse em 27/04/2009 03:12

Hehe, total coincidencia, domingao, resolvi fazer uma parada e precisei justamente disso em Ruby.

def from_latlong(coord)

sig, deg, min, sec, cen = coord.scan(/(-)?(\d{2}).*(\d{2}).*(\d{2})\.(\d{2})/).flatten

dec = deg.to_i + (min.to_i * 60 + "#{sec}.#{cen}".to_f) / 3600

sig ? dec * -1 : dec

end

Queria fazer em 2, vou tentar depois de assaltar a cozinha ....huaehueau

PS.: ja eh segunda.....


5 - Wagner Shimatai disse em 29/04/2009 16:09

Eustaquio,

Não precisa necessariamente converter para decimal a longitude e latitude.

Vc pode passar para a função getLocations (de um objeto GClientGeocoder) uma string com a seguinte forma: 22 54 50.18S 43 11 02.80W

Vc só precisa remover as notações de graus, minutos e segundos da localização e informar se é N(orte) S(ul) W(oeste) E(leste) o referencial.


6 - Mudanças disse em 15/06/2009 10:04

Muito interessante..

Estava justamente precisando disso!

Abraço


7 - Guaracy Monteiro disse em 06/09/2009 15:49

Eu sei que o assunto já é bem velho, e desculpe pela linguagem utilizada, mas só para constar.....

Estou dando uma olhadinha no REBOL e a minha função ficou assim:

; Coloquei a regra fora da função para facilitar a

; comparação com a ER. Mais verbosa mas mais legível

; ^ é o escape na string ^" -> "

---------- 8< ----------

parse-rule: [

copy deg to "°"

thru " " copy min to "'"

thru " " copy sec to "^""]

coord-to-dec: func [coord] [

parse/all coord parse-rule

t: to-time join deg [":" min ":" sec]

to-decimal t / 3600

]

---------- >8 ----------

Depois é só chamar a função

coord-to-dec c

que ela retorna o valor decimal.

baseado em:

http://reboltutorial.com/blog/rebol-for-seo-marketing-guys/


Anterior Próximo Últimos Índice