Geocodificación inversa

| Última modificación: 12 de noviembre de 2022 | Tiempo de Lectura: 2 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

CoreLocation y CoreLocationManager

La framework CoreLocation nos permite obtener datos de posicionamiento del dispositivo; sin embargo, los datos que nos da son de latitud y longitud (y algo más). Si sólo queremos mostrar la posición en un mapa, con eso y la framework MapKit tenemos más que suficiente. No obstante, si lo que queremos es la dirección de la posición estaríamos apañados, si no fuese por CLGeocoder.

CLGeocoder al rescate: Geocodificación inversa

La clase CLGeocoder nos permiter hacer geocodificación directe e inversa (forward geocoding & reverse geocoding):

geocodificación inversa
Los dos tipos de geocodificación

En este caso nos interesa la geocodificación inversa: a partir de unas coordenadas que obtendremos de un CLLocationManager, queremos saber la dirección a la que corresponden.

El método que tenemos que llamar es reverseGeocodeLocation:completionHandler: Acepta dos parámetros, uno la CLLocation (es decir, las coordenadas) y un bloque que se ejecutará cuando reciba los datos de la red. Ten en cuenta que aunque el método retorna de inmediato, hace una conexión en segundo plano con algún servicio online. Por eso hace falta pasarle un bloque para que lo ejecute cuando el servicio online le haya devuelto la dirección.

Aplicación de geocodificación de ejemplo: AndeEstoy.app

La aplicación es muy sencilla, tiene un botón que realiza la geocodificación inversa:

Antes de iniciar la geocodificación inversa

En este momento se inicia la geocodificación inversa: se está conectando a un servicio web.

En este momento se inicia la geocodificación inversa: se está conectando a un servicio web

Se ha obtenido una dirección para la longitud y latitud que el hemos pasado. Esto viene en un objeto de tipo CLPlacemark del cual extraemos los componentes de la dirección.

Se ha obtenido una dirección para la longitud y latitud que el hemos pasado. Esto viene en un objeto de tipo CLPlacemark del cual extraemos los componentes de la dirección.

El código más importante del proyecto de ejemplo es el addressFromLocation:

El código completo está en este zip(AndeEstoy) (gitHub me anda dando problemas).

Fernando Rodríguez

iOS Developer & Co-Fundador de KeepCoding

Posts más leídos