Если вы разрабатываете приложения, использующие Google Maps, вы вполне можете столкнуться с ситуацией, показанной на картинке слева.
И если вы считаете, что картинка справа выглядит лучше, то вот.
Итак, какие проблемы возникают при работе с большим количеством маркеров:
- При количестве маркеров > 5000-10000 карта начинает сильно тормозить.
- Внешний вид карты, заполненной маркерами, совсем не радует глаз.
Кластер – это объединение нескольких однородных элементов, которое можно рассматривать как самостоятельную единицу, обладающую определенными свойствами.
Соответственно, мы должны объединить маркеры по территориальному признаку и заменить их одним маркером.
И, к счастью, все это уже реализовано.
Помимо стандартной библиотеки для работы с картами, Google предоставляет отличную библиотеку Google Maps Android Marker Clustering Utility. Эта библиотека поставляется отдельно и позволяет составлять маркеры.
Рассмотрим самый сложный пример, когда имеется несколько типов маркеров, каждый со своей иконкой и необходимыми действиями при нажатии (например, отображение InfoWindow с текстом).
Кому больше интересно читать документацию? Developers.google.com/maps/articles/toomanymarkersЭhl=en Developers.google.com/maps/documentation/android/utility/marker-clustering github.com/googlemaps/android-maps-utils
Задача
Поставим следующую задачу: дана торговая сеть, она имеет определенное количество точек и большое количество грузовых автомобилей, перевозящих товары, которые способны сообщать о своем местонахождении.Необходимо наладить мониторинг положения грузовых автомобилей и торговых точек.
Маркеры грузовиков должны иметь значок с изображением лица водителя.
Заказчик суровый, увидел картинку с гроздьями и сказал, что все должно быть так, а не иначе.
Шаг 1. Подготовка
Первый шаг очень логичен — вам нужно описать абстрактный класс маркера, от которого будут наследоваться все остальные.Чтобы иметь возможность использовать кластеризацию, этот класс маркеров должен иметь возможность возвращать свое местоположение.
Для этого нужно реализовать интерфейс Кластеритем .
Тогда возможный код абстрактного класса:
Далее не очень важный код классов маркеров для торговых точек и грузовых автомобилей, но если кому-то интересно.public abstract class AbstractMarker implements ClusterItem { protected double latitude; protected double longitude; protected MarkerOptions marker; @Override public LatLng getPosition() { return new LatLng(latitude, longitude); } protected AbstractMarker(double latitude, double longitude) { setLatitude(latitude); setLongitude(longitude); } @Override public abstract String toString(); public abstract MarkerOptions getMarker() { return marker; } public void setMarker(MarkerOptions marker) { this.marker = marker; } //others getters & setters }
ТрейдМаркер, ТракМаркер public class TradeMarker extends AbstractMarker {
private static BitmapDescriptor shopIcon = null;
private String description;
public TradeMarker(String description,
Теги: #Android #карты Google #Кластеризация #Разработка Android
-
Почему Резервная Копия Exchange Так Важна
19 Oct, 24 -
Краткий Обзор Бесплатных Шпионских Программ
19 Oct, 24 -
Есть Ли В Этом Мк Usb?
19 Oct, 24