首页 / OpenLayers / API 文档
Modify
先看结论
编辑交互。拖动已有几何体的顶点、在中点插入新顶点,直接改写数据源里的要素。
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 | 取绘制顶点的内部覆盖层,可调整其样式类名 |
事件
| 事件 | 回调参数 | 说明 |
|---|---|---|
modifystart | evt.features | 开始拖动顶点 |
modifyend | evt.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)。