Лучшие практики при кластеризации большого количества маркеров в Google Maps Android V2

Я хотел бы показать большое количество маркеров (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 с), карта не реагирует.

Ответ 1

Как я это делал в прошлом: вы должны слушать движение карты и рисовать только те маркеры, которые должны быть видны в данный момент. Также вам следует управлять уровнем масштабирования и объединять несколько маркеров в один, если они размещены на одном экране.