Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created January 2, 2021 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/5bbc54efa43abb74f8d84830ada23224 to your computer and use it in GitHub Desktop.
Save parzibyte/5bbc54efa43abb74f8d84830ada23224 to your computer and use it in GitHub Desktop.
// https://parzibyte.me
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
double gradosARadianes(double grados)
{
return grados * PI / 180;
}
/*
Recibe dos pares de coordenadas en grados (así como las da Google maps)
Regresa la distancia que hay entre esos dos puntos en Kilómetros
*/
double calcularDistanciaEntreDosCoordenadas(double lat1, double lon1, double lat2, double lon2)
{
// Convertir todas las coordenadas a radianes
lat1 = gradosARadianes(lat1);
lon1 = gradosARadianes(lon1);
lat2 = gradosARadianes(lat2);
lon2 = gradosARadianes(lon2);
// Aplicar fórmula
double RADIO_TIERRA_EN_KILOMETROS = 6371;
double diferenciaEntreLongitudes = (lon2 - lon1);
double diferenciaEntreLatitudes = (lat2 - lat1);
double a = pow(sin(diferenciaEntreLatitudes / 2.0), 2) + cos(lat1) * cos(lat2) * pow(sin(diferenciaEntreLongitudes / 2.0), 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
double d = RADIO_TIERRA_EN_KILOMETROS * c;
return d;
}
int main(int argc, char const *argv[])
{
//19.418596787147735, -99.13722247901451
double latitud1 = 19.418596787147735;
double longitud1 = -99.13722247901451;
//20.96173231042663, -89.59867366422759
double latitud2 = 20.96173231042663;
double longitud2 = -89.59867366422759;
printf("Calculando distancia entre %lf,%lf y %lf,%lf\n", latitud1,longitud1,latitud2,longitud2);
// Calcular
double distancia = calcularDistanciaEntreDosCoordenadas(latitud1, longitud1, latitud2, longitud2);
printf("La distancia es: %lf Km\n", distancia);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment