Calcular distancia entre dos puntos en google maps V3

7 minutos de lectura

Calcular distancia entre dos puntos en google maps V3
waheid

¿Cómo se calcula la distancia entre dos marcadores en Google Maps V3? (Similar a distanceFrom función en V2.)

Gracias..

  • stackoverflow.com/a/7997732/1458162

    –Tom Chen

    17 de julio de 2014 a las 5:38

Calcular distancia entre dos puntos en google maps V3
mike williams

Si desea calcularlo usted mismo, puede usar la fórmula de Haversine:

var rad = function(x) {
  return x * Math.PI / 180;
};

var getDistance = function(p1, p2) {
  var R = 6378137; // Earth’s mean radius in meter
  var dLat = rad(p2.lat() - p1.lat());
  var dLong = rad(p2.lng() - p1.lng());
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) *
    Math.sin(dLong / 2) * Math.sin(dLong / 2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d; // returns the distance in meter
};

  • ¿Por qué sugiere usar Math.atan2(Math.sqrt(a),Math.sqrt(1-a)) en lugar del Math.asin(Math.sqrt(a)) más simple?

    –Emanuele Paolini

    29 de junio de 2013 a las 12:41

  • @EmanuelePaolini – Matemáticamente, atan2(sqrt(a),sqrt(1-a)) = asin(sqrt(a)) = acos(sqrt(1-a)), pero la versión atan2 permanece numéricamente mejor condicionada para todos los valores de un.

    – ChrisV

    19 dic 2014 a las 18:00

  • Tipo. Pregunta. ¿Por qué le gusta tanto usar nombres de variables de 1 letra para resolver problemas que requieren un poco de imaginación donde un buen nombre de variable podría ser útil? Sólo preguntaba 🙂

    – Adam Pietrasiak

    26 de abril de 2016 a las 15:32

  • ¿No debería ser var R = 6371; por km?

    – Alejandro Fradiani

    25/08/2016 a las 16:30

  • los p1.lat() y p1.lng() funciones asumen que sus datos de entrada son google.maps.LatLng objetos. Si solo tiene datos sin procesar como {lat: __, lon: __} entonces en su lugar usarías p1.latpor ejemplo.

    – Don McCurdy

    24/03/2017 a las 20:12

1646758988 217 Calcular distancia entre dos puntos en google maps V3
Emil Badh

De hecho, parece haber un método en GMap3. Es un método estático de la google.maps.geometry.spherical espacio de nombres

Toma como argumentos dos LatLng objetos y utilizará un radio terrestre predeterminado de 6378137 metros, aunque el radio predeterminado se puede anular con un valor personalizado si es necesario.

Asegúrate de incluir:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&v=3&libraries=geometry"></script>

en la sección de tu cabeza.

La convocatoria será:

google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);

  • Entonces, ¿por qué hay una diferencia del 1 % en la respuesta dada por el cálculo esférico de Distancia entre Google y la fórmula de distancia de Haversine?

    – Matt S.

    31 de agosto de 2012 a las 22:41

  • @RamenRecon No estoy seguro, pero una pregunta sería que usan diferentes valores para el radio de la tierra.

    –Emil Badh

    11 de octubre de 2012 a las 8:01


  • @RamenRecon sí, Emil tiene razón en esto. La documentación dice: El radio predeterminado es el radio de la Tierra de 6378137 metros. Pero Mike en el Haversine anterior usa 6371km en lugar de.

    – Laszló

    17 de julio de 2013 a las 12:13


  • El enlace de arriba ahora está roto, pero la explicación del método hace que no sea un gran problema.

    – GChorn

    04/04/2014 a las 22:40

  • @ABCD.ca No es mi número. Esta pregunta es sobre la versión 3 de Google Maps Library. Usted preguntó por qué su cálculo difería del de ellos. Es porque usan un valor diferente para el radio de la tierra que tú. La referencia para el número? desarrolladores.google.com/maps/documentation/javascript/… Justo debajo del titular.

    –Emil Badh

    27 de febrero de 2015 a las 9:55

Calcular distancia entre dos puntos en google maps V3
joan16v

Ejemplo usando GPS latitud/longitud de 2 puntos.

var latitude1 = 39.46;
var longitude1 = -0.36;
var latitude2 = 40.40;
var longitude2 = -3.68;

var distance = google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(latitude1, longitude1), new google.maps.LatLng(latitude2, longitude2));       

  • Los resultados de distancia se expresan en metros.

    – joan16v

    10 de agosto de 2015 a las 10:51

  • @ joan16v cómo solicitar google.maps.geometry en node.js. Quiero usar el código anterior en node.js. qué módulo debo instalar y qué archivos debo requerir.

    – kisor

    12 de diciembre de 2016 a las 11:43

1646758990 58 Calcular distancia entre dos puntos en google maps V3
Plamen Todorov

Simplemente agregue esto al comienzo de su código JavaScript:

google.maps.LatLng.prototype.distanceFrom = function(latlng) {
  var lat = [this.lat(), latlng.lat()]
  var lng = [this.lng(), latlng.lng()]
  var R = 6378137;
  var dLat = (lat[1]-lat[0]) * Math.PI / 180;
  var dLng = (lng[1]-lng[0]) * Math.PI / 180;
  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  Math.cos(lat[0] * Math.PI / 180 ) * Math.cos(lat[1] * Math.PI / 180 ) *
  Math.sin(dLng/2) * Math.sin(dLng/2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;
  return Math.round(d);
}

y luego use la función como esta:

var loc1 = new GLatLng(52.5773139, 1.3712427);
var loc2 = new GLatLng(52.4788314, 1.7577444);
var dist = loc2.distanceFrom(loc1);
alert(dist/1000);

1646758991 916 Calcular distancia entre dos puntos en google maps V3
Aishwat Singh

//p1 and p2 are google.maps.LatLng(x,y) objects

function calcDistance(p1, p2) {
          var d = (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
          console.log(d);              
}

  • Esta es la mejor respuesta. ¿Por qué agregar una función cuando la API de Google ya tiene las funciones?

    – felix fbecker

    2 de mayo de 2016 a las 8:55

  • ¿Hay una variante de Java disponible para esta API? No pude encontrarlo después de mucho buscar.

    – Sanketh

    10 de junio de 2018 a las 6:00

  • @felixfbecker, porque podría estar trabajando en un entorno en el que no puede insertar la API de Google Maps en un script etiquetar y llamar a esos métodos. Como reaccionar nativo.

    – Nnanyielugo

    5 de septiembre de 2018 a las 8:26

1646758992 428 Calcular distancia entre dos puntos en google maps V3
Naveid Ahmad

Aquí está la implementación c# de esta fórmula

 public class DistanceAlgorithm
{
    const double PIx = 3.141592653589793;
    const double RADIO = 6378.16;

    /// <summary>
    /// This class cannot be instantiated.
    /// </summary>
    private DistanceAlgorithm() { }

    /// <summary>
    /// Convert degrees to Radians
    /// </summary>
    /// <param name="x">Degrees</param>
    /// <returns>The equivalent in radians</returns>
    public static double Radians(double x)
    {
        return x * PIx / 180;
    }

    /// <summary>
    /// Calculate the distance between two places.
    /// </summary>
    /// <param name="lon1"></param>
    /// <param name="lat1"></param>
    /// <param name="lon2"></param>
    /// <param name="lat2"></param>
    /// <returns></returns>
    public static double DistanceBetweenPlaces(
        double lon1,
        double lat1,
        double lon2,
        double lat2)
    {
        double dlon =  Radians(lon2 - lon1);
        double dlat =  Radians(lat2 - lat1);

        double a = (Math.Sin(dlat / 2) * Math.Sin(dlat / 2)) + Math.Cos(Radians(lat1)) * Math.Cos(Radians(lat2)) * (Math.Sin(dlon / 2) * Math.Sin(dlon / 2));
        double angle = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        return (angle * RADIO) * 0.62137;//distance in miles
    }

}    

  • Esta es la mejor respuesta. ¿Por qué agregar una función cuando la API de Google ya tiene las funciones?

    – felix fbecker

    2 de mayo de 2016 a las 8:55

  • ¿Hay una variante de Java disponible para esta API? No pude encontrarlo después de mucho buscar.

    – Sanketh

    10 de junio de 2018 a las 6:00

  • @felixfbecker, porque podría estar trabajando en un entorno en el que no puede insertar la API de Google Maps en un script etiquetar y llamar a esos métodos. Como reaccionar nativo.

    – Nnanyielugo

    5 de septiembre de 2018 a las 8:26

1646758993 265 Calcular distancia entre dos puntos en google maps V3
iwein

Con google puedes hacerlo usando el API esférica, google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);.

Sin embargo, si la precisión de una proyección esférica o una solución haversine no es lo suficientemente precisa para usted (por ejemplo, si está cerca del polo o calculando distancias más largas), debe usar una biblioteca diferente.

La mayoría de la información sobre el tema que encontré en Wikipedia aquí.

Un truco para ver si la precisión de cualquier algoritmo dado es adecuada es completar el radio máximo y mínimo de la tierra y ver si la diferencia puede causar problemas para su caso de uso. Muchos más detalles se pueden encontrar en Este artículo

Al final, Google API o Haversine servirán para la mayoría de los propósitos sin problemas.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad