Interaction交互

交互(Interaction)是指用户通过鼠标、键盘、触屏等方式对地图进行平移、旋转、缩放等一些交互行为;
OpenLayers提供了最基本的地图放大、缩小、平移等功能,这些基本的操作功能都是默认内置的,二次开发的时候不需要进行额外设置。
另外,还有一些需要设置才可以生效的交互行为,比如:移动要素、绘制图形等;

默认交互

// 地图
var map = new ol.Map({
    interactions: ol.interaction.defaults({
        onFocusOnly: true,
        altShiftDragRotate: false,    // alt+shift拖拽旋转
        pinchRotate: false,    // 双指触屏转动实现旋转
        doubleClickZoom: false,    // 双击缩放
        mouseWheelZoom: false,    // 鼠标滚轮缩放
        shiftDragZoom: false,    // shift拖拽缩放
        pinchZoom: false,    // 双指触屏夹开实现缩放
        dragPan: false,    // 平移 
        keyboard: false,    // 键盘操作
        zoomDelta: 3,    //    使用键盘或双击缩放时的缩放级别增量
        zoomDuration: 5000,    // 缩放动画的持续时间(毫秒)
    }),
    layers:[gaodeTileLayer,layerChinaSimple,layerDraw],
    view: new ol.View({
        center: [117.020847,36.670086],
        maxZoom: 19,
        zoom: 5,
        projection: 'EPSG:4326'
    }),
    target: 'map'
});

Translate移动要素

Interaction for translating (moving) features.
用于移动要素的交互;
官方示例:https://openlayers.org/en/latest/examples/translate-features.html

移动对象可以是要素features也可以是图层layers,但两者不能同时存在;
hitTolerance属性是用于设置触发范围

主要代码:

// 创建移动交互对象
var translate = new ol.interaction.Translate({
    features: new ol.Collection([featureIcon1]),
    //layers: [layerChinaSimple],
    //hitTolerance: 100    // 触发范围:在要素100像素的半径圆内都可以触发
})
// 地图添加交互行为
map.addInteraction(translate);
// 交互对象的触发事件
translate.on('translatestart',function(e){
    $("#message1").text("开始移动!"); 
});
translate.on('translating',function(e){
    $("#message1").text("正在移动!"); 
});
translate.on('translateend',function(e){
    $("#message1").text("结束移动!"); 
});

Draw绘制要素图形

Interaction for drawing feature geometries.
绘制要素几何图形的交互
官方示例:https://openlayers.org/en/latest/examples/draw-features.html?q=draw
绘制其他图形参考官方示例:https://openlayers.org/en/latest/examples/draw-shapes.html?q=draw

type可以是'Point''LineString''Polygon''Circle',用于绘制几何图形点、线、面、圆
geometryFunction可以绘制其他图形,其中ol.interaction.Draw.createBox()用于绘制矩形,ol.interaction.Draw.createRegularPolygon()用于绘制规则多边形,createRegularPolygon(4)则是正方形;注意使用geometryFunction时,type属性应该是Circle

主要代码:

// 创建绘制交互对象
var draw = new ol.interaction.Draw({
    source: sourceDraw,
    type: 'Circle'    // 'Point''LineString''Polygon''Circle'
    geometryFunction: ol.interaction.Draw.createBox()    // createRegularPolygon()
})
// 地图添加交互行为
map.addInteraction(draw);
// 交互对象的触发事件
draw.on('drawstart',function(e){
    $("#message").text("开始绘制!"); 
});
draw.on('drawend',function(e){
    $("#message").text("结束绘制!"); 
});

Snap捕捉

Handles snapping of vector features while modifying or drawing them.
在修改或绘制矢量要素时实现矢量要素的捕捉交互
官方示例:https://openlayers.org/en/latest/examples/snap.html?q=draw

主要代码:

// 创建捕捉交互对象
var snap = new ol.interaction.Snap({
    source: sourceDraw,
})

// 地图添加交互行为
map.addInteraction(snap);
posted @ 2020-03-06 19:18  Dreamice  阅读(869)  评论(0编辑  收藏  举报