You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:21:03