Клуб API Карт

Как заставить кластер с круговой диаграммой обновить свой цвет?

denis-semenov.job
21 октября, 13:38
Как заставить кластер с круговой диаграммой обновить свой цвет после того, как перекрасил его точки с помощью this.objectManager.objects.setObjectOptions?

Issue на гитхабе заведено в 2015, там есть костыль с передёргиванием масштаба карты, но карту в этот момент трясёт, что плохо.

4 комментария
Этот модуль уже давно включен в АПИ, попробуйте его использовать
https://jsfiddle.net/wy93efzk/
denis-semenov.job
21 октября, 13:54
dimik,
Я именно его и использую. У меня пользователь ставит точку на карту, и я для него подсвечиваю другим цветом ближайшие несколько точек. Вот так:


nearest.forEach(s => {
  this.objectManager.objects.setObjectOptions(n.id, {
    preset: 'islands#redIcon'
  });
});


При это точки, не попавшие в кластер, перекрашиваются отлично, а вот кластера сохраняют свой цвет. Потом, если изменить масштаб, перекрашиваются как надо.


На гитхабе предлагают увеличить-уменьшить масштаб:
map.setZoom($scope.map.getZoom() + 1);
map.setZoom($scope.map.getZoom() - 1);
При этом, однако, карта неприятно дёргается.


Я сейчас пофиксил это вот так:
this.myMap.geoObjects.remove(this.objectManager);
this.myMap.geoObjects.add(this.objectManager);
Карта не дёргается, просто точки мигают, и отрисовываются правильными цветами.
Обновлено 21 октября, 13:54
denis-semenov.job,
Понятно... Вам надо самому вызвать rebuild на макете иконки кластера, в который входит объект, которому вы поменяли цвет.
Примерно так:
https://jsfiddle.net/wy93efzk/2/
denis-semenov.job
21 октября, 21:21
dimik,
спасибо, работает, написал вот так:


this.objectManager.clusters.overlays.getAll().forEach(l => {
    l.getIconLayout().then(s => s.rebuild());
});