Openlayers如何获取绘制Polygon时最后一个已绘制的坐标点
Openlayers 绘制Polygon时获取最后一个绘制点的解决方案
问题原因
你遇到的getLastCoordinate()返回值不更新的问题,本质是Polygon几何体的结构特性导致的:
- Openlayers中Polygon的外边界是闭合的
LinearRing,要求首尾坐标完全相同,调用getLastCoordinate()默认返回的是和第一个点重合的闭合尾坐标,是固定值,自然不会随新增绘制点更新。 Draw对象的removeLastPoint方法操作的是交互内部维护的临时草图坐标栈,这个栈不会直接暴露给当前绘制的feature的正式几何体,所以没有直接的公开API可以拿到对应点。
修复代码
修改你的change监听逻辑,先取出外边界的坐标数组,去掉最后一个重复的闭合坐标,再取倒数第二个值就是你最后点击确认的绘制点:
listener.value = feature.getGeometry().on('change', (evt) => { const geom = evt.target; // 获取Polygon外边界的坐标数组 const outerRingCoords = geom.getCoordinates()[0]; // 跳过末尾和首点重合的闭合坐标,取最后一个真实绘制点 const lastDrawPoint = outerRingCoords[outerRingCoords.length - 2]; console.log(lastDrawPoint); });
拓展方案
如果需要和removeLastPoint操作的点完全对齐,还可以自行维护绘制坐标栈:
- 监听
Draw实例的pointadded事件,每次触发时将新点推入自定义数组 - 调用
removeLastPoint时同步对自定义数组执行pop操作 - 自定义数组的最后一位就是当前最后一个绘制点
如果需要获取还未点击确认的鼠标跟随临时点,直接监听地图的pointermove事件拿当前坐标即可。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

