原理:给当前所使用到的图层添加点击事件,根据点击的图层的位置,去查询每一个图层该位置的信息,(打通我思路最重要的就是) 每个图层的点位不可能都在同一个经纬度,所以,不管他叠加还是不叠加,都不影响我获取该位置的信息,不要纠结图层是否叠在一起,(高亮不好使,是错的,忘记删除了)
map.getLayers().getArray().forEach(layer => {
// 已显示图层 添加事件
if (layer.getVisible())
// 需要查询数据的图层 添加事件
if (layer.get('params').datasetNames)
// 底图外的其他图层 添加事件
if (!['bzdt', 'ztt', 'bjjx', 'xzjx', 'cjjx'].includes(layer.get('params').id))
// 遍历
map.forEachLayerAtPixel(event.pixel, (feature) => {
feature.style = new style.Style({
stroke: new style.Stroke({
color: "#3e84cf", //高亮区域的边界线颜色
width: 5
}),
fill: new Fill({
color: 'rgba(123,32,31, 0.2)',
})
});
let Param = new GetFeaturesByBufferParameters({
geometry: new Point(event.coordinate),
datasetNames: layer.get('params').datasetNames,
bufferDistance: map.getView().getZoom() >= 14 ? 0.001 : 0.05,//根据缩放程度进行缓冲区大小设置
});
new FeatureService(host + layer.get('params').dataUrl).getFeaturesByBuffer(Param, (serviceResult) => {
let res = ''
if (serviceResult.result.features && serviceResult.result.features.features.length > 0) {
res = serviceResult.result.features.features[0]
}
if (res)
this.$store.commit("SET_CLICK_ITEM", { event, data: { ...res, layerId: layer.get('params').id, layerName: layer.get('params').name } })
});
}, {
layerFilter: (item) => item.get('params').name == layer.get('params').name
})
});