经纬志
首页 / OpenLayers / API 文档

Modify

先看结论

编辑交互。拖动已有几何体的顶点、在中点插入新顶点,直接改写数据源里的要素。

最后验证 2026-11-03 · OpenLayers 10.3.1 · 更新 2026-10-27 · 引用本文
new ol.interaction.Modify(options)

构造参数

参数说明
source待编辑的矢量数据源,与 features 二选一
features待编辑的要素集合,与 source 二选一
pixelTolerance命中顶点的像素容差,默认 10
condition判定是否开始编辑的函数
deleteCondition判定是否删除顶点的函数,返回 true 时删除命中顶点
insertVertexCondition判定是否插入顶点的函数
style编辑顶点与中点的样式
wrapX是否横向循环,默认 false

常用方法

方法返回说明
setActive(active)void启停编辑,停用后顶点句柄消失
getActive()boolean取启用状态
getOverlay()Overlay取绘制顶点的内部覆盖层,可调整其样式类名

事件

事件回调参数说明
modifystartevt.features开始拖动顶点
modifyendevt.features拖动结束,适合在此保存坐标
var source = new ol.source.Vector({ features: features });

var modify = new ol.interaction.Modify({
  source: source,
  pixelTolerance: 10,
  // 按住 Alt 单击删除顶点
  deleteCondition: function (evt) {
    return evt.type === 'singleclick' && evt.originalEvent.altKey;
  }
});
map.addInteraction(modify);

modify.on('modifyend', function (evt) {
  evt.features.forEach(function (feature) {
    var coords = feature.getGeometry().getCoordinates();
    console.log(JSON.stringify(coords));
  });
});

注意事项

  • source 与 features 只能给一个,同时给会以 features 为准,容易误以为数据源已绑定。
  • 默认不提供删除手势,要删顶点必须显式传 deleteCondition,并自行组合按键条件。
  • 顶点与中点由交互内部的覆盖层绘制,不需要额外建图层;遮挡时调 getOverlay() 的 className 或偏移。
  • 编辑直接改写几何体坐标,若原始数据仍需保留,应在加入数据源前 clone() 一份。
引用本文

经纬志(2026)。《Modify》。https://www.jingweizhi.com/openlayers/api/modify.html(访问日期 2026-11-03)。