Saltar al contenido

Función para calcular la distancia entre dos coordenadas

Bienvenido a proyecto on line, ahora encontrarás la resolución a lo que buscabas.

Solución:

Lo que estás usando se llama la fórmula haversine, que calcula la distancia entre dos puntos en una esfera. mientras el cuervo vuela. El enlace de Google Maps que proporcionó muestra la distancia como 2,2 km porque no es una línea recta.

Wolphram Alpha es un gran recurso para hacer cálculos geográficos y también muestra una distancia de 1.652 km entre estos dos puntos.

Distancia de conducción frente a distancia en línea recta (mina de línea roja).

Si está buscando una distancia en línea recta (como los archivos del cuervo), su función funciona correctamente. Si lo que desea es la distancia en automóvil (o la distancia en bicicleta, la distancia en transporte público o la distancia a pie), deberá usar una API de mapeo (Google o Bing son las más populares) para obtener la ruta adecuada, que incluirá la distancia.

Por cierto, la API de Google Maps proporciona un método empaquetado para la distancia esférica, en su google.maps.geometry.spherical espacio de nombres (busque computeDistanceBetween). Probablemente sea mejor que rodar el tuyo propio (para empezar, usa un valor más preciso para el radio de la Tierra).

Para los exigentes entre nosotros, cuando digo “distancia en línea recta”, me refiero a una “línea recta en una esfera”, que en realidad es una línea curva (es decir, la distancia del gran círculo), por supuesto.

He escrito una ecuación similar antes, la probé y también obtuve 1,6 km.

Tus mapas de Google mostraban la distancia de CONDUCCIÓN.

Su función está calculando a vuelo de pájaro (distancia en línea recta).

alert(calcCrow(59.3293371,13.4877472,59.3225525,13.4619422).toFixed(1));



    //This function takes in latitude and longitude of two location and returns the distance between them as the crow flies (in km)
    function calcCrow(lat1, lon1, lat2, lon2) 
    
      var R = 6371; // km
      var dLat = toRad(lat2-lat1);
      var dLon = toRad(lon2-lon1);
      var lat1 = toRad(lat1);
      var lat2 = toRad(lat2);

      var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c;
      return d;
    

    // Converts numeric degrees to radians
    function toRad(Value) 
    
        return Value * Math.PI / 180;
    

La solución de Derek funcionó bien para mí, y simplemente la convertí a PHP, ¡espero que ayude a alguien!

function calcCrow($lat1, $lon1, $lat2, $lon2)
        $R = 6371; // km
        $dLat = toRad($lat2-$lat1);
        $dLon = toRad($lon2-$lon1);
        $lat1 = toRad($lat1);
        $lat2 = toRad($lat2);

        $a = sin($dLat/2) * sin($dLat/2) +sin($dLon/2) * sin($dLon/2) * cos($lat1) * cos($lat2); 
        $c = 2 * atan2(sqrt($a), sqrt(1-$a)); 
        $d = $R * $c;
        return $d;


// Converts numeric degrees to radians
function toRad($Value) 

    return $Value * pi() / 180;

Tienes la posibilidad dar recomendación a esta división si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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