react-leaflet使用Geoman时编程添加图层pm:create不触发如何解决
Geoman编程添加图层触发监听的解决方案
Geoman的pm:create事件默认仅响应用户通过交互控件手动绘制图层的操作,编程式添加的GeoJSON图层不会自动触发该事件,属于插件的正常设计逻辑。
方案一:手动触发pm:create事件
在添加GeoJSON图层时遍历每个要素图层,手动抛出pm:create事件,和用户手动绘制的触发逻辑保持一致:
const opts = { style: { color }, onEachFeature: (feature, layer) => { // 初始化图层的Geoman属性,避免后续pm相关操作报错 layer.pm = L.PM.Utils.initializeLayerPm(layer); // 手动触发pm:create事件 map.fire('pm:create', { layer: layer, shape: feature.geometry.type.toLowerCase(), source: 'programmatic' }); } } geoJSON(newGeoJsonObject, opts).addTo(activeFeatureGroup);
方案二:监听图层组的layeradd事件(更推荐)
无需依赖Geoman的专属事件,直接给你绑定的activeFeatureGroup添加全局图层添加监听,不管是手动绘制还是编程添加的图层都会触发,一次绑定即可覆盖所有新增图层的处理逻辑:
// activeFeatureGroup初始化完成后绑定一次即可 activeFeatureGroup.on('layeradd', (e) => { const newLayer = e.layer; // 过滤Geoman绘制过程生成的临时提示线、辅助线图层 if (newLayer.pm && !newLayer.pm._isTempLayer) { // 在此处添加你需要绑定的自定义事件监听器 newLayer.on('click', () => { // 自定义点击逻辑示例 }) } })
内容的提问来源于stack exchange,提问作者Rob Christian
相关产品推荐
相关产品推荐

