Programa para la distancia entre dos puntos en la tierra

Dadas la latitud y la longitud en grados, encuentre la distancia entre dos puntos de la tierra.
 

Fuente de la imagen: Wikipedia
Ejemplos: 
 

Input : Latitude 1: 53.32055555555556
        Latitude 2: 53.31861111111111
        Longitude 1: -1.7297222222222221
        Longitude 2: -1.6997222222222223
Output: Distance is: 2.0043678382716137 Kilometers

El problema se puede resolver usando la fórmula de Haversine:

La distancia del gran círculo o la distancia ortodrómica es la distancia más corta entre dos puntos en una esfera (o la superficie de la Tierra). Para usar este método, necesitamos tener las coordenadas del punto A y el punto B. El método del gran círculo se elige sobre otros métodos.
Primero, convierta los valores de latitud y longitud de grados decimales a radianes. Para ello divida los valores de longitud y latitud de ambos puntos por 180/pi. El valor de pi es 22/7. El valor de 180/pi es aproximadamente 57,29577951. Si queremos calcular la distancia entre dos lugares en millas, usamos el valor 3, 963, que es el radio de la Tierra. Si queremos calcular la distancia entre dos lugares en kilómetros, usamos el valor 6, 378.8, que es el radio de la Tierra.
 

Encuentre el valor de la latitud en radianes:
Valor de la latitud en radianes, lat = Latitud / (180/pi) O
Valor de la latitud en radianes, lat = Latitud / 57,29577951
Encuentre el valor de la longitud en radianes:
Valor de la longitud en radianes, long = Longitud / (180/pi) O
valor de la longitud en radianes, long = Longitud / 57,29577951

Obtenga las coordenadas del punto A en términos de latitud y longitud. Utilice el método de conversión anterior para convertir los valores de latitud y longitud en radianes. Lo llamaré como lat1 y long1. Haz lo mismo con las coordenadas del Punto B y obtén lat2 y long2.
Ahora, para obtener la distancia entre el punto A y el punto B, use la siguiente fórmula:
 

Distancia, d = 3963.0 * arccos[(sen(lat1) * sin(lat2)) + cos(lat1) * cos(lat2) * cos(long2 – long1)]

La distancia obtenida, d, está en millas. Si desea que su valor esté en unidades de kilómetros, multiplique d por 1.609344.
d en kilómetros = 1,609344 * d en millas
Por lo tanto, puede tener la distancia más corta entre dos lugares de la Tierra utilizando el enfoque de la distancia del gran círculo. 
 

C++

// C++ program to calculate Distance
// Between Two Points on Earth
#include <bits/stdc++.h>
using namespace std;
 
// Utility function for
// converting degrees to radians
long double toRadians(const long double °ree)
{
    // cmath library in C++
    // defines the constant
    // M_PI as the value of
    // pi accurate to 1e-30
    long double one_deg = (M_PI) / 180;
    return (one_deg * degree);
}
 
long double distance(long double lat1, long double long1,
                     long double lat2, long double long2)
{
    // Convert the latitudes
    // and longitudes
    // from degree to radians.
    lat1 = toRadians(lat1);
    long1 = toRadians(long1);
    lat2 = toRadians(lat2);
    long2 = toRadians(long2);
     
    // Haversine Formula
    long double dlong = long2 - long1;
    long double dlat = lat2 - lat1;
 
    long double ans = pow(sin(dlat / 2), 2) +
                          cos(lat1) * cos(lat2) *
                          pow(sin(dlong / 2), 2);
 
    ans = 2 * asin(sqrt(ans));
 
    // Radius of Earth in
    // Kilometers, R = 6371
    // Use R = 3956 for miles
    long double R = 6371;
     
    // Calculate the result
    ans = ans * R;
 
    return ans;
}
 
// Driver Code
int main()
{
    long double lat1 = 53.32055555555556;
    long double long1 = -1.7297222222222221;
    long double lat2 = 53.31861111111111;
    long double long2 = -1.6997222222222223;
     
    // call the distance function
    cout << setprecision(15) << fixed;
    cout << distance(lat1, long1,
                     lat2, long2) << " K.M";
 
    return 0;
}
 
// This code is contributed
// by Aayush Chaturvedi

Java

// Java program to calculate Distance Between
// Two Points on Earth
import java.util.*;
import java.lang.*;
 
class GFG {
 
    public static double distance(double lat1,
                     double lat2, double lon1,
                                  double lon2)
    {
 
        // The math module contains a function
        // named toRadians which converts from
        // degrees to radians.
        lon1 = Math.toRadians(lon1);
        lon2 = Math.toRadians(lon2);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);
 
        // Haversine formula
        double dlon = lon2 - lon1;
        double dlat = lat2 - lat1;
        double a = Math.pow(Math.sin(dlat / 2), 2)
                 + Math.cos(lat1) * Math.cos(lat2)
                 * Math.pow(Math.sin(dlon / 2),2);
             
        double c = 2 * Math.asin(Math.sqrt(a));
 
        // Radius of earth in kilometers. Use 3956
        // for miles
        double r = 6371;
 
        // calculate the result
        return(c * r);
    }
 
    // driver code
    public static void main(String[] args)
    {
        double lat1 = 53.32055555555556;
        double lat2 = 53.31861111111111;
        double lon1 = -1.7297222222222221;
        double lon2 = -1.6997222222222223;
        System.out.println(distance(lat1, lat2,
                           lon1, lon2) + " K.M");
    }
}
 
// This code is contributed by Prasad Kshirsagar

Python3

# Python 3 program to calculate Distance Between Two Points on Earth
from math import radians, cos, sin, asin, sqrt
def distance(lat1, lat2, lon1, lon2):
     
    # The math module contains a function named
    # radians which converts from degrees to radians.
    lon1 = radians(lon1)
    lon2 = radians(lon2)
    lat1 = radians(lat1)
    lat2 = radians(lat2)
      
    # Haversine formula
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
 
    c = 2 * asin(sqrt(a))
    
    # Radius of earth in kilometers. Use 3956 for miles
    r = 6371
      
    # calculate the result
    return(c * r)
     
     
# driver code
lat1 = 53.32055555555556
lat2 = 53.31861111111111
lon1 = -1.7297222222222221
lon2 =  -1.6997222222222223
print(distance(lat1, lat2, lon1, lon2), "K.M")

C#

// C# program to calculate
// Distance Between Two
// Points on Earth
using System;
 
class GFG
{
    static double toRadians(
           double angleIn10thofaDegree)
    {
        // Angle in 10th
        // of a degree
        return (angleIn10thofaDegree * 
                       Math.PI) / 180;
    }
    static double distance(double lat1,
                           double lat2,
                           double lon1,
                           double lon2)
    {
 
        // The math module contains
        // a function named toRadians
        // which converts from degrees
        // to radians.
        lon1 = toRadians(lon1);
        lon2 = toRadians(lon2);
        lat1 = toRadians(lat1);
        lat2 = toRadians(lat2);
 
        // Haversine formula
        double dlon = lon2 - lon1;
        double dlat = lat2 - lat1;
        double a = Math.Pow(Math.Sin(dlat / 2), 2) +
                   Math.Cos(lat1) * Math.Cos(lat2) *
                   Math.Pow(Math.Sin(dlon / 2),2);
             
        double c = 2 * Math.Asin(Math.Sqrt(a));
 
        // Radius of earth in
        // kilometers. Use 3956
        // for miles
        double r = 6371;
 
        // calculate the result
        return (c * r);
    }
 
    // Driver code
    static void Main()
    {
        double lat1 = 53.32055555555556;
        double lat2 = 53.31861111111111;
        double lon1 = -1.7297222222222221;
        double lon2 = -1.6997222222222223;
        Console.WriteLine(distance(lat1, lat2,
                          lon1, lon2) + " K.M");
    }
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)

PHP

<?php
        
      function twopoints_on_earth($latitudeFrom, $longitudeFrom,
                                    $latitudeTo,  $longitudeTo)
      {
           $long1 = deg2rad($longitudeFrom);
           $long2 = deg2rad($longitudeTo);
           $lat1 = deg2rad($latitudeFrom);
           $lat2 = deg2rad($latitudeTo);
             
           //Haversine Formula
           $dlong = $long2 - $long1;
           $dlati = $lat2 - $lat1;
             
           $val = pow(sin($dlati/2),2)+cos($lat1)*cos($lat2)*pow(sin($dlong/2),2);
             
           $res = 2 * asin(sqrt($val));
             
           $radius = 3958.756;
             
           return ($res*$radius);
      }
 
      // latitude and longitude of Two Points
      $latitudeFrom = 19.017656 ;
      $longitudeFrom = 72.856178;
      $latitudeTo = 40.7127;
      $longitudeTo = -74.0059;
        
      // Distance between Mumbai and New York
      print_r(twopoints_on_earth( $latitudeFrom, $longitudeFrom,
                    $latitudeTo,  $longitudeTo).' '.'miles');
 
// This code is contributed by akash1295
// https://auth.geeksforgeeks.org/user/akash1295/articles
?>

Javascript

<script>
 
// JavaScript program to calculate Distance Between
// Two Points on Earth
 
    function distance(lat1,
                     lat2, lon1, lon2)
    {
   
        // The math module contains a function
        // named toRadians which converts from
        // degrees to radians.
        lon1 =  lon1 * Math.PI / 180;
        lon2 = lon2 * Math.PI / 180;
        lat1 = lat1 * Math.PI / 180;
        lat2 = lat2 * Math.PI / 180;
   
        // Haversine formula
        let dlon = lon2 - lon1;
        let dlat = lat2 - lat1;
        let a = Math.pow(Math.sin(dlat / 2), 2)
                 + Math.cos(lat1) * Math.cos(lat2)
                 * Math.pow(Math.sin(dlon / 2),2);
               
        let c = 2 * Math.asin(Math.sqrt(a));
   
        // Radius of earth in kilometers. Use 3956
        // for miles
        let r = 6371;
   
        // calculate the result
        return(c * r);
    }
 
// Driver code   
          
        let lat1 = 53.32055555555556;
        let lat2 = 53.31861111111111;
        let lon1 = -1.7297222222222221;
        let lon2 = -1.6997222222222223;
        document.write(distance(lat1, lat2,
                           lon1, lon2) + " K.M");
             
</script>

Producción: 

2.0043678382716137 K.M

Tiempo Complejidad: O(1) 
Espacio Auxiliar: O(1)

Sugiera si alguien tiene una mejor solución que sea más eficiente en términos de espacio y tiempo.
Este artículo es una contribución de Aarti_Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente
Referencia: Wikipedia
 

Publicación traducida automáticamente

Artículo escrito por Twinkl Bajaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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