Geokodowanie i regiony
Konwertowanie współrzędnych na adresy i monitorowanie regionów.
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 = trueRozpoczynanie 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:
CLGeocoderobsługuje geokodowanie bezpośrednie i odwrotne (istnieją warianty asynchroniczne); podlega ograniczeniom częstotliwości żądań.CLPlacemarkprzechowuje rozbudowane pola adresu, z których wszystkie są opcjonalne.CLCircularRegiondefiniuje geostrefy; monitorowanie wymaga autoryzacji Always.- Należy obsługiwać
didEnterRegion/didExitRegioni sprawdzać stan za pomocąrequestState(for:).
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
- Żądanie uprawnień do lokalizacji
- Pobieranie lokalizacji użytkownika
- Wyświetlanie map w SwiftUI
- Geokodowanie i regiony