Как отобразить тысячи оверлейных элементов в Android MapView - PullRequest
2 голосов
/ 16 июня 2011

Я столкнулся с некоторыми проблемами с API Android MapView.Я получаю OverlayItems из базы данных, которую я хочу отобразить в MapView.Если я показываю 100 иконок, у меня нет проблем, но если их больше - например, 500 предметов в одном городе - сначала это выглядит очень плохо, а во-вторых, сильно замедляется.К сожалению, моя цель - показать 10000 из них.Я думаю, что одним из решений может быть регистрация слушателя ZoomLevels, чтобы они выглядели / исчезали, но я не смог найти эту функциональность.Во-вторых, я не смог найти функцию для масштабирования моих оверлеев с масштабированием карты.Любые идеи приветствуются

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

В методе рисования ItemizedOverlay очень странное поведение. Когда вы говорите: рисовать линии от (x, y) до (x1, y1), метод рисования вызывается примерно 20-30-40 раз - я не знаю почему. Это приемлемо, когда вы рисуете одну линию, но когда вы рисуете тысячи линий, значки и так далее ... это очень, очень плохо! Чтобы решить эту проблему, вы должны создать кэшированное наложение. Это наложение, которое ловит первую ничью, создает объект и затем предотвращает будущие ничьи, которые делают ту же самую ничью.

Кластер - это дюжина иконок позади одного значка. Например, если у вас есть 1000 маркеров на карте, при определенном минимальном уровне масштабирования вы не можете видеть каждый маркер отдельно - он становится путаницей значков и цветов и так далее. И вместо 100 очень близких друг к другу маркеров вы размещаете кластерный маркер. И при увеличении удалите этот кластер и создайте другие кластеры ... делайте это, пока маркеры не станут достаточно далеко и вы не увидите их разделенными.

Проверьте это: Кластерные маркеры

2 голосов
/ 16 июня 2011

Используйте следующие подходы:

  1. Создание кэшированного оверлея для предотвращения многократного рисования одних и тех же кластеров;
  2. Ничья в потоке;
  3. Сгруппируйте свои маркеры в зависимости от уровня масштабирования и близости маркеров.
  4. Каждый раз, когда вы рисуете в оверлее, убедитесь, что текущий маркер находится внутри видимой части экрана. Если это не так, не рисовать!
0 голосов
/ 16 июня 2011

У меня была похожая проблема с размером иконки и уровнем масштабирования в моем приложении. В итоге я получил 2 набора наложений, содержащих маркеры, один со значком «увеличенный» и один со значком «уменьшенный». Затем просто изменил наложение при определенном уровне масштабирования (с помощью ползунка масштабирования - При событии масштабирования для карт Google на Android )

...