GPS i usługi lokalizacyjne w aplikacjach mobilnych — co to jest, sposoby uzyskiwania współrzędnych

Autor: IT Sectr Opublikowano: 2026-03-22 Czas czytania: 8 min

GPS i usługi lokalizacyjne w aplikacjach mobilnych — to API do określania fizycznego położenia urządzenia za pomocą satelitów, Wi-Fi i sieci komórkowych. Według danych Google Android Location Guide (2025), ponad 60% aplikacji mobilnych wykorzystuje dane o lokalizacji do personalizacji treści. Fused Location Provider na Androidzie łączy kilka źródeł w celu zwiększenia dokładności i zmniejszenia zużycia energii.

Najważniejsze

  • GPS — globalny system nawigacji satelitarnej, zapewniający dokładność do 3-5 metrów na otwartym terenie.
  • Usługi lokalizacyjne na Androidzie i iOS udostępniają API do uzyskiwania współrzędnych przez GPS, Wi-Fi i stacje bazowe sieci komórkowej.
  • FusedLocationProviderClient na Androidzie łączy GPS, Wi-Fi i czujniki dla optymalnego balansu dokładności i zużycia energii.
  • CLLocationManager na iOS zarządza żądaniami geolokalizacji z konfiguracją dokładności i trybem tła.
  • Uprawnienia do geolokalizacji dzielą się na „przy użyciu” i „zawsze” — drugie wymaga dodatkowego uzasadnienia.

Co to jest GPS i usługi lokalizacyjne

GPS (Global Positioning System) — to satelitarny system nawigacyjny składający się z 31 aktywnych satelitów na orbicie o wysokości około 20 200 km. W urządzeniach mobilnych układ GPS odbiera sygnały z satelitów i oblicza współrzędne na podstawie trilateracji — pomiaru czasu propagacji sygnału z kilku satelitów. Usługi lokalizacyjne w mobilnych systemach operacyjnych dodają do GPS dane z punktów dostępu Wi-Fi i stacji bazowych sieci komórkowej w celu przyspieszenia określania współrzędnych (A-GPS) oraz poprawy dokładności wewnątrz pomieszczeń. Według danych GPS.gov (2024), dokładność cywilnego GPS wynosi 3-5 metrów przy czystym niebie i do 15 metrów w warunkach gęstej zabudowy.

Dodatkowe systemy satelitarne

Nowoczesne urządzenia mobilne obsługują nie tylko amerykański system GPS, ale także inne globalne systemy nawigacyjne: rosyjski GLONASS (24 satelity), europejski Galileo (28 satelitów) i chiński BeiDou. Obsługa kilku systemów jednocześnie zwiększa dokładność i szybkość określania współrzędnych — urządzenie może wykorzystać do 40 satelitów z różnych systemów do obliczenia pozycji. W systemach iOS i Android wybór systemu satelitarnego odbywa się automatycznie na poziomie układu sprzętowego, programista nie musi tym zarządzać.

Jak działa określanie położenia

Proces określania położenia na urządzeniu mobilnym składa się z kilku etapów: zbieranie danych ze źródeł (satelity, Wi-Fi, sieci komórkowe), filtrowanie i korekcja błędów, obliczanie współrzędnych i przekazywanie wyniku do aplikacji. System operacyjny zarządza tym procesem poprzez jednolity serwis geolokalizacyjny, który optymalizuje pracę wszystkich źródeł w celu oszczędzania baterii. Poniżej opisano trzy główne źródła danych o położeniu.

GPS i nawigacja satelitarna

Nawigacja satelitarna zapewnia maksymalną dokładność (3-5 metrów), ale wymaga bezpośredniej widoczności nieba. Wewnątrz pomieszczeń lub w gęstej zabudowie miejskiej sygnał GPS może być osłabiony lub całkowicie utracony. Czas pierwszego określenia pozycji (TTFF) wynosi 30-60 sekund przy zimnym starcie i 5-10 sekund przy gorącym. A-GPS (Assisted GPS) przyspiesza start poprzez pobieranie efemeryd satelitów przez internet zamiast oczekiwania na dane z satelitów.

Określanie pozycji przez Wi-Fi i stacje bazowe sieci komórkowej

Wi-Fi pozycjonowanie wykorzystuje bazę danych adresów MAC punktów dostępu o znanych współrzędnych. Dokładność wynosi 10-50 metrów w zasięgu Wi-Fi. Stacje bazowe sieci komórkowej zapewniają dokładność od 100 metrów do kilku kilometrów w zależności od gęstości rozmieszczenia stacji. Kombinacja wszystkich źródeł (Fused Location) pozwala uzyskać współrzędne z rozsądną dokładnością przy minimalnym zużyciu energii — szczególnie gdy układ GPS jest wyłączony lub sygnał satelitarny jest niedostępny.

Dostawcy geolokalizacji na Androidzie i iOS

Na obu platformach usługi lokalizacyjne są zaimplementowane poprzez systemowe API o różnym stopniu abstrakcji. Android wykorzystuje FusedLocationProviderClient z Google Play Services, iOS — CLLocationManager z Core Location. Oba API umożliwiają żądanie jednorazowej pozycji lub subskrypcję regularnych aktualizacji. Poniżej znajduje się przykład uzyskiwania współrzędnych na Androidzie za pomocą Fused Location Provider w Kotlinie.

Pobieranie współrzędnych na Androidzie

kotlin
val fusedClient = LocationServices.getFusedLocationProviderClient(this)

val locationRequest = LocationRequest.Builder(
    Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()

val locationCallback = object : LocationCallback() {
    override fun onLocationResult(result: LocationResult) {
        result.lastLocation?.let { location ->
            Log.d("Lokalizacja", "Lat: ${location.latitude}, Lng: ${location.longitude}")
        }
    }
}

if (checkLocationPermission()) {
    fusedClient.requestLocationUpdates(
        locationRequest, locationCallback,
        Looper.getMainLooper()
    )
}

W przykładzie LocationRequest jest konfigurowany z priorytetem HIGH_ACCURACY — włącza to GPS dla maksymalnej dokładności. setIntervalMillis ustawia żądany interwał aktualizacji (5 sekund), setMinUpdateIntervalMillis — minimalny (2 sekundy). Callback onLocationResult jest wywoływany za każdym razem, gdy system otrzyma nowe współrzędne. Ważne jest sprawdzenie uprawnienia przed wywołaniem requestLocationUpdates — w przeciwnym razie aplikacja zgłosi wyjątek SecurityException.

Pobieranie współrzędnych na iOS

swift
import CoreLocation

let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()

// MARK: - CLLocationManagerDelegate
func locationManager(
    _ manager: CLLocationManager,
    didUpdateLocations locations: [CLLocation]
) {
    guard let location = locations.last else { return }
    print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}

Na iOS desiredAccuracy określa dokładność żądania: kCLLocationAccuracyBest wykorzystuje wszystkie dostępne źródła (GPS + Wi-Fi + sieci komórkowe). Po żądaniu uprawnienia przez requestWhenUseAuthorization system wyświetla użytkownikowi dialog. Delegat didUpdateLocations otrzymuje tablicę obiektów CLLocation ze współrzędnymi, wysokością, prędkością i kursem. Aby zatrzymać aktualizacje, wywołuje się stopUpdatingLocation, aby oszczędzić baterię.

Żądanie uprawnień do geolokalizacji

Dostęp do geolokalizacji wymaga wyraźnej zgody użytkownika na obu platformach. Na Androidzie używane są uprawnienia ACCESS_FINE_LOCATION (GPS) i ACCESS_COARSE_LOCATION (Wi-Fi/sieci komórkowe). Począwszy od Androida 10, dostęp w tle wymaga osobnego uprawnienia ACCESS_BACKGROUND_LOCATION. Na iOS dostępne są trzy poziomy: requestWhenInUseAuthorization (tylko przy aktywnej aplikacji), requestAlwaysAuthorization (w tle) oraz znaczniki czasu dla precyzyjnego pozycjonowania. Apple wymaga obowiązkowego opisu w Info.plist: NSLocationWhenInUseUsageDescription lub NSLocationAlwaysAndWhenInUseUsageDescription. Bez tych kluczy żądanie uprawnienia jest ignorowane.

Optymalizacja zużycia energii

Ciągłe korzystanie z GPS znacznie skraca czas pracy baterii — nawet do 30% na godzinę ciągłej pracy przy maksymalnej dokładności. W celu optymalizacji zużycia energii zaleca się używanie geolokalizacji tylko wtedy, gdy jest to konieczne, i zaprzestawanie aktualizacji po przejściu aplikacji w tło. Na Androidzie FusedLocationProviderClient automatycznie przełącza się między GPS a źródłami sieciowymi w zależności od dostępności i priorytetu żądania. Na iOS używaj significant-change location service (startMonitoringSignificantLocationChanges) do aktualizacji przy minimalnym zużyciu energii — dokładność jest niższa (do 500 metrów), ale bateria prawie się nie zużywa. Praktykuj również przetwarzanie wsadowe: zbieraj współrzędne w interwale 5-10 minut i wysyłaj na serwer jednym żądaniem przez WorkManager na Androidzie lub BGTaskScheduler na iOS. Zmniejszenie częstotliwości żądań z 1 sekundy do 30 sekund redukuje zużycie energii geolokalizacji o 85%.

Scenariusze wykorzystania geolokalizacji

Geolokalizacja jest stosowana w szerokim spektrum aplikacji mobilnych: od nawigatorów po usługi dostawy. Najbardziej popularne scenariusze obejmują wyświetlanie użytkownika na mapie, geotargetowanie reklam, śledzenie kurierów, strefy geograficzne dla powiadomień push i śledzenie aktywności fitness. Każdy scenariusz wymaga własnego podejścia do dokładności i częstotliwości aktualizacji. Poniżej znajduje się tabela z zaleceniami konfiguracji dla różnych typów aplikacji.

Typ aplikacjiDokładnośćInterwałTryb tła
NawigatorHIGH (GPS)1-2 sekTak
DostawaBALANCED (GPS+Wi-Fi)10-30 sekTak
PogodaLOW (Wi-Fi/sieci komórkowe)JednorazowoNie
Media społecznościoweBALANCEDPrzy otwarciuNie
FitnessHIGH (GPS)5-10 sekTak

Projektując funkcjonalność geolokalizacyjną, należy uwzględnić, że użytkownicy mogą w każdej chwili cofnąć uprawnienie w ustawieniach systemu. Aplikacja powinna poprawnie obsługiwać sytuację, gdy geolokalizacja jest niedostępna, i wyświetlać zrozumiałe wyjaśnienie, dlaczego funkcjonalność jest ograniczona.

Geofencing (Strefy geograficzne)

Geofencing — technologia tworzenia wirtualnych granic na mapie, po przekroczeniu których aplikacja otrzymuje powiadomienie. Na Androidzie strefy geograficzne są implementowane przez GeofencingClient z Google Play Services, na iOS — przez CLCircularRegion z Core Location. Przy wejściu lub wyjściu ze strefy system budzi aplikację i wysyła zdarzenie, nawet jeśli aplikacja jest zamknięta lub zminimalizowana. Jest to używane do powiadomień push przy zbliżaniu się do sklepu, przypomnień o zadaniach na podstawie lokalizacji oraz automatyzacji urządzeń IoT. Maksymalna liczba stref geograficznych jest ograniczona: na Androidzie — 100, na iOS — 20 jednocześnie. Minimalny promień strefy wynosi 50 metrów na obu platformach, w przeciwnym razie system może nie zadziałać z powodu niedokładności określania położenia. Przy wejściu w strefę system uruchamia Intent na Androidzie lub wywołuje delegata locationManager:didEnterRegion na iOS.

Często zadawane pytania

Co to jest GPS w urządzeniach mobilnych?

GPS w smartfonie to wbudowany odbiornik sygnałów satelitarnego systemu nawigacyjnego, określający współrzędne z dokładnością do 3-5 metrów. Na urządzeniach dostępne są również GLONASS, Galileo i BeiDou w celu zwiększenia dokładności i szybkości pozycjonowania.

Czym różni się GPS od usług lokalizacyjnych?

GPS to tylko metoda satelitarna określania współrzędnych. Usługi lokalizacyjne łączą GPS, pozycjonowanie Wi-Fi i dane ze stacji bazowych sieci komórkowej dla szybszego i bardziej energooszczędnego określania położenia, szczególnie wewnątrz pomieszczeń.

Jak poprosić o uprawnienie do geolokalizacji na iOS?

Wywołaj requestWhenInUseAuthorization() lub requestAlwaysAuthorization() na instancji CLLocationManager. Wcześniej dodaj NSLocationWhenInUseUsageDescription w Info.plist z zrozumiałym tekstem uzasadnienia użycia geolokalizacji.

Jak zmniejszyć zużycie energii GPS w aplikacji?

Używaj FusedLocationProviderClient na Androidzie i significant-change location service na iOS. Zwiększ interwał między żądaniami do 10-30 sekund, wyłączaj aktualizacje, gdy ekran jest wyłączony, i stosuj wsadowe wysyłanie współrzędnych na serwer.

Czy można uzyskać geolokalizację bez GPS?

Tak, bez GPS można określić przybliżone położenie na podstawie Wi-Fi (dokładność 10-50 metrów) lub stacji bazowych sieci komórkowej (dokładność 100-5000 metrów). Na Androidzie do tego celu używa się ACCESS_COARSE_LOCATION.

Podsumowanie

  • GPS — satelitarny system nawigacyjny z dokładnością 3-5 metrów, uzupełniany przez GLONASS, Galileo i BeiDou.
  • Usługi lokalizacyjne łączą GPS, Wi-Fi i stacje bazowe sieci komórkowej dla szybkiego i dokładnego określania współrzędnych.
  • Android używa FusedLocationProviderClient z LocationRequest do konfiguracji dokładności i interwału aktualizacji.
  • iOS używa CLLocationManager z desiredAccuracy i delegatem didUpdateLocations do pobierania współrzędnych.
  • Uprawnienia dzielą się na „przy użyciu” i „zawsze”, dostęp w tle wymaga osobnej zgody użytkownika.
  • Zużycie energii GPS można zmniejszyć o 85% poprzez zwiększenie interwału i korzystanie ze znaczących zmian lokalizacji.
  • Zalecenie — wybieraj dokładność i interwał aktualizacji w zależności od scenariusza: nawigator wymaga HIGH, pogoda — LOW.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również