0Pricing
Swift Academy · Lezione

Geocoding e regioni

Converti coordinate in indirizzi e monitora le regioni.

Geocoding e regioni è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Che cos'è la geocodifica?

La geocodifica converte un indirizzo comprensibile dalle persone in coordinate; la geocodifica inversa trasforma le coordinate nuovamente in un indirizzo leggibile. Core Location offre CLGeocoder per entrambe, comunicando con i server di Apple.

import CoreLocation
let geocoder = CLGeocoder()

Geocodifica diretta di un indirizzo

Chiami geocodeAddressString(_:) con un indirizzo in formato libero. Il completamento restituisce un array di oggetti CLPlacemark; prenda il primo e ne legga la location.

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

Geocodifica inversa delle coordinate

Dato un CLLocation, reverseGeocodeLocation(_:) restituisce placemark che descrivono quel punto: via, città, paese, codice postale e altro.

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 struttura CLPlacemark

Un CLPlacemark espone campi dettagliati: name, thoroughfare (via), locality (città), administrativeArea (stato), postalCode, country e isoCountryCode. Molti sono opzionali, quindi esegua l'unwrapping con attenzione.

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

Limiti del geocoder

CLGeocoder si basa sulla rete ed è soggetto a limiti di frequenza. Esegua una richiesta alla volta, eviti cicli stretti e annulli il lavoro in corso con cancelGeocode() quando il risultato non è più necessario.

geocoder.cancelGeocode()

Geocodifica con Async/Await

Swift moderno offre varianti asincrone che consentono di scrivere codice lineare con try await invece dei completion handler.

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

Introduzione al monitoraggio delle regioni

Il monitoraggio delle regioni (geofencing) consente al sistema di notificare la Sua app quando il dispositivo entra o esce da un'area circolare definita, anche quando l'app non è in esecuzione. Richiede l'autorizzazione Always.

// Requires NSLocationAlwaysAndWhenInUseUsageDescription
manager.requestAlwaysAuthorization()

Definizione di una CLCircularRegion

Un geofence è una CLCircularRegion con un centro, un raggio (in metri) e un identificatore univoco. Imposti notifyOnEntry e notifyOnExit per scegliere gli eventi di Suo interesse.

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

Avvio del monitoraggio delle regioni

Chiami startMonitoring(for:) per iniziare. Il dispositivo impone un limite (circa 20 regioni per app), quindi monitori solo quelle più rilevanti in un determinato momento.

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

Ricezione degli eventi di ingresso e uscita

I metodi delegate didEnterRegion e didExitRegion vengono chiamati quando si attraversano i confini. Utilizzi l'identifier della regione per sapere quale geofence ha attivato l'evento.

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

Richiesta dello stato corrente

Per sapere se il dispositivo si trova già all'interno di una regione senza attendere l'attraversamento di un confine, chiami requestState(for:). Il risultato arriva in didDetermineState come .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")
}

Verifica rapida: geocodifica e regioni

Verifichi la Sua comprensione.

Riepilogo: geocodifica e regioni

Ha imparato a convertire indirizzi e coordinate e a monitorare i confini geografici:

  • CLGeocoder esegue la geocodifica diretta e inversa (esistono varianti asincrone); è soggetto a limitazioni di frequenza.
  • CLPlacemark contiene numerosi campi relativi all'indirizzo, tutti facoltativi.
  • CLCircularRegion definisce i geofence; il monitoraggio richiede l'autorizzazione Always.
  • Gestisca didEnterRegion/didExitRegion e richieda lo stato con requestState(for:).

Domande Frequenti

La lezione «Geocoding e regioni» è gratuita?

Sì — il testo completo di «Geocoding e regioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Geocoding e regioni»?

Converti coordinate in indirizzi e monitora le regioni. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Geocoding e regioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Richiesta dell’autorizzazione alla posizione
  2. Ottenere la posizione dell’utente
  3. Visualizzazione delle mappe in SwiftUI
  4. Geocoding e regioni
← Torna a Swift Academy