Created
March 23, 2017 20:48
-
-
Save fernandosavio/d0667bda2e43c746548216b454d4b9e1 to your computer and use it in GitHub Desktop.
Convert float coordinates to DMS (degree, minutes, seconds).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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