У меня есть карта, использующая mapboxgl-js для скрытия или отображения маркеров карты на основе некоторых критериев.
Скрытие маркеров работает, как и ожидалось, но когда я хочу, чтобы маркеры снова отображались, они мигают в течение нескольких миллисекунд, а затем снова исчезают, пока карта скрывает метки (названия улиц и т. д.) на нижележащем слое, прежде чем они снова появятся.
Смотрите это видео: https://streamable.com/debcp
См. этот код: https://codepen.io/jakobfuchs/details/VRRgJO
Я пришел к выводу, что это вызвано установкой 'icon-allow-overlap': true на слое символа маркера.
Любые предложения, как я могу сохранить этот параметр и избежать мигания?
Странно то, что это происходит не в 100% случаев, а примерно в 95%.
Примеры кода:
Маркерный слой:
map.addLayer({
id: 'property-layer',
type: 'symbol',
source: 'properties',
filter: ['!has', 'point_count'],
layout: {
'symbol-placement': 'point',
'icon-image': 'marker',
'icon-size': 1,
'icon-anchor': 'bottom',
'icon-allow-overlap': true,
}
});
Код фильтра:
const filterToggle = document.getElementById('filterToggle');
filterToggle.addEventListener('change', function(e) {
if (openPopup) {
openPopup.remove();
openPopup = '';
}
let properties;
if (this.checked) {
properties = {
type: "FeatureCollection",
features: features.features.filter((property) => property.properties.availability === 'Available')
}
} else {
properties = features;
}
map.getSource('properties').setData(properties);
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я столкнулся с той же проблемой, и мое решение - использовать значок-игнорировать-размещение вместо значок-разрешить-перекрытие, и у него все еще нет проблем.
Вы можете найти документ здесь: https://docs.mapbox.com/mapbox-gl-js/style-spec/#layout-symbol-icon-ignore-placement
Надеюсь, это поможет, спасибо!
Я не обязательно знаю, что это виновник, но есть ли причина, по которой вы переписываете свой источник каждый раз, когда используется переключатель? Возможно, вы обнаружите, что более простым подходом было бы использовать вместо этого
setFeatureState. (см. этот пример: docs.mapbox.com/mapbox-gl-js/example/hover-styles)