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.
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
ResponderExcluirNo 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
ResponderExcluirobrigado, fazer só mais uma uma duvida
esse "parseInt" no delphi tem algum equivalente
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