terça-feira, 19 de outubro de 2010

Função Para Converter Graus Decimais em Graus Minutos e Segundos no Javascript

                Quem trabalha com mapas vive precisando fazer conversões de coordenadas, com o crescimento das ferramentas de mapas para Web essas conversões devem ser feitas no Javascript, abaixo segue a função que eu desenvolvi para exibir as coordenadas que a ferramenta de mapa retorna em graus para exibir em graus minutos e segundos:
function showCoordenadasMinutos(gDec, x) {
    var graus;
    var minutos;
    var aux;
    var segundos;
    var milisegundos;
    var direcao;

    // Separa os graus
    graus = parseInt(gDec);

    // Pega a fração dos graus e converte em minutos
    aux = (graus - gDec) * 60;
    minutos = parseInt(aux);

    // Pega a fração dos minutos e converte em segundos
    aux = (aux - minutos) * 60;
    segundos = parseInt(aux);

    // Pega a fração dos segundos e converte em milisegundos
    milisegundos = parseInt((aux - segundos) * 60);

    // Essa parte eu verifico se é o eixo X ou Y para substituir o simbolo de negativo  pelas iniciais de norte ou sul para o eixo Y, leste ou oeste para o eixo X
    if (x) {
        // Eixo X
        if (graus < 0)
            direcao = "O";
        else
            direcao = "L";
    } else {
        // Eixo Y
        if (graus < 0)
            direcao = "S";
        else
            direcao = "N";
    }
    // Devolvo a string formatada, a função Math.abs é para retornar o valor absoluto // (retirar o valor negativo) já que estou usando a notação norte, sul, leste ou oeste
    return Math.abs(graus) + "° " + minutos + "' " + segundos + "." + milisegundos + "'' " + direcao;
}

Como eu precisava criar uma função para exibir os dados para o usuário eu substitui o valor negativo pelas inicias dos pontos cardeais e coloquei as aspas simples, se quiser deixar no padrão NMEA basta juntar o grau o minuto colocar o ponto e juntar o segundo e o milissegundos.
Se quiser usar esta função para retornar um valor de ponto flutuante no padrão NMEA substitua o retorno da função pelo debaixo :

return ((graus * 100) + minutos) + (((segundos * 100) + milisegundos) / 10000);
 

E remova o parâmetro x da função e o trecho de código que verifica qual é a direção da coordenada.

4 comentários :

  1. olá tudo bem, estava de uma função dessa para ser usado no delplhi, tem condições de você fazer essa conversao para delphi, se não for muito trabalho, agradeçido

    ResponderExcluir
  2. No momento eu não vou conseguir, mas a conversão é bem fácil basta colocar tipo nas variáveis (substituir o var por double, exceto o aux que deve ser convertida para int) e substituir o abre e fecha chaves por begin e end.

    ResponderExcluir

  3. obrigado, fazer só mais uma uma duvida

    esse "parseInt" no delphi tem algum equivalente

    ResponderExcluir
    Respostas
    1. Na verdade ele não é preciso, basta você deixar a variável minutos e segundos do tipo integer (o parseInt é para força o retorno de um inteiro).

      Excluir