Android SDK
com.atasumaps:atasu-maps-android на MapLibre Native: карта, язык и тема, поиск, маршруты до подъезда.
На этой странице
Предварительная версия. В пилоте Android SDK — внутренний модуль приложения Atasu Maps; публикация в Maven Central — в бета-версии. Способ доставки стиля для нативных карт в продакшене ещё решается, поэтому вне отладочных сборок карта пока не загружает стиль. Описанный ниже API стабилен на время пилота.
com.atasumaps:atasu-maps-android (пакет Kotlin com.atasumaps.sdk) построен на MapLibre Native.
Открытый код (Apache-2.0). minSdk 26 (Android 8.0).
Подключение
// app/build.gradle.kts
dependencies {
implementation("com.atasumaps:atasu-maps-android:0.1.0")
}Нужен мобильный ключ из консоли, привязанный к имени пакета приложения (например
kz.example.taxi). SDK отправляет имя пакета с каждым запросом; запросы других пакетов API отклоняет.
Настройка — один раз
// Application.onCreate
AtasuMaps.configure(this, apiKey = BuildConfig.ATASU_API_KEY, language = AtasuLanguage.KK, theme = AtasuTheme.AUTO)Не храните ключ в репозитории (например, свойство Gradle → BuildConfig). Серверные ключи (atk_srv_…)
отклоняются: их нельзя встраивать в приложение.
Карта
// Jetpack Compose
AtasuMap(Modifier.fillMaxSize()) { map ->
map.maplibre.cameraPosition = CameraPosition.Builder().target(LatLng(43.24313, 76.95692)).zoom(14.0).build()
}
// or a View
AtasuMapView(context).apply { bindTo(lifecycle) }.getMapAsync { map -> /* … */ }Карта ждёт первый токен тайлов, обновляет его в фоне и переживает смену конфигурации. Атрибуция рисуется на карте: при открытии развёрнута, затем сворачивается в ⓘ, которая снова её показывает; скрыть её нельзя.
Язык и тема
AtasuMaps.setLanguage(AtasuLanguage.RU) // every map, no style reload
map.setTheme(AtasuTheme.NIGHT) // one map, no style reload
map.addContent("my-layer") { style -> /* style.addSource(…); style.addLayerBelow(…, AtasuMap.firstLabelLayerId(style)) */ }Содержимое, добавленное через addContent, возвращается после каждой перезагрузки стиля.
Поиск
Каждый вызов возвращает AtasuResult: Success со значением или Failure с типизированной AtasuError.
val session = AtasuMaps.search.autocompleteSession(viewModelScope) // debounced, one session token per search
session.update("Минина 24", near = LngLat(76.94, 43.24)) // collect session.state for suggestions
val place = session.place(suggestion.id) // ends the session; 410 → AtasuError.PlaceRemoved
when (val r = AtasuMaps.search.search("Минина 24")) {
is AtasuResult.Success -> r.value.forEach { println(it.name) }
is AtasuResult.Failure -> println(r.error)
}val r = AtasuMaps.routing.route(
RouteOptions(RouteWaypoint.Point(here), RouteWaypoint.Entrance(entrance.id), TravelMode.WALKING, alternatives = 1),
)
if (r is AtasuResult.Success) {
RouteLayer(map).show(r.value, selected = 0, destination = entrance.lngLat)
EntranceLayer(map).show(place.entrances, selected = entrance.id)
}TravelMode.DRIVING, TAXI или WALKING; resolvedTo у каждой точки показывает, действительно ли маршрут
заканчивается у подъезда.
Ошибки
AtasuError — это Network, PlaceRemoved (410), NotFound, RoutingUnavailable / SearchUnavailable (503,
с retryAfterSeconds), NoRoute, UnresolvableWaypoint, OutsideCoverage, RateLimited или
Http(status, code) для остального — см. коды ошибок.
Безопасность и приватность
Ключ и имя пакета уходят только на api.atasumaps.com, токен тайлов — только на tiles.atasumaps.com
(точный хост, https, порт 443, в том числе после редиректов). В SDK нет аналитики, сбора сбоев и push.