Skip to content

Instantly share code, notes, and snippets.

@jean-cap
Last active April 19, 2019 17:05
Show Gist options
  • Save jean-cap/b5e3584062020c2e084d460f058d6b9a to your computer and use it in GitHub Desktop.
Save jean-cap/b5e3584062020c2e084d460f058d6b9a to your computer and use it in GitHub Desktop.
Funções Utilitárias

Funções Utilitárias

Coordenadas geográficas

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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment