经纬志
首页 / OpenLayers / API 文档

Snap

先看结论

捕捉交互。绘制或编辑时把鼠标位置吸附到已有要素的顶点、边或交点,提高对位精度。

最后验证 2026-11-03 · OpenLayers 10.3.1 · 更新 2026-10-27 · 引用本文
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启停捕捉

事件

事件回调参数说明
snapevt.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)。