icon google example custom google-maps-api-3 android-maps

google-maps-api-3 - example - google maps marker label



Encontrar ubicaciones más cercanas utilizando la API de Google Maps (4)

En caso de que alguien esté buscando una respuesta correcta en 2016.

Hay una library muy útil creada por google. La biblioteca de geometría tiene muchos métodos diferentes que pueden ayudar a resolver este problema:

computeDistanceBetween ()

Esta answer explica exactamente cómo usarlo.

Esto normalmente calculará la distancia entre dos objetos LatLng pasados.

Así que simplemente puedes:

  • Obtener la ubicación de todas las estaciones de bicicleta.
  • Almacenarlos en matriz.
  • Encuentra la ubicación actual del usuario.
  • Recorra su matriz y convierta las ubicaciones a distancias utilizando el método mencionado.
  • Ordena tu matriz para obtener la distancia más pequeña.

Los resultados de distancia se expresan en metros.

Es posible que el algoritmo anterior no esté optimizado, ya que algunos de nosotros podemos tener una matriz de miles de coordenadas, donde el método contiene Ubicación () se vuelve útil, ya que puede restringir su región de búsqueda especificando un polígono en el que pueda buscar.

Es posible que este no sea el método más óptimo para encontrar la ubicación más cercana, pero creo que funcionará si tiene un número razonable de estaciones en su base de datos.

Hola, estoy escribiendo una aplicación que muestra las estaciones de bicicletas cerca de una dirección. Tengo la lista de ubicaciones de latitud y longitud de cada estación de bicicleta de un servicio.

Puedo marcar mi ubicación actual, o cualquier dirección hasta el momento. ¿Cómo muestro todas las estaciones de bicicletas cerca de mi ubicación en el mapa? ¿Primero obtengo los lugares de Google más cercanos desde la ubicación actual y luego accedo a la base de datos para la ubicación de la bicicleta y hago marcadores en el mapa? ¿Cuál es el mejor enfoque?


Es posible que Google ya tenga these resultados, pero si ya tiene sus coordenadas para los lugares, parece que podría ser más sencillo simplemente trazar sus puntos.


Si ya tiene las coordenadas de sus estaciones de bicicletas y si confía en estos datos, solo utilícelo para dibujar sus marcadores. Ahora tienes que definir qué significa "cerca".

Tienes diferentes soluciones para esto. Ya sea que elija dibujar los marcadores para todas las estaciones de bicicleta dentro de los límites del mapa (pero eso podría ser muchos marcadores para dibujar, dependiendo del nivel de zoom, o tiene que evitar que su script dibuje los marcadores antes de que se alcance un cierto nivel de zoom) o puede dibujar los marcadores dentro de n kilómetros alrededor de una ubicación (puede ser la ubicación del usuario, las coordenadas del centro del mapa, etc.).

Para la segunda solución, y si está almacenando sus estaciones de bicicleta en una base de datos MySQL, podría hacer una consulta como esa:

$sql = "SELECT *, ( 6371 * acos( cos( radians(" . $db->real_escape_string($lat) . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $db->real_escape_string($lng) . ") ) + sin( radians(" . $db->real_escape_string($lat) . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table_name HAVING distance < 15";

$lat y $lng son tus coordenadas centrales

lat y lng los nombres de sus columnas de MySQL

15 siendo el radio (en km) alrededor de tus coordenadas

Esto utiliza la fórmula de Haversine. Buena información se puede encontrar here .

Espero que esto ayude, pero no sabemos realmente cómo organizó sus datos en su aplicación. ¡Danos más información si necesitas más ayuda en esto!


Tengo la misma tarea y resolví usando la fórmula de here . Aquí está mi ejemplo en PHP

private function distance($latA, $lngA,$latB, $lngB) { $R = 6371000; $radiansLAT_A = deg2rad($latA); $radiansLAT_B = deg2rad($latB); $variationLAT = deg2rad($latB - $latA); $variationLNG = deg2rad($lngB - $lngA); $a = sin($variationLAT/2) * sin($variationLAT/2) + cos($radiansLAT_A) * cos($radiansLAT_B) * sin($variationLNG/2) * sin($variationLNG/2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); $d = $R * $c; return $d; }

Y para la prueba utilicé estos cordones.

$distance = $this->distance(-12.0972,-77.0267,-13.160616,-74.227440);

El resultado debe ser 325932.546518 en metros. Si quieres en km solo divide 325932.546518/1000 = 325.932546518km

La misma fórmula podría traducirse a javascript siguiendo la guía