Conversão de coordenadas geográficas
/**
* @function degreesToDecimal
* @param {number} degrees Graus da coordenada (Sem o sinal de negativo ou positivo)
* @param {number} minutes Minutos da coordenada
* @param {number} seconds Segundos da coordenada
* @returns {number} A coordenada em sistema decimal
* @description Converte uma coordenada geográfica do sistema graus/minutos/segundos para o sistema decimal.
* @example
* // Retorna 26.30101
* degreesToDecimal(26, 18, 3.6360)
*/
function degreesToDecimal(degrees, minutes, seconds) {
return degrees + (minutes / 60.0) + (seconds / 3600.0);
}
Conversão de coordenada de graus para radiano
/**
* @function degreesToRadians
* @param {number} degrees O valor da coordenada em graus.
* @returns {number} A coordenada convertida para radiano.
* @description Converte o valor da coordenada para um radiano.
*/
function degreesToRadians(degrees) {
return (degrees * Math.PI) / 180;
}
Calcula a distância entre duas coordenadas
Obs: esta função depende da função degreesToRadians
.
/**
* @function computeDistance
* @param {Objeto} startCoords O objeto contendo a coordenada inicial.
* @param {Objeto} destCoords O objeto contendo a coordenada final.
* @return {number} A distância em quilômetros entre as coordenadas inseridas.
* @description Calcula a distância entre duas coordenadas.
* @example
* // Retorna 11013.53896422615
* computeDistance({latitude: 47.624851, longitude: -122.52099}, {latitude: -26.288865899999998, longitude: -48.8548431})
*/
function computeDistance(startCoords, destCoords) {
let startLatRads = degreesToRadians(startCoords.latitude);
let startLongRads = degreesToRadians(startCoords.longitude);
let destLatRads = degreesToRadians(destCoords.latitude);
let destLongRads = degreesToRadians(destCoords.longitude);
const radius = 6371; // Raio da terra em quilômetros
let distance = Math.acos(Math.sin(startLatRads) * Math.sin(destLatRads) + Math.cos(startLatRads) * Math.cos(destLatRads) * Math.cos(startLongRads - destLongRads)) * radius;
return distance;
}