0Pricing
Swift Academy · Lección

Geocodificación y regiones

Convierta coordenadas en direcciones y supervise regiones.

Geocodificación y regiones es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué es la geocodificación?

La geocodificación convierte una dirección escrita por una persona en coordenadas; la geocodificación inversa convierte las coordenadas en una dirección legible. Core Location proporciona CLGeocoder para ambas operaciones y se comunica con los servidores de Apple.

import CoreLocation
let geocoder = CLGeocoder()

Geocodificar una dirección

Llame a geocodeAddressString(_:) con una dirección de texto libre. El cierre de finalización devuelve una matriz de objetos CLPlacemark; tome el primero y lea su location.

geocoder.geocodeAddressString("Eiffel Tower, Paris") { placemarks, error in
    if let coord = placemarks?.first?.location?.coordinate {
        print(coord.latitude, coord.longitude)
    }
}

Geocodificación inversa de coordenadas

Dado un CLLocation, reverseGeocodeLocation(_:) devuelve objetos placemark que describen ese punto: calle, ciudad, país, código postal y mucho más.

let loc = CLLocation(latitude: 48.8584, longitude: 2.2945)
geocoder.reverseGeocodeLocation(loc) { placemarks, error in
    if let p = placemarks?.first {
        print(p.name ?? "", p.locality ?? "", p.country ?? "")
    }
}

La estructura CLPlacemark

Un CLPlacemark expone campos detallados: name, thoroughfare (calle), locality (ciudad), administrativeArea (estado), postalCode, country e isoCountryCode. Muchos son opcionales, así que desenvuélvalos con cuidado.

func format(_ p: CLPlacemark) -> String {
    [p.thoroughfare, p.locality, p.country]
        .compactMap { $0 }
        .joined(separator: ", ")
}

Limitaciones del geocodificador

CLGeocoder depende de la red y tiene límites de frecuencia. Realice una sola solicitud cada vez, evite los bucles muy frecuentes y cancele el trabajo en curso con cancelGeocode() cuando ya no necesite el resultado.

geocoder.cancelGeocode()

Geocodificación asíncrona con Async/Await

Swift moderno ofrece variantes asíncronas que permiten escribir código lineal con try await en lugar de controladores de finalización.

func coordinate(for address: String) async throws -> CLLocationCoordinate2D? {
    let placemarks = try await geocoder.geocodeAddressString(address)
    return placemarks.first?.location?.coordinate
}

Introducción al monitoreo de regiones

El monitoreo de regiones (geocercas) permite que el sistema notifique a su app cuando el dispositivo entra o sale de un área circular definida, incluso cuando su app no está ejecutándose. Requiere autorización Always.

// Requires NSLocationAlwaysAndWhenInUseUsageDescription
manager.requestAlwaysAuthorization()

Definición de una CLCircularRegion

Una geocerca es una CLCircularRegion con un centro, un radio (en metros) y un identificador único. Configure notifyOnEntry y notifyOnExit para elegir los eventos que le interesan.

let region = CLCircularRegion(
    center: CLLocationCoordinate2D(latitude: 41.0, longitude: 29.0),
    radius: 200,
    identifier: "OfficeZone"
)
region.notifyOnEntry = true
region.notifyOnExit = true

Inicio del monitoreo de regiones

Llame a startMonitoring(for:) para comenzar. El dispositivo impone un límite (alrededor de 20 regiones por app), por lo que debe monitorear únicamente las más relevantes en cada momento.

if CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) {
    manager.startMonitoring(for: region)
}

Recepción de eventos de entrada y salida

Los métodos del delegado didEnterRegion y didExitRegion se ejecutan cuando se cruzan los límites. Use el identifier de la región para saber qué geocerca activó el evento.

func locationManager(_ m: CLLocationManager, didEnterRegion region: CLRegion) {
    print("Entered:", region.identifier)
}
func locationManager(_ m: CLLocationManager, didExitRegion region: CLRegion) {
    print("Exited:", region.identifier)
}

Consulta del estado actual

Para saber si el dispositivo ya se encuentra dentro de una región sin esperar a que cruce un límite, llame a requestState(for:). El resultado llega a didDetermineState como .inside, .outside o .unknown.

manager.requestState(for: region)

func locationManager(_ m: CLLocationManager,
                     didDetermineState state: CLRegionState,
                     for region: CLRegion) {
    print(region.identifier, state == .inside ? "inside" : "outside")
}

Comprobación rápida: geocodificación y regiones

Verifique lo que ha aprendido.

Resumen: geocodificación y regiones

Ha aprendido a traducir entre direcciones y coordenadas, y a supervisar límites geográficos:

  • CLGeocoder realiza geocodificación directa e inversa (existen variantes asíncronas); está sujeto a límites de frecuencia.
  • CLPlacemark contiene campos de dirección detallados, todos opcionales.
  • CLCircularRegion define geocercas; el monitoreo requiere autorización Always.
  • Gestione didEnterRegion/didExitRegion y consulte el estado con requestState(for:).

Preguntas frecuentes

¿La lección «Geocodificación y regiones» es gratis?

Sí — el texto completo de «Geocodificación y regiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Geocodificación y regiones»?

Convierta coordenadas en direcciones y supervise regiones. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Geocodificación y regiones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Solicitar autorización de ubicación
  2. Obtener la ubicación del usuario
  3. Mostrar mapas en SwiftUI
  4. Geocodificación y regiones
← Volver a Swift Academy