Это четвертый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала, как отобразить маркеры объектов на карте. Сегодня поговорим про кластеризацию объектов.
Иногда маркеры расположены слишком близко и при масштабировании карты наслаиваются друг на друга. При нажатии на один маркер в этом случае может вызываться обработчик из соседнего. Решить эти проблемы поможет кластеризация маркеров.
Кластеры — это объекты карты, которые позволяют при уменьшении масштаба объединить близлежащие маркеры в один объект и отобразить количество объединенных точек.
Для реализации кластеризации в
yandex_mapkit существует специальный класс — ClusterizedPlacemarkCollection. У него есть обязательные параметры:🔴mapId — уникальный идентификатор объекта
🔴placemarks — список маркеров, которые в случае изменения масштаба объединяются в кластеры
🔴radius — минимальное расстояние между точками на карте, которые остаются разделенными и не входят в кластеры
🔴minZoom — минимальный уровень масштабирования, при котором отображаются кластеры
Изменить внешний вид кластера можно через обратный вызов
onClusterAdded(). Он вызывается каждый раз, когда после изменения масштаба карты создаются новые кластеры или удаляются старые.Cluster — объект кластера, который хранит в себе данные об объединенных маркерах, их количестве и своем внешнем виде.Класс
Cluster реализует метод copyWith(), который обеспечивает иммутабельность текущему объекту кластера. С помощью этого метода можно вернуть новый экземпляр класса. От текущего он будет отличаться параметрами, которые заданы в copyWith().Чтобы изменить внешний вид в
onClusterAdded(), нужно вернуть экземпляр Cluster с измененным через copyWith() параметром appearance. Параметр
appearance типизирован как PlacemarkMapObject, поэтому принцип построения иконки и внешнего вида у кластера такой же, как у обычного маркера.Чтобы отобразить маркеры с кластеризацией на карте, объект
ClusterizedPlacemarkCollection нужно передать в поле mapObjects виджета YandexMap.В следующий раз разберем, как управлять стилизацией карты и менять внешний вид внутренних объектов: дорог, ландшафтных зон, мест общего пользования.
#howtoflutter
