Geokoding og regioner
Konverter koordinater til adresser og overvåk regioner.
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 = trueStarte 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:
CLGeocoderutfører fremover- og omvendt geokoding (det finnes asynkrone varianter), men har en hastighetsbegrensning.CLPlacemarkinneholder detaljerte adressefelter, som alle er valgfrie.CLCircularRegiondefinerer geogjerder; overvåking krever Always-autorisasjon.- Håndter
didEnterRegion/didExitRegion, og hent tilstanden medrequestState(for:).
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
- Be om posisjonstillatelse
- Hente brukerens posisjon
- Vise kart i SwiftUI
- Geokoding og regioner