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

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

person Devdroid    schedule 05.06.2014    source источник
comment
play.google.com/store/ apps / - 20 тысяч маркеров с легкостью. источник доступен   -  person MaciejGórski    schedule 05.06.2014
comment
@ MaciejGórski Я играл с вашей библиотекой. Он работает действительно гладко и хорошо с таким количеством маркеров. Спасибо за библиотеку, вы действительно хорошо с ней поработали, большое спасибо!   -  person Devdroid    schedule 10.06.2014
comment
Рад, что вам это нравится. Наслаждаться.   -  person MaciejGórski    schedule 10.06.2014
comment
@ MaciejGórski: Приложение вылетает из-за более чем 50 000 маркеров.   -  person void pointer    schedule 13.08.2015
comment
@ MaciejGórski Знаете ли вы какие-либо решения, в которых используется алгоритм на основе расстояния, а не алгоритм на основе сетки?   -  person nukeforum    schedule 05.04.2016


Ответы (1)


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

person Dmytro Batyuk    schedule 28.06.2019