Обзор¶
Kotlin-first SDK для Yandex MapKit. API читается так же, как оригинальный, но живёт в общем коде — одна реализация логики карты работает и на Android, и на iOS, а рисовать её можно через Compose Multiplatform.
Это не проект Яндекса
Автор не связан с оригинальным SDK; это обёртка над официальным Yandex MapKit SDK. Документация Яндекса остаётся полезной и здесь: обёртка сохраняет имена пакетов, типов и членов MapKit.
@Composable
fun MapScreen() {
rememberAndInitializeMapKit().bindToLifecycleOwner()
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition(Point(55.751225, 37.629540), zoom = 15f, azimuth = 0f, tilt = 0f)
}
YandexMap(cameraPositionState = cameraPositionState, modifier = Modifier.fillMaxSize()) {
Placemark(
state = rememberPlacemarkState(Point(55.751225, 37.629540)),
icon = imageProvider(Res.drawable.pin_red),
)
}
}
Что покрыто¶
Обёртка нацелена на сборку lite MapKit 4.42.0-lite, и всё, что lite отдаёт на обеих
платформах, доступно из общего кода:
- сама карта —
MapKit,MapView,MapWindow,Map,CameraPosition,VisibleRegion,CameraBounds,Logo, стили карты, планы помещений; - объекты карты — метки, ломаные, полигоны, окружности, коллекции, кластеризация и объекты
представления (
Icon,CompositeIcon,Model,PlacemarkAnimation,PlacemarkText); - объекты базовой карты —
GeoObjectи его метаданные за нажатием на POI, здание или топоним; - геолокация —
LocationManager,UserLocationLayer, симулятор и фиктивный менеджер; - слои — свои тайловые слои, слои объектов карты, пробки;
- хранилище и офлайн-карты —
StorageManager,OfflineCacheManager; - runtime — иерархия
Error, логирование иI18nManager; ImageProviderиAnimatedImageProviderс адаптерами для ресурсов Compose Multiplatform и moko-resources.
Что обёрнуто расписывает каждый пакет, включая те несколько членов, которые оставлены за бортом осознанно.
Сборка full — поиск, маршрутизация, панорамы, дорожные события, персонализация — не обёрнута: этих типов нет в lite SDK.
Два способа нарисовать карту¶
yandex-mapkit-kmp-compose рисует карту и её объекты из общего кода. Объекты карты — отдельная
композиция, поэтому Placemark, Polyline, Polygon, Circle, Clustering, TileLayer и
TrafficLayer — это composable-функции, которые сами добавляют себя на карту и убирают, когда
покидают композицию.
yandex-mapkit-kmp сам ничего не рисует. Создайте MapView так же, как это делает официальный
SDK, преобразуйте его через toCommon() и передайте в общий код, который дальше управляет
картой через API обёртки.
Задача обёртки¶
- Писать логику карты один раз, в общем коде.
- Сохранить оригинальный API.
com.yandex.mapkit.map.Mapпревращается вru.sulgik.mapkit.map.Map, и официальная документация продолжает работать. - Сделать это по-котлиновски:
DurationиInstantвместо голых чисел, nullable-типы вместо значений-заглушек,data classдля value-типов, лямбды для слушателей. - Поддержать мультиплатформенные ресурсы — ресурсы Compose Multiplatform и moko-resources.
До 1.0.0
Это библиотека одного автора, опубликованная для сообщества, а не продукт команды. API ещё формируется и может меняться между минорными версиями; что именно гарантируется, описано в разделе Совместимость.
Автор¶
- @SuLG-ik — основной разработчик. Telegram: @vollllodya