Developer's Diary

16 septiembre, 2010

Tips – Geocode con Google Maps en C#

Desde hace un tiempo estuve buscando una libreria para usar nativamente Google Maps en .Net. Desgraciadamente no encontré absolutamente nada, excepto algo para ASP.Net y que se basaba principalmente en el uso de JavaScript.

Entonces me pregunté ¿Cómo es posible que el archiconocido Google Maps no tuviese una libreria en .Net?

Es más, incluso comienzas a buscar por google alguna ayuda respecto el uso de Google Maps y sus distintas utilidades en .Net y encuentras más bien poco. Así que me puse a desarrollar algo y me di cuenta que es excesivamente fácil.

Para ello solo tenemos que hacer uso del web service que tiene Google Maps generico que nos puede devolver un documento en XML o un documento en JSON. En este tip he elegido usar XML ya que me resulta más fácil, como verereis en el ejemplo es más fácil de lo que realmente resulta. Comencé a buscar y encontré la documentación del Web Service para Geocode con Google Maps en la siguiente página

Vamos a crear un formulario en C#, en este caso lo voy a hacer en consola pero es muy fácil implementarlo en una aplicación de Winforms.

Para realizar nuestra acción de GeoCode solo tenemos que introducir inicialmente la petición al servicio web que es así :

http://maps.google.com/maps/api/geocode/

A partir de aquí introducimos el valor XML? o JSON? dependiendo del formato en el que queremos que nos devuelva nuestra petición, en el ejemplo vamos a usar XML. Posteriormente, podemos hacer Geocoding o ReverseGeocoding.

En el caso de realizar Geocoding solo tenemos que introducir la dirección donde vamos a realizar la búsqueda, por lo que debemos añadir el parametro address= y el valor de nuestra consulta. Tenemos que tener en cuenta que por cada espacio debemos incluir un “+” Por lo tanto si buscaramos por ejemplo la Calle del Sil en Madrid

Solo deberíamos escribir algo similar a esto :

http://maps.google.com/maps/api/geocode/xml?address=Calle del Sil,+Madrid

Si lo introducimos así nos dará error, pero es porque nos falta algo en nuestra query, es el valor sensor. Esto es debido si la consulta se realiza en un dispositivo con un sensor de localización, no he podido probar exactamente este parametro, pero deduzco que se referirá a las consultas en dispositivos que tengan GPS para incluir la localización del dispositivo también. Por lo que inicialmente haremos la query con el valor en false. Por lo que ahora sí, funcionando tenemos nuestra sentencia:

http://maps.google.com/maps/api/geocode/xml?address=Calle del Sil,+Madrid+CA&sensor=false

Si introducimos esto en el navegador, nos devuelve un XML que nos indica varios parametros interesantes de la búsqueda que podemos usar en nuestra aplicación.  Es interesante jugar un poco antes de pasar a la acción con .Net, comprobando los valores que nos da el XML, que ocurre si no introducimos la ciudad, etc.

Para el Reverse Geocoding solo sería necesario introducir el valor contrario, en este caso la latitud y la longitud. Vamos a hacer la query de la Calle del Sil. Los valores son: 40.4487257 , -3.6822880

Por lo que debemos cambiar el parametro address= Por el parametro latlng= Quedando de la siguiente manera:

http://maps.google.com/maps/api/geocode/xml?latlng=40.4487257,-3.6822880&sensor=false

Ahora recibimos un nuevo Xml de diferentes campos pero con el cual podremos trabajar también fácilmente.

Tras probar un poco como funciona el web service de geocoding vamos a pasar a la acción al usarlo en C#. Creamos nuestro proyecto de aplicación de consola y tecleamos lo siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Xml;
using System.Data;

namespace PruebaBlogGeocode
{
class Program
{
static void Main(string[] args)
{
XmlTextReader xml = new XmlTextReader(“http://maps.google.com/maps/api/geocode/xml?address=Calle del Sil,+Madrid+CA&sensor=false”);
DataSet ds = new DataSet();
ds.ReadXml(xml);

foreach (DataTable tabla in ds.Tables)
{
foreach (DataRow fila in tabla.Rows)
{
foreach (object obj in fila.ItemArray)
{
Console.WriteLine(obj.ToString());
}
}
}

Console.ReadKey();
}
}
}

Con este poco de código ya estamos consumiendo una de las queries que construimos antes, para hacer lo que queramos con ella. Usando solamente un XmlTextReader y un Dataset podemos leer fácilmente todos los datos devueltos por GoogleMaps.

También puede llegar a serializarse los datos o realizar cualquier otra operación con los datos obtenidos.

Espero que con esto ahora no tengais más dudas de como poder usar fácilmente los servicios de Google Maps para localizar lugares. En otro momento mostrare como poder tomar valores de Google Maps y construir mapas con una facilidad similar a la indicada en este tip.

Saludos.

 

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: