Distancia entre dos coordenadas usando C

C – Distancia entre dos coordenadas

Hoy te mostraré cómo calcular la distancia entre dos puntos del globo terráqueo a partir de las coordenadas de los mismos, usando el lenguaje de programación C. Por ejemplo, sabremos la distancia que hay entre dos ciudades o lugares usando solo sus coordenadas.

Al final tendremos un programa en C que nos dirá la distancia que hay entre dos puntos en línea recta, con el resultado en kilómetros que al final podremos convertir a otra unidad como metros o millas.

Por cierto, vamos a usar la fórmula del semiverseno, también conocida como Haversine.

Nota: esto es distinto a calcular la distancia entre dos puntos de un plano cartesiano, aquí vamos a calcular la distancia entre dos puntos geográficos, es decir, dos lugares del planeta Tierra.

Explicación del algoritmo

Para calcular la distancia simplemente nos vamos a basar en la fórmula y la aplicación de la misma, así como la conversión de grados a radianes, ya que necesitamos operar con radianes.

Después, vamos a encerrar la fórmula en una función para separar el código y reutilizarlo cuando sea necesario.

Haversine en C – Distancia entre dos puntos

El método va a recibir los 2 puntos con su latitud y longitud. Así que va a recibir la latitud 1, longitud 1, latitud 2 y longitud 2. Devolverá la distancia en kilómetros:

/*
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;
}

Como puedes ver en la línea 8 a 11, estamos convirtiendo todas las coordenadas a radianes para poder operar con ellas sin problemas. Después simplemente hacemos los cálculos usando la fórmula a través de las funciones trigonométricas y regresamos el resultado.

Por cierto, fíjate en que dentro de la función usamos a Pi.

Ejemplo: cálculo de distancia en C

Te mostraré el código completo en donde importamos las librerías necesarias y mostramos un ejemplo de uso. En este caso calcularé la distancia que hay entre la CDMX y un lugar de Yucatán.

El código queda así:

// 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;
}

Al ejecutarlo, los resultados son correctos. De hecho hice el mismo cálculo con Google maps y los resultados son iguales como puedes observar en la siguiente imagen. Ahí en el código dejé las coordenadas por si quieres comprobarlo a tu manera.

Distancia entre dos coordenadas usando C
Distancia entre dos coordenadas usando C

Ya a partir de esta función tú puedes solicitar datos al usuario para las coordenadas, mostrar lugares cercanos a determinado lugar, etcétera.

Para terminar te dejo más posts sobre C.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *