vue+openLayers闪烁图形/线段/点 都可以使用类似的方法

本文使用闪烁图形作为实例,线段和点都是类似的原理

基础方法
1.先定义两个样式,闪烁时两个样式相互交换
2.利用定时器(单数的时候样式一,双数的时候样式二)由此来实现闪烁效果

先给主要代码如下(最后有全部代码):

var features = [];
// 闪烁方法let interval;var flashStyle1 = new olStyle.Style({//边框样式stroke: new olStyle.Stroke({color: 'red',width: 4,}),})var flashStyle2 = new olStyle.Style({//边框样式stroke: new olStyle.Stroke({color: 'blue',width: 5,}),})//停止闪烁的标志let flag = 0;interval && clearInterval(interval);//闪烁方法对象interval = setInterval(function () {//闪烁次数if (flag <= 8) {if (flag % 2 == 0) {features.forEach(e => {e.setStyle(flashStyle1)})} else {features.forEach(e => {e.setStyle(flashStyle2)})}flag++;} else {//停止闪烁,还原样式,删除间隔对象features.forEach(e => {e.setStyle(flashStyle1)})window.clearInterval(interval);}//间隔时间}, 500);

2, 全部代码

mapTool.js

import * as olCoordinate from 'ol/coordinate';
import { MousePosition, ScaleLine } from 'ol/control';
import * as olLayer from 'ol/layer'
import * as olSource from 'ol/source';
import Overlay from 'ol/Overlay.js';
import * as olStyle from 'ol/style';
import olFeature from 'ol/Feature'
import olPoint from 'ol/geom/Point'
import olLineString from 'ol/geom/LineString'
import { getArea, getLength } from 'ol/sphere.js';
import { get } from "ol/proj";
/*** 给地图添加样式图层* @param {*} map */
export function addLineLayerClickPlas(map) {//实例化一个矢量图层Vector作为绘制层var source = new olSource.Vector();var vectorLayer = new olLayer.Vector({// 图层的idid: 'ClickNew',source: source,minZoom: 11,style: new olStyle.Style({stroke: new olStyle.Stroke({color: 'blue',//线条颜色width: 8,}),})});//将绘制层添加到地图容器中map.addLayer(vectorLayer);
}
/*** 给地图添加数据并加闪烁* @param {*} map 当前地图* @param {*} datas 地图的数据*/
export function addLayerDataClickNew(map, datas) {// 根据图层的id获取layervar layer = getLayerById(map, 'ClickNew')var source = layer.get('source');source.clear();var features = [];if (datas && datas.length > 0) {for (var i = 0; i < datas.length; i++) {var data = datas[i]features.push(new olFeature({geometry: new olLineString(data)}),)}source.addFeatures(features);}var extent = source.getExtent();var view = map.getView();view.fit(extent, { duration: 2000 });// 闪烁方法let interval;var flashStyle1 = new olStyle.Style({//边框样式stroke: new olStyle.Stroke({color: 'red',width: 4,}),})var flashStyle2 = new olStyle.Style({//边框样式stroke: new olStyle.Stroke({color: 'blue',width: 5,}),})//停止闪烁的标志let flag = 0;interval && clearInterval(interval);//闪烁方法对象interval = setInterval(function () {//闪烁次数if (flag <= 8) {if (flag % 2 == 0) {features.forEach(e => {e.setStyle(flashStyle1)})} else {features.forEach(e => {e.setStyle(flashStyle2)})}flag++;} else {//停止闪烁,还原样式,删除间隔对象features.forEach(e => {e.setStyle(flashStyle1)})window.clearInterval(interval);}//间隔时间}, 500);// 安装id查询图层export function getLayerById(map, layerId) {var layer;var layers = map.getLayers().array_; //图层组for (var i = 0; i < layers.length; i++) {if (layers[i].get('id') === layerId) {layer = layers[i]}}return layer;}
/*** 添加鼠标位置*/
export function addPosition(map) {var mousePositionControl = new MousePosition({coordinateFormat: olCoordinate.createStringXY(5),// 将坐标保留5位小数位,并转换为字符串className: 'mouse-position',// 控件的CSS类名target: 'mouse-position',// 将控件渲染在该DOM元素中undefinedHTML: '&nbsp;'// 鼠标离开地图时,显示空格});map.addControl(mousePositionControl);}/*** 添加比例尺*/
export function addScal(map) {var scaleLineControl = new ScaleLine({//设置度量单位为米units: 'metric',target: 'scalebar',className: 'ol-scale-line'});map.addControl(scaleLineControl);
}/*** 初始化弹窗* @param map* @returns {Overlay}*/
export function addOverlay(map) {var overlay = new Overlay({element: document.getElementById('popup'), //绑定dom对象,纯js必须使用document绑定,不能像Map的dom对象,只写‘popup’stopEvent: false,autoPanAnimation: {duration: 250}});map.addOverlay(overlay);return overlay;
}

vue页面代码

<template><!-- 智能GIS提取 --><div class="main"><div style="width: 100%; height: 89vh"><!-- 拓扑展示模板 --><!-- 地图 --><div id="map" class="map"></div><div id="mouse-position" class="mouse-position"></div><div id="scalebar" class="ol-scale"></div><!-- 卡片信息 --><div id="popup" class="ol-popup" v-show="dialogShow"><div id="popup-title" class="popup-title"></div><div id="popup-content" class="popup-content"></div></div></div></div>
</template><script>
import 'ol/ol.css'
import { Map, View } from 'ol'
import { defaults } from 'ol/control'
import XYZ from 'ol/source/XYZ'
import TileLayer from 'ol/layer/Tile'
import { getVectorContext } from 'ol/render'
import Feature from 'ol/Feature'
import {addPosition,addScal,addOverlay,addLineLayerClickPlas,addLayerDataClickNew,
} from '@/config/mapTool.js'
export default {data() {return {map:null,overlay:null,dialogShow:false}},created() {//调用地图this.$nextTick(() => {this.initMaps()})},methods: {// 初始化地图async initMaps() {var _self = thisvar backLayer = new TileLayer({source: new XYZ({crossOrigin: "anonymous",url:"",// 自行在网上寻找高德底图url加载}),});let view = new View({center: [106, 35],projection: get("EPSG:4326"),zoom: 4.5,maxZoom: 17, //放大级别minZoom: 4, //缩放级别enableRotation: false, //启用旋转});this.map = new Map({layers: [backLayer],target: "map",view: view,controls: defaults({zoom: false,rotate: false,}),});//加载当前经纬度addPosition(this.map)//加载比例尺addScal(this.map)// 添加图层addLineLayerClickPlas(this.map)let data = [[111.56299412, 40.79764337],[111.56310268, 40.79751877],[111.56405105, 40.79807637],[111.56426811, 40.79792264]]// 给图层添加数据addLayerDataClickNew(this.map, data)setTimeout(() => {this.overlay = addOverlay(this.map)}, 1000)this.view = view}}
}
</script><style lang="less" scoped>
.map {width: 100%;height: 100%;
}.map /deep/ .ol-attribution.ol-uncollapsible {display: none !important;
}
.main {width: 100%;height: 100%;display: flex;// gis---->.map {width: 100%;height: 100%;}.map /deep/ .ol-attribution.ol-uncollapsible {display: none !important;}.mouse-position {position: absolute;left: 0;bottom: 0;width: 150px;height: 20px;background-color: #000;text-align: left;box-sizing: border-box;padding-left: 15px;font-size: 12px;color: #fff;line-height: 20px;}.ol-scale {left: 150px;bottom: 0;position: absolute;}.ol-scale /deep/ .ol-scale-line {position: relative;bottom: 0;background: rgba(0, 60, 136, 0.5);}#menu {position: absolute;top: 0;left: 0;}.ol-popup {display: none;position: absolute;background-color: white;-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);-webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));border: 1px solid #cccccc;bottom: 12px;left: -50px;width: 200px;}.ol-popup:after,.ol-popup:before {top: 100%;border: solid transparent;content: ' ';height: 0;width: 0;position: absolute;pointer-events: none;}.ol-popup:after {border-top-color: white;border-width: 10px;left: 48px;margin-left: -10px;}.ol-popup:before {border-top-color: #cccccc;border-width: 11px;left: 48px;margin-left: -11px;}.popup-title {font-weight: bold;border-bottom: 1px solid #cccccc;padding: 5px 8px;}.popup-content {padding: 5px 8px;}.ol-popup-closer {text-decoration: none;position: absolute;top: 6px;right: 6px;}.ol-popup-closer:after {content: '✖';}.layerlogo {position: absolute;bottom: 50px;right: 30px;background-color: #fff;border: solid 1px #409eff;width: 80px;}.layerlogo span {display: block;width: 100%;height: 20px;color: #fff;font-size: 12px;background-color: #409eff;margin-bottom: 10px;}.legend {position: absolute;bottom: 50px;background-color: #fff;padding-right: 20px;border: solid 1px #409eff;}}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp vue3版本引用 jsencrypt加密库报错:“default“ is not exported by……

个人产生这个异常的原因&#xff1a;将历史项目&#xff08;vue2&#xff09;的jsencrypt文件复制到新项目&#xff08;vue3&#xff09;里直接引用报错。存在兼容问题&#xff0c;需要重新安装vue3版本的jsencrypt 安装依赖 npm install jsencrypt页面引入 import { JSEncry…

变压器消谐电阻器测试仪

产品概述 KDZD3000X消谐电阻器参数测试仪能实现自动检测消谐器在电流峰值为0.3mA、0.5mA 、1mA 、3mA 、5mA、10mA时相对应的电压峰值或有效值&#xff0c;并能自动绘制出消谐器伏安特性曲线图。 仪器依据的标准 Q/GDW415-2010《电磁式电压互感器用非线性电阻性消谐器技术规…

计算机二级Python基本排序题-序号45(补充)

1. 文件"singup.txt”中保存了若干条参加运动会学生的报名记录&#xff0c;每条记录的形式为“班级号_学号”&#xff0c;例如"A1_12”&#xff0c;将每个班级报名情按参加运动会人数从多到少排列&#xff08;假设不存在人数相同的情况&#xff09;并输出&#xff0c…

畅聊未来:低代码打造在线聊天系统

前言 现代社交网络的普及使得在线聊天成为人们日常生活中不可或缺的一部分。然而&#xff0c;传统的开发方式往往复杂且耗时&#xff0c;因此寻找一种更快捷、灵活且可视化的方法来构建在线聊天系统变得尤为重要。本文将介绍如何利用低代码平台来快速搭建一个功能齐全的在线聊…

存内计算引领新一代技术革新,开启算力新时代

文章目录 存内计算与传统计算的区别 存内计算与传统计算的区别 存内计算芯片的优势 存内计算在各个领域的应用 存内计算技术对未来发展的影响 CSDN存内计算开发者社区&#xff1a;引领新一代技术革新的最前沿 社区内容专业度 社区具备的资源 社区的开放性 社区招募令…

JVM篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、解释 Java 堆空间及 GC?二、JVM 内存区域三、程序计数器(线程私有)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一…

Intel NUC x15电池独立显卡功耗异常解决办法

买了Intel NUC x15&#xff0c;所有驱动都是安装的官方的驱动&#xff0c;但是电池续航一直尿崩。经过查找资料&#xff0c;发现是独立显卡功耗异常导致&#xff0c;也有用户给出了解决办法&#xff0c;参考NUC X15 显卡待机功耗异常解决方案 - 哔哩哔哩 (bilibili.com)。https…

canvas绘制美国国旗(USA Flag)

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

8 容器化微服务

文章目录 DockerSpring Boot和Buildpacks在Docker中运行系统Docker化微服务Docker化前端Docker化配置导入器Docker Compose使用Docker扩展系统共享Docker镜像小结 前面的文章&#xff1a; 1、1 一个测试驱动的Spring Boot应用程序开发 2、2 使用React构造前端应用 3、3 试驱动的…

通信入门系列——复变函数

本节目录 一、复变函数 1、复数 2、复数的四则运算 二、复指数函数 三、欧拉公式本节内容 一、复变函数 1、复数 复数单位i&#xff0c;也就是满足i^2-1&#xff0c;将zxiy表示为复数z&#xff0c;x和y为任意的实数&#xff0c;称为复数z的实部和虚部。由复数zxiy对应的点(x,y…

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam&#xff0c;有时只是慢&#xff0c;但是还是…

02_正则表达式的应用

本课目标 理解正则表达式概述掌握Js的正则对象Regexp掌握正则表达式的常见用法完成页面注册的手机号码校验 1. 正则表达式概述 官方文档&#xff1a;正则表达式 - JavaScript | MDN 正则表达式在线测试 1.1 正则表达式的定义 介绍&#xff1a;正则表达式是用于匹配字符串中…

# 安徽锐锋科技IDMS系统简介

IDMS 由安徽锐锋科技独立开发 该系统负责和海算以及UE\UNITY的无缝衔接并具备远程数据库访问、高速数据库的自动创建及数据存储、支持MQTT等多种物联网接口&#xff0c;支持多种算法。主要完成由于物料、人员、生产、故障、不良异常、订单异常带来的生产损失&#xff0c;通过海…

macOS跨进程通信: TCP Socket 创建实例

macOS跨进程通信: TCP Socket 创建实例 一&#xff1a; 简介 Socket 是 网络传输的抽象概念。 一般我们常用的有Tcp Socket和 UDP Scoket&#xff0c; 和类Unix 系统&#xff08;包括Mac&#xff09;独有的 Unix Domain Socket&#xff08;UDS&#xff09;。 Tcp Socket 能够…

国内免费chartGPT网站汇总

https://s.suolj.com - &#xff08;支持文心、科大讯飞、智谱等国内大语言模型&#xff0c;Midjourney绘画、语音对讲、聊天插件&#xff09;国内可以直连&#xff0c;响应速度很快 很稳定 https://seboai.github.io - 国内可以直连&#xff0c;响应速度很快 很稳定 http://gp…

web安全学习笔记【05】——反弹Shell、正反向连接

思维导图 #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&am…

解决TCP粘包问题

粘包问题已经在上一篇博客中写到具体可以看----------- 以下是利用分包解决粘包问题的步骤&#xff1a; 消息长度前缀&#xff1a; 在每个数据包前加入消息长度信息。 定义协议格式&#xff1a; 明确定义通信协议的格式&#xff0c;包括消息头和消息体。 封包&#xff1a; 将…

Java研学-代理模式

一 概述 1 分类 静态代理&#xff1a;在程序运行前就已经存在代理类的字节码文件&#xff0c;代理对象和真实对象的关系在运行前就确定了。&#xff08;代理类及对象要自行创建&#xff09;   动态代理&#xff1a;代理类是在程序运行期间由 JVM 通过反射等机制动态的生成的…

GBASE南大通用数据库GBase 8s常见问题讲堂 -- 字符集的设置

本文摘自GBASE南大通用社区&#xff0c;by&#xff1a;wty&#xff0c;原文请点击&#xff1a;GBase 8s常见问题 -- 字符集相关问题|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商 23103 Code-set conversion function failed …

电脑数据恢复软件哪个有效好用?十大电脑数据恢复软件排行

在数字时代&#xff0c;数据就是一切。从珍贵的家庭照片和重要的工作文档到最喜欢的音乐和电影&#xff0c;我们的生活越来越多地存储在各种设备上。系统崩溃、意外删除或恶意病毒都可能使您的宝贵数据瞬间消失。这就是数据恢复工具的用武之地。 十大电脑数据恢复软件排行 这些…