Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Geocodificación y Geocodificación Inversa en Windows Phone 8



Josue Yeray Julian Ferreiro, Windows Phone Development MVP

Plain Concepts



¡Hola a todos!

En el último artículo hablamos sobre el nuevo control de mapas de Windows Phone 8 y el cálculo y dibujado de rutas e indicaciones. En este artículo vamos a ir un paso más allá. Usaremos el namespaceMicrosoft.Phone.Maps.Services para acceder a los servicios de geo codificación. Estos nos permitirán “traducir” coordenadas geográficas en direcciones, geo codificación inversa, y direcciones en coordenadas geográficas, geo codificación.

GeocodeQuery

La clase GeocodeQuery nos permite introducir un término de búsqueda y consultar a los servicios cartográficos de Nokia para obtener su representación en coordenadas geográficas. Su uso es muy parecido al RouteQuery que vimos en el artículo anterior. En este caso indicaremos la propiedad SearchTerm con la cadena de texto que deseamos buscar, manejaremos el evento QueryCompleted y llamaremos al método QueryAsync:


GeocodeQuery query = new GeocodeQuery()

{

    GeoCoordinate = new GeoCoordinate(),

    SearchTerm = "Calle Fontecha y Salazar 1, Bilbao"

};


query.QueryCompleted += query_QueryCompleted;

query.QueryAsync();

En el manejador del evento QueryCompleted recibiremos como resultado una lista del tipo MapLocation. Recibimos una lista porque puede que el resultado del término de búsqueda que hemos introducido devuelva más de un resultado:


void query_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)

{

    if (e.Error == null)

    {

        Results = new ObservableCollection<MapLocation>(e.Result);

    }

} 

Cada objeto MapLocation nos ofrece dos propiedades que nos interesan:

  • GeoCoordinate: Contiene la información geográfica de la coincidencia: Altura, Latitud, Longitud.
  • Information. Contiene información adicional sobre el término buscado. Principalmente encontraremos información sobre la dirección: Código postal, barrio, país, código ISO de país, ciudad, población…

El resultado de una búsqueda de este tipo podría ser parecido al siguiente (click en la imagen para ampliar):

Dn133106.701BC94324EE3D0221C0619D41D4BAD0(es-es,MSDN.10).png

En algunos casos, también obtendremos los valores de la propiedad BoundingBox de MapLocation. Esta propiedad nos indica el centro en coordenadas geográficas y los puntos cardinales como un LocationRectangle con el área que engloba el punto que se nos ha devuelto.

ReverseGeocodeQuery

Ahora que ya hemos visto como obtener una localización geográfica a partir de un término de búsqueda, veamos cómo obtener una dirección a partir de un punto geográfico. Esta técnica es la que conocemos como geo codificación inversa y nos apoyaremos en la clase ReverseGeocodeQuery para llevar a cabo el trabajo.

Su uso es idéntico a GeocodeQuery, la única diferencia la podemos encontrar en las propiedades que establecemos. Mientras que GeocodeQuery recibe un término de búsqueda y nos devuelve las coordenadas geográficas, ReverseGeocodeQuery recibe coordenadas geográficas y nos devolverá direcciones:


ReverseGeocodeQuery query = new ReverseGeocodeQuery()

{

    GeoCoordinate = new GeoCoordinate(43.26614, -2.92451)

};


query.QueryCompleted += query_QueryCompleted;

query.QueryAsync();

El evento QueryCompleted nos devolverá una lista de MapLocation de la cual podremos obtener toda la información necesaria como la calle, número, código postal… como podemos ver a continuación (click en la imagen para ampliar):

Dn133106.CB3B5E5673F52B98768A0B85116F28C6(es-es,MSDN.10).png

MapsSettings

Para concluir este vistazo a los nuevos mapas de Windows Phone 8, vamos a hablar de la clase MapSettings. Esta clase se encuentra en el namespaceMicrosoft.Phone.Maps y expone dos propiedades: IsMapsDisabled y ApplicationContext.

IsMapsDisabled nos informa si los servicios de mapas están desactivados en el dispositivo.  Estoy investigando que significa esto exactamente, bajo qué condiciones pueden estar desactivados y pondré una entrada con las respuestas que obtenga para clarificar el uso de esta propiedad.

ApplicationContext nos permite indicar propiedades que se aplicarán a todo el uso de los mapas o sus servicios. En este caso se trata del ApplicationId y el AuthenticationToken. Podremos obtener estos dos valores cuando vayamos a subir nuestra aplicación a la Windows Phone Store. Después de completar el primer paso con la información general de la aplicación. Se habilitarán las opciones, una de ellas es “Map Services” (click en la imagen para ampliar):

Dn133106.EF0AF6FB0C9C2A06166A4B59ACDE53D2(es-es,MSDN.10).png

Dentro de esta opción podremos pulsar un enlace “Get Token” que nos dará un token y application id válido. Solo tendremos que incluirlo en nuestra aplicación y volver a compilarla para subir el paquete a la Store. Sin este paso, nuestra aplicación no se certificará.

Conclusión

Con lo que vimos en el artículo anterior sobre rutas y este artículo, tenemos toda la información necesaria para realizar cualquier tipo de aplicación que haga uso de los mapas, localización y direcciones. Desde luego se ha simplificado mucho su funcionamiento, ya no dependemos de otros servicios externos y todas las consultas, tanto de rutas como de geo codificación se usan de una manera muy similar.

Espero que disfrutéis y hagáis grandes aplicaciones con esta información.


Un saludo y Happy Coding!


Mostrar:
© 2014 Microsoft