Перейти к содержанию

Обзор

Kotlin Compose Multiplatform Maven Central License badge-android badge-ios

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-функции, которые сами добавляют себя на карту и убирают, когда покидают композицию.

Обзор Compose

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 ещё формируется и может меняться между минорными версиями; что именно гарантируется, описано в разделе Совместимость.

Автор