vue 使用openlayers加载图片,并实现图片上标点,点击弹窗

vue 使用openlayers加载图片,并实现图片上标点,点击弹窗

  • 安装
npm install ol@7.5.1 --save
  • vue组件

<template><div class="generalized"><div id="map" ref="myMap" style="width: 100%; height: 100%"></div><!-- 弹窗 --><div v-if="isShowPopup" class="popup" :style="{ left: left + 'px', top: top + 'px' }"><div class="p-header">{{ selectRow.name }}<div class="close" @click="isShowPopup = false">x</div></div><div class="p-content"><div class="p-row"><span>点位信息1:</span><span>1111</span></div><div class="p-row"><span>点位信息2:</span><span>2222</span></div></div></div><!-- --></div>
</template><script>
import 'ol/ol.css'
import Map from 'ol/Map'
import View from 'ol/View'
import { Point } from 'ol/geom'
import * as olInteraction from 'ol/interaction'
import DragRotateAndZoom from 'ol/interaction/DragRotateAndZoom'
import ImageLayer from 'ol/layer/Image'
import { ImageStatic } from 'ol/source'
import { getCenter } from 'ol/extent'
import { Projection } from 'ol/proj'
import { Icon, Style, Text } from 'ol/style'
import Fill from 'ol/style/Fill'
import Feature from 'ol/Feature'
import Stroke from 'ol/style/Stroke'//导入相关模块
import { Tile as TileLayer, Vector as VectorLayer } from 'ol/layer'
import { TileWMS, Vector as VectorSource } from 'ol/source'
export default {data() {return {map: null, // map地图imgy: '',imgx: '',// 图标管理器iconLayer: '',// 图标集合featureList: [],// 点位列表pointsList: [{x: 157,y: 616,zIndex: 2,icon: require('../../assets/marker1.png'),name: '点位1',pointId: 1,alarmFlag: false,},{x: 157,y: 686,zIndex: 2,icon: require('../../assets/marker2.png'),name: '点位2',pointId: 2,alarmFlag: false,},],left: 0,top: 0,isShowPopup: false,selectRow: {},}},mounted() {this.initMap()},methods: {/*** 初始化地图*/initMap() {// 图片的宽高this.imgy = 992this.imgx = 3557let extent = [0, 0,  this.imgx, this.imgy]let projection = new Projection({code: 'xkcd-image',units: 'pixels',extent: extent,})this.map = new Map({//地图容器IDtarget: 'map',interactions: olInteraction.defaults().extend([new DragRotateAndZoom()]),//引入地图layers: [new ImageLayer({source: new ImageStatic({url: require('@/assets/要加载的图片.jpg'),projection: projection,imageExtent: extent,}),}),],view: new View({projection: projection,center: [this.imgx * 0.5, this.imgy * 0.6],// 当前缩放倍数zoom: 2.5,// 最大缩放倍数maxZoom: 7,// 最小缩放倍数minZoom: 1,}),})/*** 添加图标*/this.pointsList.forEach((item) => {this.addDevicePoint(item)})const vectorSource = new VectorSource()this.iconLayer = new VectorLayer({source: vectorSource,})// 将图标数组添加到图层中this.iconLayer.getSource().addFeatures(this.featureList)// 添加图层this.map.addLayer(this.iconLayer)this.mapClick()},// 添加图标addDevicePoint(item) {// 设置图片位置const iconFeature = new Feature({geometry: new Point([item.x, item.y]),})// 设置样式,这里使用图片iconFeature.setStyle([new Style({image: new Icon({// 指定锚 x 值的单位。的值'fraction'表示 x 值是图标的一部分。的值'pixels'表示以像素为单位的 x 值。anchorXUnits: 'fraction',// 左下角为原点anchorOrigin: 'bottom-left',anchorYUnits: 'fraction',anchor: [0.5, 0],src: item.icon,scale: 0.6,}),zIndex: item.zIndex,}),new Style({text: new Text({text: '',font: '14px Microsoft YaHei',offsetY: -15,offsetX: 15,padding: [5, 10, 5, 15],textAlign: 'left',backgroundFill: new Fill({color: item.alarmFlag ? 'rgba(249, 88, 87, 0.5)' : 'rgba(0,111,255,0.5)', //提示背景色}),fill: new Fill({color: '#fff',}),}),zIndex: item.zIndex,}),])// 给图层设置设备图标name和id属性,用作独立 区分iconFeature.name = item.nameiconFeature.id_ = item.pointId// 将图片Feature添加到Sourcethis.featureList.push(iconFeature)},// 监听地图点击事件mapClick() {var _this = thisthis.map.on('singleclick', (evt) => {console.log(evt.coordinate, evt)this.left = evt.pixel_[0]this.top = evt.pixel_[1]var feature = _this.map.forEachFeatureAtPixel(evt.pixel, function (feature) {return feature})if (feature) {var id_ = feature.id_this.pointsList.forEach((element) => {if (element.pointId == id_) {this.selectRow = element}})console.log(id_)} else {this.selectRow = {}}this.isShowPopup = feature ? true : falseconsole.log('feature:', feature)})},},
}
</script><style lang="less" scoped>
.generalized {width: 100%;height: 100%;position: relative;
}.popup {position: absolute;padding: 5px;left: 0px;top: 0px;width: 140px;height: auto;background: #2a76d8;color: #fff;border-radius: 5px;.p-header {font-size: 14px;padding: 5px 5px;position: relative;.close {position: absolute;right: -5px;top: -5px;font-size: 12px;padding: 0px 5px;color: #fff;cursor: pointer;}}.p-content {background: #fff;padding: 5px;border-radius: 5px;}.p-row {font-size: 12px;color: #000;display: flex;justify-content: space-between;}
}.red {background: #ff1b1b;
}
</style>

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

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

相关文章

Hadoop3:MapReduce中的Partition原理及自定义Partition

一、默认Partition分区配置 以WC案例来进行验证。 1、设置setNumReduceTasks 修改的代码 这行代码&#xff0c;确定了reduceTask的数量&#xff0c;也确定了分区逻辑 在mapper文件中&#xff0c;打上断点 计算分区的代码 这里会对每一个kv进行计算&#xff0c;然后&#…

连获殊荣,天润融通以AI技术重塑企业客户联络体验!

天润融通又获奖了。 2024年3月22日&#xff0c;「ToB行业头条」联合3W集团共同举办的「2024ToB头条行业大会」在北京举行。 为表彰在过去一年中表现卓越、对行业发展作出显著贡献的企业、产品和数字化转型案例&#xff0c;大会颁布了ToB年度榜单【2023中国ToB行业影响力价值榜…

2024年一年一度的618正式结束了,苹果与华为手机销量看看谁是大赢家?

一年一度的618正式结束了&#xff0c;各品牌基本上都发布了相应的战报。但是要告诉大家一点看战报要看定语&#xff0c;定语最少的才是真正的第一。现在给大家汇总下京东平台的数据&#xff0c;看看谁是最大赢家&#xff0c;谁又是国产荣光。注&#xff1a;所有数据截至6月18日…

虚拟现实环境下的远程教育和智能评估系统(十)

VR部署测试&#xff0c;采集眼动数据&#xff1b; 经VR内置Camera采集眼睛注视位置后&#xff0c;输出.txt形式的眼动结果&#xff1a; 经处理后&#xff0c;将射线方向和位置投影到视频屏幕二维坐标的位置&#xff1a; 在视频中可视化如下&#xff1a;

从治理到“智”理,打造新一代金融数据体系

摘要&#xff1a;长期以来&#xff0c;很多金融机构的数据治理效果一直不尽人意&#xff0c;这已经成为金融科技公认的重要需求与固有难题。以大模型为代表的新一代人工智能有望彻底改变这种状态&#xff0c;它通过以自然语言而非专业技术驱动的人机交互界面&#xff0c;以及对…

[AIGC] MyBatis-Plus中如何使用XML进行CRUD操作?

在MyBatis-Plus中&#xff0c;我们可以非常方便地使用XML进行CRUD&#xff08;创建、读取、更新、删除&#xff09;操作。以下是一些基本步骤和示例&#xff0c;希望能帮助到还在初学阶段的您。 文章目录 1. 创建Mapper接口2. 创建Mapper XML 文件3. 调用Mapper方法 1. 创建Ma…

森林之下延迟高如何处理 森林之下联机卡顿的解决方法

森林之下是一款结合了农场模拟、恐怖生存的游戏&#xff0c;玩家需要管理一个被“闹鬼的树林”包围的农场&#xff0c;种植农作物&#xff0c;拯救、驯服、饲养动物&#xff0c;探索被诅咒的森林&#xff0c;并且收集物品来破除诅咒。这款游戏目前已经开放了demo&#xff0c;不…

串口接收异常,接收管脚无法被拉低

场景&#xff1a;调试氧气浓度芯片AOF1010&#xff0c;此芯片通过串口通信&#xff0c;通电后自动通过串口上传数据 问题&#xff1a;环境搭好&#xff0c;通电&#xff0c;没有进串口接收中断 推测&#xff1a; 1&#xff09;数据没有发送过来&#xff1f; 通过逻辑分析仪检…

面向对象复习(java)

文章目录 包在本地 cmd 编译包规则import(导包&#xff09; thisthis 访问实例方法this 访问构造方法 supersuper 访问父类构造器super访问父类方法super 访问父类属性 构造方法访问权限封装继承细节方法重写(覆盖)子父类同名变量问题关于子父类方法的继承问题 多态向上转型和向…

Ubuntu安装Vins-Fusion(1) —— Ubuntu18.04安装vins

目录 前言 1、准备1.1 安装ROS1.2 安装 Ceres Solver 2、安装 VINS-Fusion3、测试&#xff08;EuRoC MAV 数据集&#xff09;3.1、下载数据集3.2 Monocualr camera IMU3.3 Stereo cameras IMU3.4 Stereo cameras 参考 前言 VINS-Fusion 是一种基于优化的多传感器状态估计器&…

Python接口测试实战之搭建自动化测试框架

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一.数据分离:从Excel中读取数据 之前的用例中&#xff0c;数据直接写在代码文件里&#xff0c;不…

C++初学者指南第一步---7.控制流(基础)

C初学者指南第一步—7.控制流&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---7.控制流&#xff08;基础&#xff09;1.术语:表达式/语句Expressions表达式Statements语句 2.条件分支3.Switching(切换):基于值的分支4.三元条件运算符5.循环迭代基于范围的循环   C…

Java基础 - 练习(三)打印空心菱形

Java基础练习 打印空心菱形&#xff0c;先上代码&#xff1a; public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星个数的时候和行有关for (int j 1; j <…

linux配置Vnc Server给Windows连接

1. linux 安装必要vnc server和桌面组件 sudo apt -y install tightvncserversudo apt install xfce4 xfce4-goodies2. linux 配置vncserver密码 #bash vncserver参考: https://cn.linux-console.net/?p21846#google_vignette 3. 将启动桌面命令写入.vnc/xstartup # .vnc/x…

fs模块(一)

FS FS 是file system的缩写&#xff0c;fs 模块可以实现与硬盘的交互&#xff0c;例如文件的创建、删除、重命名、移动&#xff0c;还有文件内容的写入、读取&#xff0c;以及文件夹的相关操作。在 Node.js 种&#xff0c;fs 模块提供了异步和同步两种方式操作文件。 基本使用…

TIME_WAIT的危害

前言 该文章主要讨论下TIME_WAIT的存在意义和潜在危害&#xff0c;以及解决措施。 具体内容 首先看一下下面这幅图 这幅图来自《TCP IP详解卷1&#xff1a;协议 原书第2版中文》TCP状态变迁图。 TIME_WAIT存在意义 可靠的终止TCP连接。 保证让迟来的TCP报文有足够的时间被…

【YOLOv10改进[注意力]】添加注意力CascadedGroupAttention(2023) + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将进行使用注意力CascadedGroupAttention的实践,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 CascadedGroupAttention 二 使用注意力CascadedGroupAttention 1 整体…

KVB投资安全小知识:你知道情绪面、技术面与基本面的关系吗?

摘要&#xff1a;当涉及到金融市场分析时&#xff0c;情绪面、技术面和基本面是三个重要的方面。它们相互交织&#xff0c;共同影响着市场的走势和投资者的决策。下面我来详细解释它们之间的关系。 情绪面的影响 情绪面指的是投资者情绪和市场情绪&#xff0c;它反映了市场参与…

springboot+vue+mybatis酒店管理系统+PPT+论文+讲解+售后

基于Spring框架的小型宾馆旅客信息管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户二部分&#xff0c;管理员&#xff1a;首页、个人中心、用户管理、客房类型管理、客房信息管理、客房预订管理、入住登记管理、退房评价管理、系统管理&a…

深度解析服务发布策略之滚动发布

目录 什么是滚动发布 滚动发布的优点 滚动发布的注意事项 滚动发布的实现步骤 小结 在软件开发和运维中&#xff0c;发布新版本是一个风险较高的操作。为了降低风险&#xff0c;提高发布的稳定性和可靠性&#xff0c;通常会采取一系列的技术策略&#xff0c;其中滚动发布&…