Skip to content

Instantly share code, notes, and snippets.

@fernandosavio
Created March 23, 2017 20:48
Show Gist options
  • Save fernandosavio/d0667bda2e43c746548216b454d4b9e1 to your computer and use it in GitHub Desktop.
Save fernandosavio/d0667bda2e43c746548216b454d4b9e1 to your computer and use it in GitHub Desktop.
Convert float coordinates to DMS (degree, minutes, seconds).
function convert_coord_to_dms (lat, lon) {
/*
Se Lat é positivo é Norte, senão Sul
Se Long é positivo é Leste, senão Oeste
*/
var lat_orientation = lat < 0 ? "S" : "N",
lon_orientation = lat < 0 ? "W" : "E";
function get_dms(decimal) {
var result = {};
// Torna o número positivo pois o sinal só é usado para verificar o quadrante onde as coordenadas estão
decimal = Math.abs(decimal);
/*
decimal % 1
pega apenas a parte decimal do número.
Ex.: 12.34 % 1 == 0.34
decimal * 60
como decimal % 1 retorna um número entre 0 e 1 (exclusive) podemos usá-lo como porcentagem
0 == 0%, 0.5 = 50%, etc...
Dessa maneira bastante aplicar a porcentagem ao número 60, pois é a quantidade máxima de minutos que um degree pode ter
Ex.: 0.5 * 50 == 30 degrees
*/
result.degrees = decimal;
result.minutes = decimal % 1 * 60;
result.seconds = result.minutes % 1 * 60;
/*
Após os cálculos terem sido feitos podemos descartar a parte decimal dos resultados.
O resultado é sempre mostrado com duas casas. No código abaixo, se algum dos valores for 0 o código acaba virando '00'
Math.trunc pega apenas a parte inteira de um número. Ex.: Math.trunc(-12.34) == -12
Number.toFixed é usado para arrendondar seconds. 4 é um valor arbitrário, use o que melhor te servir
*/
result = {
degrees: Math.trunc(result.degrees) || '00',
minutes: Math.trunc(result.minutes) || '00',
seconds: result.seconds.toFixed(4) || '00'
}
// Concatena os resultados com seus respectivos símbolos
return result.degrees + "° " + result.minutes + "' " +result.seconds + '" ';
}
// Concatena os resultados suas orientações
return get_dms(lat) + lat_orientation + ', ' + get_dms(lon) + lon_orientation;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment