QGIS2web Openlayers要素绘制无法画矩形及getGeometry报错修复咨询
错误1:Uncaught TypeError: Cannot read properties of null (reading 'getGeometry') 修复
报错原因:交互添加顺序错误,编辑类交互(Select/Modify/Translate)添加在绘制交互之后,优先级更高,绘制时点击地图会被编辑交互捕获,尝试读取空要素的几何属性触发报错。
修复方法:调整交互加入地图的顺序,编辑类交互放在绘制类交互之前:
// 正确的交互添加顺序 map.getInteractions().extend([ selectInteraction, modifyInteraction, translateInteraction, snapInteraction, pointInteraction, lineInteraction, polygonInteraction, circleInteraction, rectangleInteraction ]);
错误2:矩形绘制无法响应点击修复
异常原因:两个配置问题:1. 自定义矩形绘制时未配置stopClick: false,点击事件被默认逻辑拦截;2. 初始化Polygon时传入null导致部分版本OpenLayers识别异常。
修复方法:替换矩形交互的定义代码:
var rectangleInteraction = new ol.interaction.Draw({ type: 'LineString', source: vectorLayer.getSource(), maxPoints: 2, stopClick: false, // 新增配置,允许点击事件正常触发 geometryFunction: function(coordinates, geometry) { if (!geometry) { geometry = new ol.geom.Polygon([]); // 替换null为空数组初始化 } // 坐标不足2个时直接返回,避免边界异常 if (coordinates.length < 2) return geometry var start = coordinates[0]; var end = coordinates[1]; geometry.setCoordinates([ [start, [start[0], end[1]], end, [end[0], start[1]], start] ]); return geometry; } });
附加优化(可选,避免异步异常)
修改onDrawend事件逻辑,不依赖全局activeInteraction变量,避免异步逻辑导致的变量指向错误:
function onDrawend(e) { setTimeout(function() { setActiveEditing(true); e.target.setActive(false); // 从事件对象获取当前触发的绘制交互 document.getElementById('draw').value = 'select'; }, 200); }
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

