Vue+Openlayer实现图形的拖动和旋转变形效果
程序员文章站
2022-03-07 14:21:42
目录前言相关资料实现效果 实现步骤前言openlayer 是有他自己的扩展插件 ol-ext,我们这里用他来实现图形的操作:拖拽、旋转、缩放、拉伸、移动等等功能,以及他的监听事件,毕竟我们作图以后是需...
前言
openlayer 是有他自己的扩展插件 ol-ext,我们这里用他来实现图形的操作:拖拽、旋转、缩放、拉伸、移动等等功能,以及他的监听事件,毕竟我们作图以后是需要保存数据给后端,存到数据库的。
相关资料
1、ol-ext官方地址:入口
2、ol-ext 对应的资料地址:入口
3、ol-ext 源码gitee地址:入口
4、openlayers 最新官网:入口
5、openlayers 官网api:入口
实现效果
旋转、拖动
图1、实现效果
图2、旋转效果
图3、左右移动效果
实现步骤
1、vue中引入openlayers
npm i ol --save
附:npm下载指定版本命令,需要可以拿去
npm install --save-dev ol@6.9.0
2、vue中引入 openlayers的扩展包 ol-ext
npm install ol-ext --save
附:npm下载指定版本命令,需要可以拿去
npm install --save ol-ext@3.2.16
3、创建地图容器
<template> <div id="map" class="map"></div> </template>
4、js中引入具体配置,根据你的具体改,我这里放的是我自己的
ol有关:
import "ol/ol.css"; import view from "ol/view"; import map from "ol/map"; import tilelayer from "ol/layer/tile"; import overlay from "ol/overlay"; import xyz from "ol/source/xyz"; import { vector as sourcevec ,cluster,vector as vectorsource } from "ol/source"; import { feature } from "ol"; import { vector as layervec , vector as vectorlayer } from "ol/layer"; import { point, linestring, polygon } from "ol/geom"; import { style, icon, fill, stroke, text, circle as circlestyle, } from "ol/style"; import { osm, tilearcgisrest } from "ol/source";
ol-ext有关:
import exttransform from 'ol-ext/interaction/transform'
5、实现地图方法:
data() { return { map: null, center: [116.39702518856394, 39.918590567855425], //北京故宫的经纬度 centersize: 11.5, projection: "epsg:4326", } }
mounted() { this.initmap() }
methods: { //初始化地图 initmap() { //渲染地图 var layers = [ //深蓝色背景 // new tilelayer({ // source: new xyz({ // url: // "https://map.geoq.cn/arcgis/rest/services/chinaonlinestreetpurplishblue/mapserver/tile/{z}/{y}/{x}", // }), // }), //初始化背景 // new tilelayer({ // source: new osm(), // }) new tilelayer({ title: "街道图", source: new xyz({ url: "http://localhost:8888/haoxing-map/sosomaps/roadmap/{z}/{x}/{y}.jpg",//zwh本地使用 }), }), ]; this.map = new map({ layers: layers, target: "map", view: new view({ center: this.center, projection: this.projection, zoom: this.centersize, maxzoom: 17, minzoom: 8, }), }); },
6、地图上加上多边形数据
mounted() { this.initmap() this.createpolygon() },
methods: { //创建多边形 createpolygon() { //添加图层,并设置点范围 const polygon = new feature({ geometry: new polygon([ [ [116.39314093500519,40.0217660530101], [116.47762344990831,39.921746523871924], [116.33244947314951,39.89892653421418], [116.30623076162784,40.00185925352143], ] ]), }) //设置样式 polygon.setstyle(new style({ stroke: new stroke({ width: 4, color: [255, 0, 0, 1], }), })) //将图形加到地图上 this.map.addlayer(new vectorlayer({ source: new vectorsource({ features: [polygon], }), })) }, }
7、地图上添加具体的操作方法和效果
mounted() { this.initmap() this.createpolygon() this.onedit() },
//操作事件 onedit() { const transform = new exttransform({ enablerotatedtransform: false, hittolerance: 2, translate: true, // 拖拽 stretch: false, // 拉伸 scale: true, // 缩放 rotate: true, // 旋转 translatefeature: false, noflip: true, // layers: [], }) this.map.addinteraction(transform) //开始事件 transform.on(['rotatestart','translatestart'], function(e){ // rotation let startangle = e.feature.get('angle')||0; // translation console.log(1111); console.log(startangle); }); //旋转 transform.on('rotating', function (e){ console.log(2222); console.log("rotate: "+((e.angle*180/math.pi -180)%360+180).tofixed(2)); console.log(e); }); //移动 transform.on('translating', function (e){ console.log(3333); console.log(e.delta); console.log(e); }); //拖拽事件 transform.on('scaling', function (e){ console.log(4444); console.log(e.scale); console.log(e); }); //事件结束 transform.on(['rotateend', 'translateend', 'scaleend'], function (e) { console.log(5555); }); },
到此这篇关于vue+openlayer实现图形的拖动和旋转变形效果的文章就介绍到这了,更多相关vue openlayer内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 使用 OpenCV 开发虚拟键盘的方法
下一篇: vue中v-for指令完成列表渲染
推荐阅读
-
Android编程实现图片的浏览、缩放、拖动和自动居中效果
-
Android编程实现图片的浏览、缩放、拖动和自动居中效果
-
CSS3实现同时执行倾斜和旋转的动画效果
-
在android中实现类似uc和墨迹天气的左右拖动效果
-
CSS3实现同时执行倾斜和旋转的动画效果
-
PPT2013使用自选图形和动画实现摩天轮式旋转的图片展示
-
荐 Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果
-
Vue+Openlayer实现图形的拖动和旋转变形效果
-
CSS3如何实现同时执行倾斜和旋转的动画效果
-
荐 Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果