Я хотел бы показать большое количество маркеров (50k +) на карте Google. Как оказалось, при кластеризации маркеров выбран вариант номер один для 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 Markers = > Отлично работает
- 1000 Markers = > Работает, но уже проявляет медлительность в процессе кластеризации при уменьшении масштаба.
- 10000 Markers = > Уже очень медленное поведение, долгое время для повторной кластеризации маркеров и уменьшения масштаба не является гладким.
- 20000 Маркеры = > Повторная кластеризация занимает очень много времени ( > 20 с), карта не реагирует.