Swift Academy · leksjon

Geokoding og regioner

Konverter koordinater til adresser og overvåk regioner.

Leksjon 4 av 413 trinn

Geokoding og regioner er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva er geokoding?

Geokoding konverterer en menneskelesbar adresse til koordinater, mens omvendt geokoding konverterer koordinater tilbake til en lesbar adresse. Core Location tilbyr CLGeocoder for begge deler og kommuniserer med Apples servere.

import CoreLocation
let geocoder = CLGeocoder()

Fremovergeokoding av en adresse

Kall geocodeAddressString(_:) med en adresse i fritt format. Fullføringen returnerer en matrise med CLPlacemark-objekter. Ta det første objektet, og les location-egenskapen.

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

Omvendt geokoding av koordinater

Med en CLLocation returnerer reverseGeocodeLocation(_:) stedsmarkører som beskriver punktet: gate, by, land, postnummer og mer.

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 ?? "")
    }
}

CLPlacemark-strukturen

En CLPlacemark gir tilgang til mange felt: name, thoroughfare (gate), locality (by), administrativeArea (administrativt område), postalCode, country og isoCountryCode. Mange av dem er valgfrie, så pakk dem forsiktig ut.

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

Begrensninger ved geokoding

CLGeocoder er nettverksbasert og har begrenset forespørselsfrekvens. Gjør én forespørsel om gangen, unngå tette løkker, og avbryt pågående arbeid med cancelGeocode() når resultatet ikke lenger trengs.

geocoder.cancelGeocode()

Geokoding med async/await

Moderne Swift tilbyr asynkrone varianter, slik at De kan skrive lineær kode med try await i stedet for completion handlers.

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

Introduksjon til regionovervåking

Regionovervåking (geogjerding) gjør at systemet kan varsle appen når enheten går inn i eller ut av et definert sirkulært område — selv når appen ikke kjører. Dette krever Always-autorisasjon.

// Requires NSLocationAlwaysAndWhenInUseUsageDescription
manager.requestAlwaysAuthorization()

Definere en CLCircularRegion

Et geogjerde er en CLCircularRegion med et sentrum, en radius (i meter) og en unik identifikator. Angi notifyOnEntry og notifyOnExit for å velge hvilke hendelser De er interessert i.

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

Starte regionovervåking

Kall startMonitoring(for:) for å starte. Enheten har en grense (omtrent 20 regioner per app), så overvåk bare de mest relevante regionene om gangen.

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

Motta inn- og utgangshendelser

Delegatmetodene didEnterRegion og didExitRegion utløses når grenser krysses. Bruk regionens identifier for å vite hvilket geogjerde som utløste hendelsen.

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

Hente gjeldende tilstand

Hvis De vil finne ut om enheten allerede befinner seg i en region uten å vente på at en grense krysses, kan De kalle requestState(for:). Resultatet kommer i didDetermineState som .inside, .outside eller .unknown.

manager.requestState(for: region)

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

Kort kontroll: Geokoding og regioner

Kontroller at De har forstått innholdet.

Oppsummering: Geokoding og regioner

De har lært å oversette mellom adresser og koordinater og å overvåke geografiske grenser:

  • CLGeocoder utfører fremover- og omvendt geokoding (det finnes asynkrone varianter), men har en hastighetsbegrensning.
  • CLPlacemark inneholder detaljerte adressefelter, som alle er valgfrie.
  • CLCircularRegion definerer geogjerder; overvåking krever Always-autorisasjon.
  • Håndter didEnterRegion/didExitRegion, og hent tilstanden med requestState(for:).
Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «Geokoding og regioner» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Geokoding og regioner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Geokoding og regioner»?

Konverter koordinater til adresser og overvåk regioner. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Geokoding og regioner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Be om posisjonstillatelse
  2. Hente brukerens posisjon
  3. Vise kart i SwiftUI
  4. Geokoding og regioner
← Tilbake til Swift Academy