需求和问题是这样的:现在假设你有一个图层A,想要实现点击A图层中的某一个要素高亮的需求,首先我们将A图层添加到地图上:
第一种思路最简单也最好理解,首先我们可以通过map.on('click',e=>{})的回调,获取当前鼠标点击事所选中的要素,然后将这个要素作为数据源source,重新构建一个图层添加到地图上。
代码如下:
map.on('click', function (e) {
// 获取点击到的要素
const features = map.queryRenderedFeatures(e.point);
map.addLayer({
"id": "test-filter",
"type": "fill",
"source": {
"type": "geojson",
//这里只有一个图层就是features[0],如果有多个图层需要自己写条件过滤
"data": features[0]
},
"click": true,
"paint": {
"fill-color": "#47C1D0",
"fill-opacity": 1
},
});
});
解释一下上面的代码,首先通过map.on绑定click事件,得到了回调参数e,e里面包含很多东西,mapbox官方为我们提供了一个API:queryRenderedFeatures来获取当前点击得到的features,只需要传入参数e的坐标就可以,我们获取到的features可能是多个的,因为