Объединение прозрачных объектов при наложении и полное экранирование одних другими

Вывожу на карту много меток, использую геометрию метки круг (Circle). Метки имеют прозрачность. При пересечение нескольких меток они наслаиваются друг на друга, в какой-то момент становятся совсем непрозрачными.

Метки выводятся из json представления с помощью geoQuery (ObjectManager по некоторым причинам использовать не могу).

Мне нужно сделать так, чтобы при пересечении метки не наслаивались, а как бы сливались друг с другом, если они одного цвета. Но у меня метки разного цвета и в случае пересечения меток разного цвета нужно, чтобы один цвет перекрывал другой (например есть синяя и красная метка и чтобы та часть красной, которая пересекается с синей была не видна вообще, видна только синняя, а остальная часть красной, которая ни с чем не пересекается была видна).

Идеальный пример того как мне нужно: https://geo.minsvyaz.ru

Подскажите как такое реализовать


Ответы (1 шт):

Автор решения: YaCor'

Если нужно как в идеальном примере, потребуется:

  1. Добавить подвижный полупрозрачный пейн чуть выше 'areas'.
  2. Добавлять все круги строго непрозрачными на созданный пейн, с нулевой обводкой, с необходимым параметром zIndex.

Тогда перекрываться они будут друг другом полностью, а уже результирующий слой будет прозрачным.

Если после потребуется прозрачное наложение, можно будет добавить дополнительный такой пейн и распределять объекты по созданным пейнам.

var newPane = new ymaps.pane.MovablePane(myMap, {zIndex: 210, overflow: 'hidden', css:{opacity: 0.5}});
myMap.panes.append("circlePane", newPane);

myMap.geoObjects.options.set({'fillOpacity': 3, 'strokeWidth': 0, 'pane': 'circlePane'});

var myCircle1 = new ymaps.Circle([[55.76, 37.60], 10000], {}, {
    fillColor: "#FF0000",
    zIndex: 1
}),
myCircle2 = new ymaps.Circle([[55.76, 37.80], 10000], {}, {
    fillColor: "#0000FF",
    zIndex: 0
});

myMap.geoObjects.add(myCircle1).add(myCircle2);

Реализация на jsfiddle: https://jsfiddle.net/Coroner1st/ym1v5qbt/7/

→ Ссылка