使用 SnappingManager
可以用于给 Editor, Measurement Widget, Draw toolbar 以及 Edit toolbar 等添加捕捉功能。
# 使用场景
当在地图上添加几何时,由于缩放级别,无法令两个几何相邻的边准确的重叠在一起,或者无法准确的在一条边上添加点,此时可以开启捕捉功能,当鼠标位置在响应范围内时,会自动移动到对应的边、顶点或者点。
# 使用方法
Method | 作用 |
---|---|
new SnappingManager(options?) | 构造函数 |
destroy() | 销毁对象 |
getSnappingPoint(screenPoint) | 传入屏幕中的点,如果捕捉到该点会在回掉函数中返回 |
setLayerInfos(layerInfos) | 鼠标移动时如果同 layerInfos 数组中的 layer 边界、顶点等有重合,将会自动捕捉到重叠的点 |
# new SnappingManager(options?)
创建一个新的SnappingManager对象。如果要为 Editor, Measurement Widget, Draw toolbar 以及 Edit toolbar 启用捕捉,请调用地图的 enableSnapping 方法。如果需要修改默认选项,则创建一个新的捕捉管理器对象。
属性 | 值类型 | 备注 |
---|---|---|
alwaysSnap | Boolean | 默认为 false, 此时用户可以通过配合使用快捷键来启用捕捉功能。设置为 true, 捕捉功能可以一直使用 |
layerInfos | Array | 设定可捕捉的 Layer |
map | Map | 必要参数,用于设定相关联地图 |
snapKey | dojo/keys | 当alwaysSnap设置为false时,使用此选项来定义关键用户按下以启用捕捉。默认值是dojo.copyKey。dojo.copyKey是一个虚拟键,映射到Windows上的CTRL和mac上的Command键。 |
snapPointSymbol | SimpleMarkerSymbol | 定义捕捉位置的符号。默认符号是一个简单的标记符号,具有以下属性:size:15px, color:cyan, style:STYLE_CROSS。 |
tolerance | Number | 响应范围,在指定像素的半径的圆内的话则为捕捉到。 默认值是15像素。 |
# 调用地图的 enableSnapping 方法
var snapManager = map.enableSnapping({
alwaysSnap: false,
snapKey: has("mac") ? keys.META : keys.CTRL
});
# destroy()
snappingManager.destroy();
# getSnappingPoint(screenPoint)
var deferred = snappingManager.getSnappingPoint(evt.screenPoint);
deferred.then(function(value){
if(value !== undefined){
var snapPoint = value;
}
},
function(error){
console.log('failure');
});
# setLayerInfos(layerInfos)
属性 | 值类型 | 备注 |
---|---|---|
layer | Layer | 默认选项是将地图中的所有特征和图形图层设置为目标捕捉图层 |
snapToEdge | Boolean | 默认 true, 对于 polyline or polygon 的边启用捕捉 |
snapToPoint | Boolean | 默认 true, 对于 point 的点启用捕捉 |
snapToVertex | Boolean | 默认 true, 对于 polyline or polygon 的顶点启用捕捉 |
# layerInfos like:
[
{
layer: {
...layer
},
snapToEdge: true,
snapToPoint: true,
snapToVertex: true
}
];
var layerInfos = [
{layer:results[0].layer}
];
snappingManager.setLayerInfos(layerInfos);