当前位置: 首页 > news >正文

vue openlayer创建地图弹框overlay

背景:

地图上展示一个overlay,使用的技术框架是vue+openlayer

效果展示:

主要是这个地图弹框:

核心代码:

<template>
<!-- overlay --><div id="overlay" class="ol-popup" @click="closePop_prediction"><div class="pop_titleBox"><img alt="" src="../assets/img/port.png"><h1>{{ routeState.endPoint }}</h1></div><div class="content_prediction"><p><span class="label">船舶名称:</span><span v-if="checkboxState.shipName" class="text">{{ checkboxState.shipName.cnName || checkboxState.shipName.names || "--" }}/{{ checkboxState.shipName.mmsi || "--" }}</span></p><p><span class="label">总里程:</span><span class="text">{{ state2.show_l_data.totalDistance || "--" }}nm</span></p><p><span class="label">已行驶里程/时长:</span><span class="text">{{ state2.show_l_data.traveledDistance || "--" }}nm/{{ state2.show_l_data.traveledTime || "--" }}h</span></p><p><span class="label">剩余里程/时长:</span><span class="text">{{ state2.show_l_data.remainingDistance || "--" }}nm/{{ state2.show_l_data.remainingTime || "--" }}h</span></p><p><span class="label">进度百分比:</span><span class="text" style="color: #1FC37F">{{ Math.ceil(state2.show_l_data.progress * 100) || "--" }}%</span></p><p><span class="label">预抵时间:</span><span class="text">{{ state2.show_l_data.eta || "--" }}</span></p></div></div>
</template>

核心代码逻辑:

<script setup>
import { nearestPointOnLine } from "@turf/nearest-point-on-line";
import { parse } from 'wellknown';
import * as turf from "@turf/turf";
import Overlay from 'ol/Overlay';
import { fromLonLat, transform, toLonLat } from "ol/proj";// 3.overlay
const getOverlay = (data) => {const map = getMap.mapData.GlobalMap;state.overlay = new Overlay({element: document.getElementById("overlay"),positioning: "bottom-center",stopEvent: false,offset: [0, -40],autoPan: false,autoPanAnimation: {duration: 0}});map.addOverlay(state.overlay);const geoJsonFromWKT_point = parse(data.geom);const coordinate = geoJsonFromWKT_point.coordinates;const transformCoordinate = transform(coordinate, 'EPSG:4326', 'EPSG:3857');state.overlay.setPosition(transformCoordinate);// map.on("singleclick", (evt) => {//   console.log('ddd', evt.coordinate);//   const coordinate = evt.coordinate // 获取坐标//   state.overlay.setPosition(coordinate)// })
}
</script>

写到这儿功能基本就实现了。。。


文章转载自:
http://caucus.kjawz.cn
http://caodaism.kjawz.cn
http://amy.kjawz.cn
http://audible.kjawz.cn
http://beseechingly.kjawz.cn
http://amethopterin.kjawz.cn
http://canonically.kjawz.cn
http://augend.kjawz.cn
http://birchen.kjawz.cn
http://cheapshit.kjawz.cn
http://breadbasket.kjawz.cn
http://bored.kjawz.cn
http://bifolium.kjawz.cn
http://anaphylactic.kjawz.cn
http://cherenkov.kjawz.cn
http://beautification.kjawz.cn
http://cerci.kjawz.cn
http://cheaply.kjawz.cn
http://chagrin.kjawz.cn
http://broiling.kjawz.cn
http://antecessor.kjawz.cn
http://adam.kjawz.cn
http://activex.kjawz.cn
http://admeasure.kjawz.cn
http://centripetal.kjawz.cn
http://caesardom.kjawz.cn
http://centesimal.kjawz.cn
http://castrametation.kjawz.cn
http://bluepencil.kjawz.cn
http://bulkiness.kjawz.cn
http://www.dtcms.com/a/281157.html

相关文章:

  • 【html常见页面布局】
  • [ROS 系列学习教程] ROS动作通讯(Action):通信模型、Hello World与拓展
  • k8s环境使用Operator部署Seaweedfs集群(下)
  • 【鸿蒙HarmonyOS】鸿蒙app开发入门到实战教程(三):实现一个音乐列表的页面
  • Flutter Socket 连接方案分析与适用场景
  • RestTemplate 实现后端 HTTP 调用详解
  • spring-ai-alibaba 多模态之音频
  • 前端Vue.js面试题(4)
  • 超详细 anji-captcha滑块验证springboot+uniapp微信小程序前后端组合
  • 如何定义一个只能在堆上或栈上生成对象的类
  • Python初学者笔记第十二期 -- (集合与字典编程练习题)
  • U-Boot 中增加 GIC-400中断服务程序
  • Copula理论:覆盖相关性分析、极值相依性、回归建模、时间序列预测、贝叶斯网络,R/Python双语言实现+AI编程辅助(科研绘图与结果呈现)
  • Nestjs框架: 数据库多租户模式与动态模块初探
  • Oracle日期时间函数说明及与MySql区别说明
  • 同济医院R语言训练营第三期开讲!上交大张维拓老师主讲
  • RabbitMQ工作流程
  • SQL学习记录01
  • 15.图像 模板轮廓检测
  • 李白周游记50篇
  • linux-develop
  • 基于Alpine构建MySQL镜像
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-129节(MySQL的安装)
  • 【前后端】Node.js 模块大全
  • 巨坑检查无误还报错is not mapped MappingException: Unknown entity:@Entity
  • DeepSWE:通过强化学习扩展训练开源编码智能体
  • 多层 `while` 循环中,`break` 的行为
  • ES2023 新特性解析_数组与对象的现代化操作指南
  • 二分查找栈堆
  • 【C语言进阶】字符函数和字符串函数的内部原理