一、監聽圖層點擊事件
/**
* 監聽圖層
* @param {地圖對象} map
* @param {監聽的圖層類型} layerType
* @param {回調事件} listener
*/
export function layerClick(map,layerType, listener) {
map.on("singleclick", (e) => {
map.forEachLayerAtPixel(
e.pixel,
() => {
console.log('圖層點擊')
listener(e)
},
{
layerFilter: (e) => {
let properties = e.getProperties()
return properties.type === layerType
},
hitTolerance: 200,
}
);
});
}
二、監聽特征點擊事件
/**
* 監聽特征
* @param {地圖對象} map
* @param {監聽的圖層類型} layerType
* @param {回調事件} listener
*/
export function featureClick(map,layerType, listener) {
/**
* 這種方式會把指定范圍內所有的特性都循環一遍。
*/
// map.on("singleclick", (e) => {
// map.forEachFeatureAtPixel(
// e.pixel,
// (feature,layer) => {
// console.log('特征點擊')
// listener(feature, layer)
// },
// {
// layerFilter: (e) => {
// let properties = e.getProperties()
// return properties.type === layerType
// },
// hitTolerance: 0,
// }
// );
// });
/**
* 這種方式只會查詢當前點擊的特性,如果點擊的不是特性,將查不到結果,並不是范圍內的。
*/
let select = new Select();
map.addInteraction(select)
select.on('select', (e) => {
let features = e.target.getFeatures().getArray()
if (features.length > 0) {
let feature = features[0]
listener(feature.getProperties())
}
})
}