Swift Academy · Lekcja

Geokodowanie i regiony

Konwertowanie współrzędnych na adresy i monitorowanie regionów.

Lekcja 4 z 413 kroki

Geokodowanie i regiony to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest geokodowanie?

Geokodowanie zamienia adres podany przez człowieka na współrzędne, a odwrotne geokodowanie przekształca współrzędne z powrotem w czytelny adres. Core Location udostępnia do obu zadań obiekt CLGeocoder, który komunikuje się z serwerami Apple.

import CoreLocation
let geocoder = CLGeocoder()

Geokodowanie bezpośrednie adresu

Wywołaj geocodeAddressString(_:) z adresem w dowolnym formacie. W wywołaniu zwrotnym zwracana jest tablica obiektów CLPlacemark; należy pobrać pierwszy z nich i odczytać jego location.

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

Odwrotne geokodowanie współrzędnych

Dla danego obiektu CLLocation metoda reverseGeocodeLocation(_:) zwraca obiekty placemark opisujące ten punkt: ulicę, miasto, kraj, kod pocztowy i inne dane.

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

Struktura CLPlacemark

Obiekt CLPlacemark udostępnia wiele szczegółowych pól: name, thoroughfare (ulica), locality (miasto), administrativeArea (stan), postalCode, country i isoCountryCode. Wiele z nich jest opcjonalnych, dlatego należy je ostrożnie rozpakowywać.

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

Ograniczenia geokodera

CLGeocoder korzysta z sieci i ma ograniczenie częstotliwości żądań. Należy wykonywać jedno żądanie naraz, unikać szybkich pętli oraz anulować trwające operacje za pomocą cancelGeocode(), gdy wynik nie jest już potrzebny.

geocoder.cancelGeocode()

Geokodowanie z użyciem async/await

Nowoczesny Swift oferuje warianty asynchroniczne, dzięki którym mogą Państwo pisać kod liniowy z użyciem try await zamiast handlerów zakończenia.

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

Wprowadzenie do monitorowania regionów

Monitorowanie regionów (geofencing) pozwala systemowi powiadomić Państwa aplikację, gdy urządzenie wejdzie do zdefiniowanego okrągłego obszaru lub go opuści — nawet gdy aplikacja nie jest uruchomiona. Wymaga to autoryzacji Zawsze.

// Requires NSLocationAlwaysAndWhenInUseUsageDescription
manager.requestAlwaysAuthorization()

Definiowanie CLCircularRegion

Geostrefa to obiekt CLCircularRegion z centrum, promieniem (w metrach) i unikatowym identyfikatorem. Ustawienia notifyOnEntry i notifyOnExit pozwalają wybrać interesujące Państwa zdarzenia.

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

Rozpoczynanie monitorowania regionu

Wywołajcie Państwo startMonitoring(for:), aby rozpocząć monitorowanie. Urządzenie nakłada limit (około 20 regionów na aplikację), dlatego należy monitorować jednocześnie tylko te najważniejsze.

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

Odbieranie zdarzeń wejścia i wyjścia

Metody delegata didEnterRegion i didExitRegion są wywoływane po przekroczeniu granic. Użyjcie Państwo właściwości identifier regionu, aby ustalić, która geostrefa wywołała zdarzenie.

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

Sprawdzanie bieżącego stanu

Aby sprawdzić, czy urządzenie znajduje się już w regionie, bez czekania na przekroczenie jego granicy, wywołajcie Państwo requestState(for:). Wynik jest przekazywany do didDetermineState jako .inside, .outside lub .unknown.

manager.requestState(for: region)

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

Szybki test: geokodowanie i regiony

Sprawdźcie Państwo swoją wiedzę.

Podsumowanie: geokodowanie i regiony

Nauczyli się Państwo tłumaczyć adresy na współrzędne i odwrotnie oraz monitorować granice geograficzne:

  • CLGeocoder obsługuje geokodowanie bezpośrednie i odwrotne (istnieją warianty asynchroniczne); podlega ograniczeniom częstotliwości żądań.
  • CLPlacemark przechowuje rozbudowane pola adresu, z których wszystkie są opcjonalne.
  • CLCircularRegion definiuje geostrefy; monitorowanie wymaga autoryzacji Always.
  • Należy obsługiwać didEnterRegion/didExitRegion i sprawdzać stan za pomocą requestState(for:).
Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Geokodowanie i regiony” jest bezpłatna?

Tak — pełny tekst „Geokodowanie i regiony” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Geokodowanie i regiony”?

Konwertowanie współrzędnych na adresy i monitorowanie regionów. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Geokodowanie i regiony”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Żądanie uprawnień do lokalizacji
  2. Pobieranie lokalizacji użytkownika
  3. Wyświetlanie map w SwiftUI
  4. Geokodowanie i regiony
← Powrót do Swift Academy