vue3+openLayers触摸事件显示弹窗

news2024/9/21 22:35:38
<template>
    <!--地图-->
    <div class="distributeMap" id="distributeMap"></div>
    <!--弹窗-->
    <section ref="popup" id="popupDiv" class="popup">
      {{ state.popupParams.name }}
    </section>
</template>
<script lang="ts" setup>
import { onMounted, reactive, ref } from "vue";
import { Feature, Map, Overlay, View } from "ol";
import OSM from "ol/source/OSM";
import "ol/ol.css";
import TileLayer from "ol/layer/Tile";
import XYZ from "ol/source/XYZ";
import { fromLonLat } from "ol/proj";
import { Point } from "ol/geom";
import CircleStyle from "ol/style/Circle";
import { Fill, Icon, Style } from "ol/style";
import VectorSource from "ol/source/Vector";
import VectorLayer from "ol/layer/Vector";
import { useRouter } from "vue-router";
const $router = useRouter();
let popup = ref(null) as any;
const state = reactive({
  map: null as any,
  popupParams: {} as any, //弹窗参数
  overlay: null as any, //弹窗overlay
});
/**
 * 模块名:初始化地图
 * 代码描述:
 * 作者:Fant
 * 创建时间:2024/07/19 16:03:21
 */
const getOpenLayersMap = () => {
  let layer = new TileLayer({
    source: new XYZ({
      url: "http://t4.tianditu.com/DataServer?T=vec_w&tk=4a76fd399e76e3e984e82953755c3410&x={x}&y={y}&l={z}",
      crossOrigin: "anoymous",
    }),
  });
  state.map = new Map({
    target: "distributeMap",
    layers: [layer],
    view: new View({
      projection: "EPSG:4326", //使用WGS 84坐标系
      center: [114.31, 30.62048],
      zoom: 1,
    }),
  });
};
/**
 * 模块名:添加点标记
 * 代码描述:
 * 作者:Fant
 * 创建时间:2024/07/20 15:59:48
 */
const mapPoint = (data: any) => {
    // 创建点特征
  const pointFeature = new Feature({
    name: "点位",
    id: 1,
    geometry: new Point([114.31, 30.62048]),
  });
  //创建style
  pointFeature.setStyle(
    new Style({
      image: new Icon({
        src: "https://smart-garden-manage.oss-cn-chengdu.aliyuncs.com/shexiangtou.png",
        scale: 0.3, //图片大小比例
      }),
    })
  );
  // 创建矢量图层
  const vectorSource = new VectorSource({
    features: [pointFeature], // 添加点特征到图层
  });
  const vectorLayer = new VectorLayer({
    source: vectorSource,
  });

  state.map.addLayer(vectorLayer);
};

/**
 * 模块名:实例化弹窗overPlay 地图覆盖元素
 * 代码描述:
 * 作者:Fant
 * 创建时间:2024/07/24 10:49:19
 */
const addOverPlay = () => {
  state.overlay = new Overlay({
    element: document.getElementById("popupDiv") as any,
    positioning: "bottom-center",
    stopEvent: false,
    autoPan: true,
    offset: [0, -20],
  });
  state.map.addOverlay(state.overlay);
};
/**
 * 模块名:地图鼠标移入事件
 * 代码描述: 触摸时显示标点的设备名字
 * 作者:Fant
 * 创建时间:2024/07/24 10:32:46
 */

const iconTouchstart = () => {
  state.map.on("pointermove", (e: any) => {
    let point = state.map.forEachFeatureAtPixel(
      e.pixel,
      (feature: any) => feature
    ) as any;
    //如果没有点击到标记 这里会打印出undefined
    console.log(point);
    if (point) {
      //把鼠标光标改一下
      state.map.getTargetElement().style.cursor = "pointer";
      // 显示弹出框
      state.overlay.getElement().style.display = "block";
      //拿到标点参数
      let params = point.getProperties();
      console.log("鼠标移入当前标点参数", params);
      state.popupParams = params;
      // 设置弹窗位置
      let coordinates = point.getGeometry().getCoordinates();
      state.overlay.setPosition(coordinates);
    } else {
      //隐藏弹出框
      state.overlay.getElement().style.display = "none";
      state.popupParams = {};
    }
  });
};
onMounted(() => {
  getOpenLayersMap();
  mapPoint();
  iconTouchstart();
  addOverPlay();
});
</script>
<style lang="scss" scoped>
.popup {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #fff;
  color: #8d919a;
  padding: 6px;
  border-radius: 5px;
}

</style>

在这里插入图片描述

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

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

相关文章

OpenGauss和GaussDB有何不同

OpenGauss和GaussDB是两个不同的数据库产品&#xff0c;它们都具有高性能、高可靠性和高可扩展性等优点&#xff0c;但是它们之间也有一些区别和相似之处。了解它们之间的关系、区别、建议、适用场景和如何学习&#xff0c;对于提高技能和保持行业敏感性非常重要。本文将深入探…

电脑ip地址怎么改?修改技巧大放送!

在现代网络环境中&#xff0c;IP地址的设置对于连接互联网和局域网至关重要。无论是因为网络配置的需求&#xff0c;还是出于隐私和安全考虑&#xff0c;学会更改电脑的IP地址是一项有用的技能。本文将介绍电脑ip地址怎么改的3种方法&#xff0c;帮助您根据不同需求灵活调整网络…

Go并发GMP调度模型

如何知道一个对象是分配在栈上还是堆上&#xff1f; Go和C不同&#xff0c;Go的逃逸分析是在编译器完成的&#xff1b;go局部变量会进行逃逸分析。如果变量离开作用域后没有被引用&#xff0c;则优先分配到栈上&#xff0c;否则分配到堆上。那么如何判断是否发生了逃逸呢&#…

VMWare 16 安装

1、下载地址 VMware-workstation-full-16.2.4-20089737 2、激活码 VM16&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 3、安装步骤 修改一下【安装位置】&#xff0c;将【增强型键盘驱动程序(需要重新引导以使用此功能()此功能要求主机驱动器上具有 10MB 空间。】【将 wMware…

【LLM】-07-提示工程-聊天机器人

目录 1、给定身份 1.1、基础代码 1.2、聊天机器人 2、构建上下文 3、订餐机器人 3.1、窗口可视化 3.2、构建机器人 3.3、创建JSON摘要 利用会话形式&#xff0c;与具有个性化特性&#xff08;或专门为特定任务或行为设计&#xff09;的聊天机器人进行深度对话。 在 Ch…

钉钉 ai卡片 stream模式联调

sdk连接 新建卡片模板下载node.js sdkconfig.json 配置应用信息 启动项目npm i npm run build npm run start连接成功 获取卡片回调 注册卡片回调事件调用https://api.dingtalk.com/v1.0/card/instances 创建卡片实例&#xff0c;返回实例Id //参数结构 {"cardTempla…

同花顺股票数据逆向:Cookie加密和Hook注入

&#x1f50d; 思路与步骤详解 &#x1f310; 抓包解析接口 首先&#xff0c;我们使用抓包工具对同花顺的股票数据接口进行分析&#xff0c;发现其中的Cookie参数经过了加密处理。 接下来&#xff0c;我们需要深入挖掘这些加密参数的生成位置。 &#x1f6e0; hook注入 对于…

信号的运算

信号实现运算&#xff0c;首先要明确&#xff0c;电路此时为负反馈电路&#xff0c;当处于深度负反馈时&#xff0c;可直接使用虚短虚断。负反馈相关内容可见&#xff1a;放大电路中的反馈_基极反馈-CSDN博客https://blog.csdn.net/qq_63796876/article/details/140438759 一、…

【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据

基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据 【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据U-Mamba介绍数据集下载环境准备数据集准备运行其他2D网络结构UMambaBot的模型结构UMambaEnc的模型结构 【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据 …

matlab仿真 数字基带传输(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all Fd1;%符号采样频率 Fs10;%滤波器采样频率 r0.2;%滤波器滚降系数 delay4;%滤波器时延 [num,den]rcosine(Fd,Fs,defau…

使用LLaMA-Factory对Llama3-8B-Chinese-Chat进行微调

文章目录 模型及数据&#xff1a;模型下载数据 LLaMA-Factory启动拉取代码启动webui 模型训练数据导入数据预览设置模型路径配置参数及参数的保存开始训练 过程观察加载模型、对话模型导出、再次加载 模型及数据&#xff1a; 模型下载 使用基于中文数据训练过的 LLaMA3 8B 模…

Java基本数据类型与String类型的转换

目录 基本数据类型和Strng类型的转换 第一种方法 第二种方法 将字符串转成字符 注意事项 本章练习题 题1 题2 基本数据类型和Strng类型的转换 第一种方法 使用号和" "即可完成转换 第二种方法 第二种方法是通过基本类型的包装类调用parsexx方法 将字符…

计算机视觉与图像分类:技术原理、应用与发展前景

引言 随着科技的不断进步&#xff0c;计算机视觉逐渐成为了人工智能领域的重要分支之一。计算机视觉旨在让计算机具备“看懂”图像和视频的能力&#xff0c;从而理解和分析视觉信息。作为计算机视觉中的一个关键任务&#xff0c;图像分类涉及将输入的图像归类到预定义的类别中&…

Ubuntu20.04安装Elasticsearch

简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一套开源的日志管理和分析工具&#xff0c;用于收集、存储、分析和可视化日志数据。以下是如何在Ubuntu服务器上安装和配置ELK堆栈以便发送和分析日志信息的步骤。 安装Elasticsearch 首先&#xff0c;安…

使用 vSphere vCenter 管理 ESXi

使用 vSphere vCenter 管理 ESXi 1、新建数据中心 在 vSphere Client 中&#xff0c;左上角图标&#xff0c;进入 “清单”&#xff0c;鼠标右键名称&#xff0c;新建数据中心。 输入数据中心名称&#xff0c;我这里直接使用默认值&#xff0c;点击确定。 2、往数据中心中添加…

html+css 边框滑动按钮效果

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

QT:控件圆角设置、固定窗口大小

实现控件圆角度设置//使用的是setStyleSheet方法 //改变的控件是QTextEdit&#xff0c;如果你想改变其他控件&#xff0c;将QTextEdit进行更换 this->setStyleSheet("QTextEdit{background-color:#FFFFFF;border-top-left-radius:15px;border-top-right-radius:15px;bo…

Qt多语言功能实现

本文介绍Qt多语言功能实现。 应用程序多语言支持是常用功能&#xff0c;比如产品需要出口到不同语种的国家。采用Qt的多语言支持工具可以方便实现应用程序的多语言功能。本文以中英文语言切换为例&#xff0c;简要介绍Qt的多语言功能实现。 1.界面设计 界面设计需要考虑使用…

AWS 中国区同账号0etl integration配置步骤

中国区的AWS支持0etl integration已经一段时间了&#xff0c;目前北京区和宁夏区均支持。中文翻译为零ETL集成。 当前支持的引擎是Aurora MySQL数据托管式导出到Redshift. Global区域支持Aurora PostgreSQL. 中国区后续也会陆续出现此功能的。 功能介绍文档&#xff1a; 【1…

读取DS18B20温度、测量环境温度信息(单只DS18B20写法)

一、前言 1.1 功能介绍 随着工业自动化和智能家居技术的不断发展&#xff0c;精确测量和监控环境温度变得尤为重要。在许多应用场景中&#xff0c;如仓库管理、温室控制、空调系统以及工业制造过程中&#xff0c;实时准确地获取环境温度信息对于保障设备正常运行、提高能源利…