Cómo Agregar un Mapa a su aplicación con MapKit y Ubicación Central: Guía Swift de iOS

Paso 4: Botón Ubicarme: Mostrar la ubicación en el mapa

Primer paso, recuperaremos la ubicación actual cuando el usuario presione el botón ubicarme 🧭.

El administrador de ubicaciones le da la ubicación actual en un objeto CLLocation con locationManager.location. Este objeto contiene diferentes informaciones, incluidos los valores de coordenadas de latitud y longitud.

Añadir una anotación al mapa

Vamos a crear una nueva función que añadirá una anotación al mapa en las coordenadas dadas.

La siguiente función crea un nuevo objeto MKPointAnnotation y lo agrega al mapa después de eliminar todas las anotaciones anteriores. También amplía y desplaza el mapa para colocar la anotación recién añadida en el centro de la pantalla.

Agregue una anotación al mapa

Ahora que tenemos esta función, puede llamarla con la información de ubicación actual que desea mostrar, en su función de botón IBAction. Por ahora, pondremos nil como título, ya que aún no tenemos esta información.

updateLocationOnMap(to: locationManager.location, with: nil)

Agregue la dirección completa de la ubicación como título a la anotación

Ahora, agregaremos la dirección completa de la ubicación como título a la anotación. CoreLocation nos permite hacerlo fácilmente con CLGeocoder.

Cree una extensión a CLLocation y agregue la siguiente función:

Obtener marca de posición para la ubicación

Invertirá la ubicación del geocódigo y le dará un CLPlacemark, que contiene toda la información necesaria para extraer la dirección postal completa.

La información de dirección se almacena como se muestra a continuación en el objeto Marca de posición. Para obtener un valor de cadena de la dirección completa, tendrá que concatenar los componentes que necesita. Este es un ejemplo de la dirección de Apple HQ en la tabla a continuación:

Valores correspondientes a las propiedades de CLPlacemark

Agreguemos una función a nuestra extensión CLLocation que nos dará la dirección completa directamente. Para mayor comodidad, puede agregar una nueva propiedad en una extensión CLPlacemark. En este ejemplo, esta propiedad se llama stringValue.

Obtenga la dirección de cadena completa desde la ubicación

Ahora actualicemos la llamada a updateLocationOnMap con nuestra nueva función lookUpLocationName.

Mostrar la ubicación actual en el mapa desde el botón pulse

Cree y ejecute su aplicación: ahora, cuando presione el botón localizar, su ubicación actual se agregará en el mapa, mostrando su dirección completa de ubicación actual.

Agregar una marca de posición de una dirección de cadena al Mapa

La mayor parte de la función que escribimos en el Paso 3 para el botón localizar-me también se usará en esta parte. Solo agregaremos una nueva función updatePlaceMark(to address: String) y la llamaremos tras la validación de TextField.

En esta función, primero obtendremos marcas de posición del valor de cadena introducido por el usuario, luego actualizaremos el mapa con la primera marca de posición con su valor de dirección completa.

Mostrar ubicación en el mapa basado en una cadena de direcciones

Tenga en cuenta que geocodeAddressString no es una función de búsqueda de ubicación, por lo que para que funcione necesitará una dirección válida y una ubicación identificable, una ciudad, un estado o un país en el campo para obtener un resultado.

Paso 6: Mostrar ubicación en tiempo real en el mapa

Para mostrar la ubicación en tiempo real, agregue la siguiente función de delegado en la extensión CLLocationManagerDelegate que ya creamos.

El Administrador de ubicaciones llamará a esta función automáticamente en las actualizaciones de ubicación, de acuerdo con la política definida al principio.

Mostrar la ubicación en tiempo real en el mapa

Paso 7: Compilar & Ejecutar

Compilar y ejecutar su aplicación: Ahora tiene una aplicación de mapas que le muestra su ubicación actual, muestra la dirección completa en tiempo real, lo ubica en un toque del botón localizar y le permite buscar ubicaciones desde un campo de texto.



+