GPS и услуги за геолокация в мобилни приложения — какво е това, начини за получаване на координати

Автор: IT Sectr Публикувано: 2026-03-22 Време за четене: 8 мин

GPS и услугите за геолокация в мобилни приложения — са API за определяне на физическото местоположение на устройството с помощта на сателити, Wi-Fi и мобилни мрежи. Според данни от Google Android Location Guide (2025), над 60% от мобилните приложения използват данни за местоположение за персонализиране на съдържание. Fused Location Provider на Android обединява няколко източника за повишаване на точността и намаляване на консумацията на енергия.

Основни точки

  • GPS — глобална сателитна навигационна система, осигуряваща точност до 3-5 метра на открито.
  • Услуги за геолокация на Android и iOS предоставят API за получаване на координати чрез GPS, Wi-Fi и клетъчни кули.
  • FusedLocationProviderClient на Android обединява GPS, Wi-Fi и сензори за оптимален баланс между точност и консумация на енергия.
  • CLLocationManager на iOS управлява заявки за геолокация с настройка на точност и фонов режим.
  • Разрешения за геолокация се делят на „при използване“ и „винаги“ — второто изисква допълнителна обосновка.

Какво е GPS и услуги за геолокация

GPS (Global Positioning System) — е сателитна навигационна система, състояща се от 31 активни сателита в орбита на височина приблизително 20 200 km. На мобилни устройства GPS чипът приема сигнали от сателити и изчислява координати на базата на трилатерация — измерване на времето за разпространение на сигнала от няколко сателита. Услугите за геолокация в мобилните операционни системи добавят към GPS данни от Wi-Fi точки за достъп и клетъчни кули за ускоряване на определянето на координати (A-GPS) и подобряване на точността на закрито. Според данни на GPS.gov (2024), точността на гражданския GPS е 3-5 метра при ясно небе и до 15 метра в условия на гъста застройка.

Допълнителни сателитни системи

Съвременните мобилни устройства поддържат не само американската GPS система, но и други глобални навигационни системи: руската GLONASS (24 сателита), европейската Galileo (28 сателита) и китайската BeiDou. Едновременната поддръжка на няколко системи повишава точността и скоростта на определяне на координати — устройството може да използва до 40 сателита от различни системи за изчисляване на позиция. На iOS и Android изборът на сателитна система става автоматично на ниво хардуерен чип, разработчикът не трябва да управлява това.

Как работи определянето на местоположение

Процесът на определяне на местоположение на мобилно устройство се състои от няколко етапа: събиране на данни от източници (сателити, Wi-Fi, мобилни мрежи), филтриране и корекция на грешки, изчисляване на координати и предаване на резултата на приложението. Операционната система управлява този процес чрез единна услуга за геолокация, която оптимизира работата на всички източници за пестене на батерия. По-долу са описани трите основни източника на данни за местоположение.

GPS и сателитна навигация

Сателитната навигация осигурява максимална точност (3-5 метра), но изисква пряка видимост към небето. На закрито или в гъста градска среда GPS сигналът може да бъде отслабен или напълно загубен. Времето за първото определяне на позиция (TTFF) е 30-60 секунди при студен старт и 5-10 секунди при горещ старт. A-GPS (Assisted GPS) ускорява старта чрез изтегляне на ефемериди на сателити през интернет вместо изчакване на данни от сателитите.

Определяне на местоположение чрез Wi-Fi и клетъчни кули

Wi-Fi позиционирането използва база данни с MAC адреси на точки за достъп с известни координати. Точността е 10-50 метра в обхвата на Wi-Fi. Клетъчните кули дават точност от 100 метра до няколко километра в зависимост от гъстотата на кулите. Комбинацията от всички източници (Fused Location) позволява получаване на координати с разумна точност при минимална консумация на енергия — особено когато GPS чипът е изключен или сателитният сигнал не е наличен.

Доставчици на геолокация на Android и iOS

На двете платформи услугите за геолокация са имплементирани чрез системни API с различна степен на абстракция. Android използва FusedLocationProviderClient от Google Play Services, iOS — CLLocationManager от Core Location. И двата API позволяват искане на еднократна позиция или абонамент за редовни актуализации. По-долу е даден пример за получаване на координати на Android с помощта на Fused Location Provider на Kotlin.

Получаване на координати на Android

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("Местоположение", "Lat: ${location.latitude}, Lng: ${location.longitude}")
        }
    }
}

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

В примера LocationRequest се конфигурира с приоритет HIGH_ACCURACY — това включва GPS за максимална точност. setIntervalMillis задава желания интервал за актуализиране (5 секунди), setMinUpdateIntervalMillis — минималния (2 секунди). Callback onLocationResult се извиква всеки път, когато системата получи нови координати. Важно е да проверите разрешението преди да извикате requestLocationUpdates — в противен случай приложението ще падне с SecurityException.

Получаване на координати на 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)")
}

На iOS desiredAccuracy определя точността на заявката: kCLLocationAccuracyBest използва всички налични източници (GPS + Wi-Fi + мобилни мрежи). След искане на разрешение чрез requestWhenUseAuthorization системата показва диалог на потребителя. Делегатът didUpdateLocations получава масив от CLLocation обекти с координати, надморска височина, скорост и посока. За спиране на актуализациите се извиква stopUpdatingLocation за пестене на батерия.

Искане на разрешения за геолокация

Достъпът до геолокация изисква изрично разрешение от потребителя на двете платформи. На Android се използват разрешенията ACCESS_FINE_LOCATION (GPS) и ACCESS_COARSE_LOCATION (Wi-Fi/мобилни мрежи). От Android 10 нататък, фонов достъп изисква отделно разрешение ACCESS_BACKGROUND_LOCATION. На iOS са достъпни три нива: requestWhenInUseAuthorization (само когато приложението е активно), requestAlwaysAuthorization (на заден план) и времеви печати за точно позициониране. Apple изисква задължително описание в Info.plist: NSLocationWhenInUseUsageDescription или NSLocationAlwaysAndWhenInUseUsageDescription. Без тези ключове искането за разрешение се игнорира.

Оптимизиране на консумацията на енергия

Непрекъснатото използване на GPS значително намалява живота на батерията — до 30% на час непрекъсната работа на максимална точност. За оптимизиране на консумацията на енергия се препоръчва използване на геолокация само когато е необходимо и спиране на актуализациите, когато приложението премине на заден план. На Android FusedLocationProviderClient автоматично превключва между GPS и мрежови източници в зависимост от наличността и приоритета на заявката. На iOS използвайте significant-change location service (startMonitoringSignificantLocationChanges) за актуализации с минимална консумация на енергия — точността е по-ниска (до 500 метра), но батерията почти не се изтощава. Също така прилагайте пакетна обработка: събирайте координати на интервали от 5-10 минути и ги изпращайте на сървъра с една заявка чрез WorkManager на Android или BGTaskScheduler на iOS. Намаляването на честотата на заявките от 1 секунда на 30 секунди намалява консумацията на енергия за геолокация с 85%.

Сценарии за използване на геолокация

Геолокацията се използва в широк спектър от мобилни приложения: от навигатори до услуги за доставка. Най-честите сценарии включват показване на потребителя на картата, геотаргетиране на реклами, проследяване на куриери, геозони за push известия и проследяване на фитнес активност. Всеки сценарий изисква свой подход към точността и честотата на актуализациите. По-долу е таблица с препоръки за конфигуриране за различни типове приложения.

Тип приложениеТочностИнтервалФонов режим
НавигаторHIGH (GPS)1-2 секДа
ДоставкаBALANCED (GPS+Wi-Fi)10-30 секДа
ВремеLOW (Wi-Fi/мобилни мрежи)ЕднократноНе
Социална мрежаBALANCEDПри отварянеНе
ФитнесHIGH (GPS)5-10 секДа

При проектирането на функционалност за геолокация е важно да се вземе предвид, че потребителите могат по всяко време да оттеглят разрешението чрез системните настройки. Приложението трябва правилно да обработва ситуацията, когато геолокацията не е налична, и да показва разбираемо обяснение защо функционалността е ограничена.

Геозони (Geofencing)

Geofencing — технология за създаване на виртуални граници на картата, при пресичането на които приложението получава известие. На Android геозоните се имплементират чрез GeofencingClient от Google Play Services, на iOS — чрез CLCircularRegion от Core Location. При влизане или излизане от зона системата събужда приложението и изпраща събитие, дори ако приложението е затворено или минимизирано. Това се използва за push известия при приближаване до магазин, напомняния за задачи на база местоположение и автоматизация на IoT устройства. Максималният брой геозони е ограничен: на Android — 100, на iOS — 20 едновременно. Минималният радиус на зоната е 50 метра на двете платформи, в противен случай системата може да не реагира поради грешка в определянето на местоположение. При влизане в зона системата стартира Intent на Android или извиква делегата locationManager:didEnterRegion на iOS.

Често задавани въпроси

Какво е GPS в мобилните устройства?

GPS в смартфона е вграден приемник на сигнали от сателитната навигационна система, който определя координати с точност 3-5 метра. На устройствата са достъпни също GLONASS, Galileo и BeiDou за повишаване на точността и скоростта на позициониране.

Каква е разликата между GPS и услугите за геолокация?

GPS е само сателитният метод за определяне на координати. Услугите за геолокация обединяват GPS, Wi-Fi позициониране и данни от клетъчни кули за по-бързо и енергийно ефективно определяне на местоположение, особено на закрито.

Как да поискам разрешение за геолокация на iOS?

Извикайте requestWhenInUseAuthorization() или requestAlwaysAuthorization() на инстанция на CLLocationManager. Преди това добавете NSLocationWhenInUseUsageDescription в Info.plist с разбираем текст на причината за използване на геолокация.

Как да намаля консумацията на енергия на GPS в приложението?

Използвайте FusedLocationProviderClient на Android и significant-change location service на iOS. Увеличете интервала между заявките до 10-30 секунди, изключете актуализациите, когато екранът е изключен, и приложете пакетно изпращане на координати до сървъра.

Може ли да се получи геолокация без GPS?

Да, без GPS може да се определи приблизително местоположение чрез Wi-Fi точки за достъп (точност 10-50 метра) или клетъчни кули (точност 100-5000 метра). На Android за това се използва ACCESS_COARSE_LOCATION.

Резюме

  • GPS — сателитна навигационна система с точност 3-5 метра, допълвана от GLONASS, Galileo и BeiDou.
  • Услугите за геолокация обединяват GPS, Wi-Fi и клетъчни кули за бързо и точно определяне на координати.
  • Android използва FusedLocationProviderClient с LocationRequest за настройка на точност и интервал на актуализиране.
  • iOS използва CLLocationManager с desiredAccuracy и делегат didUpdateLocations за получаване на координати.
  • Разрешенията се делят на „при използване“ и „винаги“, фонов достъп изисква отделно одобрение от потребителя.
  • Консумацията на енергия на GPS може да бъде намалена с 85% чрез увеличаване на интервала и използване на значителни промени в местоположението.
  • Препоръка — избирайте точност и интервал на актуализиране според сценария: навигаторът изисква HIGH, времето — LOW.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също