articulos

Obtener ciudad mediante coordenadas con PHP o JS


Obtener ciudad mediante coordenadas con PHP o JS

Siguiendo con el desarrollo de novedades para Brote Colectivo, tuve la necesidad de requerir el nombre de una ciudad de la cual solamente poseía las coordenadas, específicamente era para la sección de la agenda cultural del sitio, anteriormente utilizaba Google Maps API, pero lamentablemente ya no me sirve, por el simple hecho de que no llega a detectar algunas ciudades de mi provincia, por lo cual, les comparto mi experiencia con otro sistema.

OpenStreetMap, del cual ya hablé hace unos meses en este espacio, tiene entre sus diferentes proyectos, uno llamado Nominatim que permite hacer búsquedas por Coordenadas o por dirección y tiene una muy buena API que devuelve JSON y me sirvió de manera útil.

En otra publicación de este blog, comentaba un poco de Porqué utilizar OpenStreetMap en vez de Google Maps, y más que nada, resumido sería de que esto es LIBRE, si por casualidad vemos un error, o no detecta la ciudad, lo podemos editar nosotros, tal como si fuera la wikipedia (por ejemplo).

La API para este tipo de cosas funciona de la siguiente manera: http://nominatim.openstreetmap.org/reverse?format=json&lat=LATITUD>&lon=LONGITUD Aunque también tiene otros parámetros que podemos ver más específicamente en la wiki de OpenStreetMap

y en PHP lo implementé de la siguiente manera:

<?php

function obtenerCiudad($lat,$lon)
{

    $url = 'http://nominatim.openstreetmap.org/reverse?format=json&lat='.$lat.'&lon='.$lon;
    $archivo_web = file_get_contents($url);
    $archivo = json_decode(utf8_decode($archivo_web));
    return $archivo->address->city;
}

echo obtenerCiudad("-68.05","-46.75");

?>

 Ejemplo: 1 - 2

En cuanto a Javascript se puede hacer mediante la siguiente manera (utilizando jQuery):

<!doctype html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<title>Coordenadas</title>
</head>
	<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
	<script>
	function cargarCiudad(){
		latitud = "-46.80413873413193";
		longitud = "-67.9615422973634";
	    $.ajax({
	      dataType: "json",
	      url: "http://nominatim.openstreetmap.org/reverse",
	      type: "get",
	      data: {format: "json", lat:latitud, lon:longitud}
	    }).done(function(data) {
	      ciudad = data.address.city;
	       $("#cargando").hide();
	       $("#ciudad-demo").slideDown();
	       $(".ciudad").html(ciudad);
	    });
	}
	$(document).on("ready", cargarCiudad);
	</script>

<body>

<section id="cargando">
	Cargando por favor espere.
</section>
<section id="ciudad-demo" style="display:none;">
La ciudad actualmente es: <span class="ciudad"></span>
</section>

</body>
</html>

Ejemplo en funcionamiento

Espero que les sirva, es una buena manera de obtener la ciudad mediante una coordenada de forma liviana y fácil.

   

Publicado el 12 Mayo 2013
Desarrollo Web