В настоящее время я работаю над интерактивной картой десяти самых распространенных видов деревьев в городе.Для карты я хочу, чтобы пользователи могли переключать видимость каждого из десяти видов, а также переключатель «всех других» видов.
Проблема в том, что мой нынешний метод для достижения этого очень раздутый, иможет быть значительно упрощено
В настоящее время мой метод заключается в создании серии отмеченных флажков
<input type='checkbox' id='checkbox0'checked> Check0 </input> <div></div>
<input type='checkbox' id='checkbox1'checked> Check1 </input> <div></div>
<input type='checkbox' id='checkbox2'checked> Check2 </input> <div></div>
...
<input type='checkbox' id='checkbox11'checked> Check11 </input> <div></div>
Добавление слоя для деревьев и стилизация элементов в нем:
map.addLayer({
id: 'wpgTrees',
type: 'circle',
source: {
type: 'vector',
url: 'url_Goes_Here'
},
'source-layer': 'source_Goes_Here',
'paint': {
'circle-radius': [
'interpolate', ['linear'], ['zoom'],
13, 2,
20, 4,
],
'circle-color':[
'match',
['get','Common_Nam'],
'green ash', treeColours[0], // Bright red
'American Elm', treeColours[1], // Orange
'Linden species', treeColours[2], // Blue
'Siberian Elm', treeColours[3], //Light red
'bur oak', treeColours[4], //Green, purple
'Manitoba maple, boxelder', treeColours[5],
'black Ash', treeColours[6], // pink
'Colorado blue spruce', treeColours[7], // light blue
'Poplar species', treeColours[8], //light green
'white spruce', treeColours[9], //light puruple
treeColours[10] //All Others
],
}
});
Затем используйте addEventListener для каждого флажка (от 0 до 10, для одиннадцати слоев), чтобы установить непрозрачность каждого объекта, используя. setPaintProperty .
checkbox0.addEventListener('click',function() {
if(treeBoolean[0] == true) {
treeOpacity[0]=0;
treeBoolean[0] = !treeBoolean[0];
} else {
treeOpacity[0]=1;
treeBoolean[0] = !treeBoolean[0];
};
map.setPaintProperty('wpgTrees','circle-opacity',[
'match',
['get','Common_Nam'],
'green ash', treeOpacity[0],
'American Elm', treeOpacity[1],
'Linden species', treeOpacity[2],
'Siberian Elm', treeOpacity[3],
'bur oak', treeOpacity[4],
'Manitoba maple, boxelder', treeOpacity[5],
'black Ash', treeOpacity[6],
'Colorado blue spruce', treeOpacity[7],
'Poplar species', treeOpacity[8],
'white spruce', treeOpacity[9],
1,
]);
})
Проблема с этим методом заключается в том, чтоМне нужно будет повторить раздел кода addEventListener для всех 11 типов функций.Должен быть лучший способ сделать это, так как мой текущий метод очень «раздут».
Спасибо за ваше время и помощь.