zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/Dreamice/p/12430289.html
Copyright © 2011-2022 走看看