首页 / OpenLayers / API 文档
Snap
先看结论
捕捉交互。绘制或编辑时把鼠标位置吸附到已有要素的顶点、边或交点,提高对位精度。
new ol.interaction.Snap(options)
构造参数
| 参数 | 说明 |
|---|---|
source | 捕捉目标数据源,与 features 二选一 |
features | 捕捉目标要素集合,与 source 二选一 |
pixelTolerance | 吸附距离像素,默认 10 |
vertex | 是否捕捉顶点,默认 true |
edge | 是否捕捉边,默认 true |
intersection | 是否捕捉交点,默认 false |
filter | 过滤参与捕捉的要素,签名 (feature, layer) |
常用方法
| 方法 | 返回 | 说明 |
|---|---|---|
addFeature(feature, opt_listen) | void | 追加捕捉目标,第二参数为 true 时跟随要素几何变化 |
removeFeature(feature) | void | 移除捕捉目标 |
getActive() / setActive(a) | boolean / void | 启停捕捉 |
事件
| 事件 | 回调参数 | 说明 |
|---|---|---|
snap | evt.coordinate、evt.vertex | 发生吸附,可用作捕捉提示 |
var snap = new ol.interaction.Snap({
source: referenceSource, // 已有的参考要素
pixelTolerance: 12,
vertex: true,
edge: true,
intersection: true
});
map.addInteraction(snap);
snap.on('snap', function (evt) {
console.log('吸附到', evt.coordinate, evt.vertex);
});
// 单独追加一个目标要素
snap.addFeature(extraFeature, true);
注意事项
source与features只传一个;传 source 时会自动包含该源的已有要素及后续新增要素。- 交点捕捉默认关闭,需要显式设置
intersection: true,开启后计算量上升,要素多时会有卡顿。 pixelTolerance是屏幕像素,放大后同样的容差覆盖的地理范围变小,密集点位需要调大。- 捕捉只改写传入的事件坐标,不产生新要素;与 Draw、Modify 同时启用才会有实际效果。
经纬志(2026)。《Snap》。https://www.jingweizhi.com/openlayers/api/snap.html(访问日期 2026-11-03)。