Я хотел бы показать большое количество маркеров (50k +) на Google Map. Как оказалось, библиотека Android Maps Util Library https://github.com/googlemaps/android-maps-utils, кажется, лучший выбор при кластеризации маркеров.
Мне было интересно, существуют ли какие-либо передовые методы, позволяющие повысить эффективность взаимодействия с пользователем карты при отображении такого большого количества маркеров.
Пример
В качестве примера я использовал диспетчер кластеров, чтобы добавить около 20 000 маркеров в диспетчер кластеров, что привело к не очень плавному взаимодействию с картой при масштабировании и панорамировании карты.
Что я использовал:
GridBasedAlgorithm<MyClusterItem> gridAlgorithm = new GridBasedAlgorithm<MyClusterItem>();
mClusterManager.setAlgorithm(new PreCachingAlgorithmDecorator<MyClusterItem>(gridAlgorithm));
Мои стратегии:
1) Удалите все маркеры из кластера при смене камеры, затем добавьте только те, которые находятся в пределах границ обзора. Отлично работает на высоком уровне масштабирования, когда уровень масштабирования снижается, есть много маркеров, которые нужно удалить и добавить, добавляя накладные расходы ко всему процессу кластеризации
2) Добавление всех маркеров в первую очередь.
- 100 маркеров => отлично работает
- 1000 маркеров => Работает, но уже показывает медленность в процессе кластеризации при уменьшении масштаба
- 10000 маркеров => Уже очень медленное поведение, требуется много времени для повторной кластеризации маркеров, а масштабирование не происходит плавно.
- 20000 маркеров => Повторная кластеризация занимает очень много времени (> 20 с), карта не реагирует