Obtener coordenadas de un punto (Latitud y Longitud) a partir de una dirección usando Google Maps
Podemos utilizar el siguiente código en PHP para obtener la geolocalización, es decir, las coordenadas, de cualquier dirección que queramos. Estas coordenadas (latitud y longitud) nos servirán para poder colocar la dirección en un mapa de Google Maps.
$direccion_google = ‘Calle, Población, Provincia / Estado, País’;
$resultado = file_get_contents(sprintf('https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=%s', urlencode($direccion_google)));
$resultado = json_decode($resultado, TRUE);
$lat = $resultado['results'][0]['geometry']['location']['lat'];
$lng = $resultado['results'][0]['geometry']['location']['lng'];
return "{$lat}, {$lng}";
Es un código muy sencillo, pero que conviene tener siempre a mano. Espero que os sea útil.
UPDATE (2 de septiembre de 2013).
La URL del servicio de Google Maps ha cambiado con la versión 3 del servicio, así como la estructura de JSON que devuelve. Gracias a casas rurales por su comentario :)
Comentarios (10)
-
NO funciona :8
-
Carlos, este código lo escribí hace un año y, por lo que sé, sigue funcionando. Si me indicas el error que te aparece, puedo ayudarte a solucionarlo.
Gracias por comentar, un saludo.
-
-
Buenas, estoy usando ese codigo en varios de mis sitios web y funcionaba perfecto, pero ahora no funciona, no entra en este if ($estado == 200) , pero lo raro es nunca toque nada del codigo, simplemente dejo de funcionar, quizas google dio de baja esa funcion o mi servidor actualizo la version de PHP.
-
Hola Adrián. Parece ser que desde el día 8 de marzo de 2013 el API 2 de Google Maps no funciona. Es necesario hacer la migración a API 3. De todas formas, si me dices qué valor te devuelve el statusCode, podemos mirar el problema concreto.
https://developers.google.com/maps/documentation/geocoding/v2/?hl=es
-
-
Buenas, tengo este codigo de la API 2 y ya no funciona, alguien sabe como hacer funcionar este codigo para la API 3 porque haces semanas que llevo viendo y no logro hacer funcionarla, paso el codigo:
—————————————————————————————————–
$direccion = “$calle $num, $desc_localidad, Buenos Aires, Argentina”;
$resultado = json_decode(file_get_contents(sprintf('http://maps.google.com/maps/geo?q=%s', urlencode($direccion))));
$estado = $resultado->Status->code;
if ($estado == 200)
{
$lat = $resultado->Placemark[0]->Point->coordinates[0];
$long = $resultado->Placemark[0]->Point->coordinates[1];
}
—————————————————————————————————– -
Arreglado con el nuevo API:
$direccion = “calle, numero, localidad…”;
$resultado = json_decode(file_get_contents(sprintf(‘https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=%s’, urlencode($direccion))));
$estado = $resultado->status;
if ($estado == ‘OK’)
{
$lat = $resultado->results[0]->geometry->location->lat;
$long = $resultado->results[0]->geometry->location->lng;
echo “{$lat}, {$long}”;
}
else
echo “KO”;-
Gracias por tu comentario, he actualizado el código con la nueva URL del API de Google. Añado un enlace a tu web en agradecimiento :)
-
Hola Ivan,
Comprueba que no solo es la url, la estructura del json que devuelve Google no es la misma…
Y muchas gracias por el enlace, te correspondo con un enlace desde otra de mis webs (si quieres te paso por privado la url, para no hacer spam…)
-
Gracias por el enlace y por la información, me dí cuenta cuando actualicé un código que había dejado de funcionar, y tengo pendiente actualizar la entrada.
Gracias y suerte!
-
-
Gracias por compartir su conocimiento.