Contenido

Calcula la distancia entre dos puntos geográficos con Javascript

11 dic

+ 6

Increible lo que algunas personas son capaces de hacer con javascript y una idea clara de lo que se quiere conseguir.

La formula Haversine

La formula Haversine es una ecuación muy importante para la navegación en la que podemos obtener la distancia entre dos puntos geográficos (longitud y latitud) dados.

haversine.png

Formula:

R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c

Versión en Javascript

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

Simplemente increible la complejidad que le podemos dar a nuestros scripts Javascript. 

  • No es por amargado ni nada de eso, pero que tiene de increible si esto se puede hacer en “casi” cualquier otro lenguaje de programacion. ¿Que hace de esto algo maravilloso para JS?

  • @benji: Tienes razón, se puede hacer con cualquier lenguaje. Aún recuerdo aquellos scripts de validación de formularios de hacer 5 o 6 años en los que el javascript parecía que no ofrecería mucho más.

    Me he dejado llevar por la alergia que el objeto Math me provoca :D

  • Mi pregunta, que lo mismo es ignorante como yo, es la siguiente:

    Tenemos un ejemplo de un avion que sale del aeropuerto de origen (lat y lon), va hacia un punto de ruta (lat y lon) y finalmente se dirige al aeropuerto de destino (lat y lon).

    Estos datos los saco de un fichero en txt que se puede ir actualizando, por lo que teniendo la ubicacion exacta en cada momento, deseariamos sacar las distancias entre dichos puntos, para aplicarla en php y ser trasladada a una base de datos mysql.

    Si fueseis tan amables de poder ayudarme, para saber que tendria que poner en php.

    Agradecido de antemano, recibid cordiales salu2.

  • @Negrete: Para lo que quieres hacer no necesitas hacerlo en Javascript, puedes calcularlo desde PHP.

    
    # Where:
    #  $l1 ==> latitude1
    #  $o1 ==> longitude1
    #  $l2 ==> latitude2
    #  $o2 ==> longitude2
    function haversine ($l1, $o1, $l2, $o2)
    {
        $l1 = deg2rad ($l1);
        $sinl1 = sin ($l1);
        $l2 = deg2rad ($l2);
        $o1 = deg2rad ($o1);
        $o2 = deg2rad ($o2);
                    
        return (7926 - 26 * $sinl1) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($l2) * $sinl1) - cos ($l1) * cos ($l2) * cos ($o2 - $o1)))));
    } 
    

    Visto en go4expert.

  • Hola, estoyy haciendo mi tesis para titularme, no soy muy brillante, asi que tengo una duda acerca de la formula
    2.atan2(√a, √(1−a))….. que significa la “coma” entre √a y √(1−a)
    Me urge saber esto, no he logrado resolverlo.

    gracias

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.