У меня есть серый слой для отображения нескольких полигонов на карте Mapbox. Я пытаюсь изменить цвет только одного из них, когда пользователь нажимает на него, чтобы отобразить «выбранный» многоугольник. Мне не нужно взаимодействие, поэтому я не использую библиотеку Draw, просто чтобы показать выбранный многоугольник.
Есть ли способ сделать это в один слой ?? Я попытался добавить свойство boolean
с именем «selected» к каждому свойству многоугольника, но мне не удалось обновить слой.
// Define polygons with properties
var features = [];
areas.forEach(area => features.push(turf.polygon(area.polygon, { id_area: area.id_area, name: area.name, selected: 'false' })));
features = turf.featureCollection(features);
map.on('load', function () {
// Add polygons to map
map.addSource('areas', {
'type': 'geojson',
'data': features
});
// Layer settings
map.addLayer({
'id': 'polygons',
'type': 'fill',
'source': 'areas',
'paint': {
'fill-color': [
'match',
['get', 'selected'],
'true', '#64bdbb', // if selected true, paint in blue
'#888888' // else paint in gray
],
'fill-opacity': 0.4
},
'filter': ['==', '$type', 'Polygon']]
});
});
// Click on polygon
map.on('click', 'polygons', function (e) {
if(e.features.length) {
var feature = e.features[0];
if (feature.properties.id_area == id) {
feature.properties.selected = 'true';
} else {
feature.properties.selected = 'false';
}
// How can I update the layer here to repaint polygons????
}
});
Заранее спасибо!