vue3 vite openlayers 实现自定义飞机随机转向、显示飞行轨迹线,切换飞机状态(更换飞机颜色)、轨迹线颜色随机更改等

发布时间:2026/8/28 13:09:08

vue3 vite openlayers 实现自定义飞机随机转向、显示飞行轨迹线,切换飞机状态(更换飞机颜色)、轨迹线颜色随机更改等
1、在这篇博客的基础上点击进入2、将App.vue中的内容替换为如下所示templatedivclasswrap_button/divdivclassmaprefmapDomidmap/divh1 idmsg/h1/templatescript setupimport{onMounted,ref}fromvue;importMapfromol/Map;import{TileasTileLayer,VectorasVectorLayer}fromol/layer;import{VectorasVectorSource}fromol/source;importViewfromol/View;importXYZfromol/source/XYZ;importplanefrom/assets/images/plane1.png;importyellow_planefrom/assets/images/yellow_plane1.png;importOverlayfromol/Overlay;importFeaturefromol/Feature.js;importPointfromol/geom/Point.js;import{Style,Circle,Fill,Stroke}fromol/style;importDragBoxfromol/interaction/DragBox;importLineStringfromol/geom/LineString.js;importPolygonfromol/geom/Polygon.js;import{toLonLat}fromol/projimport{ClusterasClusterSource}fromol/source.js;import{Icon,Text}fromol/style.js;import{Select}fromol/interactionimport{singleClick}fromol/events/conditionconstmapObjref(null);constmapDomref(null);constmyLocationref(null);letlast_location[];lettrack_locations[];// 设置自定义打点要素constsetDIYmarkers(location){letangel0;if(last_location.length!0){letxlocation[0]-last_location[0];letylocation[1]-last_location[1];angelMath.atan(y/x)*(180/Math.PI);}if(myLocation.value!null){mapObj.value.removeOverlay(myLocation.value);}consteldocument.createElement(img);el.srcMath.random()0.5?plane:yellow_plane;el.style.width40px;el.style.height40px;el.style.cursorpointer;el.style.transformrotate(angeldeg);consttop_right_divdocument.createElement(div);top_right_div.style.positionabsolute;top_right_div.style.width30px;top_right_div.style.height30px;top_right_div.style.right0;top_right_div.style.top-30px;top_right_div.style.backgroundColorpink;constbottom_rightdocument.createElement(div);bottom_right.style.positionabsolute;bottom_right.style.width30px;bottom_right.style.height30px;bottom_right.style.right-30px;bottom_right.style.bottom0px;bottom_right.style.backgroundColorblue;bottom_right.onclick(e){console.log(这个可以有,e);};constouter_divdocument.createElement(div);outer_div.style.positionrelative;outer_div.style.width40px;outer_div.style.height40px;outer_div.appendChild(el);outer_div.appendChild(top_right_div);outer_div.appendChild(bottom_right);constmarkernewOverlay({element:outer_div,// 要显示的元素position:location,// 地图投影的位置offset:[-20,-30],// 元素显示的像素偏移量// autoPan: true, // 禁用自动平移 即飞机离开视野后});myLocation.valuemarker;mapObj.value.addOverlay(marker);};// 创建一个矢量图层用于显示线段constvectorLayernewVectorLayer({source:newVectorSource(),});letcount0;// 创建一个线段要素constnew_line_feature(){letlineStringnewLineString(track_locations);constlineFeaturenewFeature({geometry:lineString,});// 设置线段的样式lineFeature.setStyle(newStyle({stroke:newStroke({color:Math.random()0.5?red:pink,width:5,}),}));returnlineFeature;};// 清除线段functionclearLine(){vectorLayer.getSource().clear();}// 重新添加线段functionaddLine(){vectorLayer.getSource().addFeature(new_line_feature());}constcenter_point[115.981615,40.45238];constcenter_point1[115.981615,40.46238];setInterval((){last_location[...center_point];if(track_locations.length10){letremaining_datatrack_locations.slice(-10);track_locations[...remaining_data];}track_locations[...track_locations,last_location];center_point[0]center_point[0]Math.random()*0.001;center_point[1]center_point[1]Math.random()*0.001;setDIYmarkers(center_point);clearLine();addLine();countcount1;},1000);constofflineMapLayernewTileLayer({source:newXYZ({url:http://127.0.0.1:3000/{z}/{x}/{y}.jpg,// 设置本地离线瓦片所在路径}),});// 创建一个矢量图层constpoint_vectorSourcenewVectorSource();constpoint_vectorLayernewVectorLayer({source:point_vectorSource,});// 创建一个点要素constmy_pointnewFeature({geometry:newPoint([115.981615,40.45238]),// 初始位置与地图中心点一致});// 设置点的样式为红色constpointStylenewStyle({image:newCircle({radius:10,// 点的大小fill:newFill({color:red,// 填充颜色为红色}),}),});my_point.setStyle(pointStyle);point_vectorSource.addFeature(my_point);// 初始化地图constinitMap(){mapObj.valuenewMap({target:mapDom.value,// 地图容器layers:[offlineMapLayer,vectorLayer,point_vectorLayer,],view:newView({center:[115.981615,40.45238],// 地图中心点zoom:14,// 缩放maxZoom:18,minZoom:10,projection:EPSG:4326,// 坐标系}),});};onMounted((){initMap();});/scriptstyle scoped langless.wrap_button{//position: relative;position:absolute;top:0;left:0;right:0;width:100%;height:50px;display:flex;align-items:center;justify-content:space-between;z-index:1;background-color:#fff;text-align:center;div{flex:1;border-left:1px solid black;}}#map{width:100vw;height:100vh;}/style3、显示结果如下

相关新闻

Firecrawl 网页抓取完整指南:从单页到整站的数据提取

Firecrawl 网页抓取完整指南:从单页到整站的数据提取

2026/8/28 12:59:08

Firecrawl 网页抓取完整指南:从单页到整站的数据提取 【免费下载链接】firecrawl The context API to search, scrape, and interact with the web at scale. 🔥 项目地址: https://gitcode.com/GitHub_Trending/fi/firecrawl 自己写爬虫的人都知…

MCP 测试完整指南:如何从零跑通 AI 技能评估

MCP 测试完整指南:如何从零跑通 AI 技能评估

2026/8/28 12:59:08

MCP 测试完整指南:如何从零跑通 AI 技能评估 【免费下载链接】skills Public repository for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills GitHub_Trending/skills3/skills 自带了一套 MCP 测试工具:给它 10 道有…

一句话出折线图:Hermes Agent 智能数据分析与数据可视化快速上手

一句话出折线图:Hermes Agent 智能数据分析与数据可视化快速上手

2026/8/28 12:59:08

一句话出折线图:Hermes Agent 智能数据分析与数据可视化快速上手 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent 拿到一份月度销售数据,清洗、写画图脚本&#xf…

MATLAB多元线性回归全流程:从regress函数到模型诊断与优化

MATLAB多元线性回归全流程:从regress函数到模型诊断与优化

2026/8/28 14:09:11

1. 项目概述:从数据到洞察,回归分析的价值 在数据分析、工程建模乃至金融预测的日常工作中,我们常常面临一个核心问题:如何量化一个或多个因素对某个结果的影响程度?比如,房价受到面积、地段、楼层、房龄等…

蓝桥杯国赛“答疑”题解:贪心算法在调度问题中的实战应用

蓝桥杯国赛“答疑”题解:贪心算法在调度问题中的实战应用

2026/8/28 14:09:11

1. 项目概述:从“答疑”真题看蓝桥杯国赛的实战思维 最近有不少朋友在准备蓝桥杯国赛,后台私信里关于历年真题的讨论也多了起来。其中,2020年第十一届国赛的“答疑”这道题,被反复提及。很多人第一眼看到题目描述,觉得…

具身智能竞争:数据管线与VLA推理模型的双轮驱动

具身智能竞争:数据管线与VLA推理模型的双轮驱动

2026/8/28 14:09:11

具身智能下一场竞争,是数据,还是“具身 o1 时刻”?这个问题最近被反复讨论。从产业投入看,大家都在卷数据:采集车、遥操作平台、仿真环境、标注团队,规模一个比一个大。从模型路线看,业界又在普…

机器学习解释方法评估:从静态数据到演化数据的挑战与工程实践

机器学习解释方法评估:从静态数据到演化数据的挑战与工程实践

2026/8/28 14:09:11

解释方法(explanation methods)在机器学习实践里算是一个又关键又容易出问题的环节。很多团队把模型准确率做上去了,开始给业务方解释“为什么模型这个月推荐的东西和上个月不一样”,结果发现解释结果对不上、不稳定、没法验收。静…

C语言字符串函数全解析:从基础原理到安全编程实践

C语言字符串函数全解析:从基础原理到安全编程实践

2026/8/28 14:09:11

1. 从“Hello, World!”到字符串处理:为什么C语言字符串函数是基本功如果你写过C语言的“Hello, World!”,那么恭喜你,你已经接触了C语言中最基础也最核心的数据类型之一:字符串。只不过,在C语言的世界里,字…

Python SciPy linprog 线性规划实战:从建模到求解全解析

Python SciPy linprog 线性规划实战:从建模到求解全解析

2026/8/28 13:59:10

1. 项目概述:从实际问题到线性规划模型 在数据分析、资源调度、生产计划乃至投资组合优化等众多领域,我们常常会遇到一个核心问题:如何在有限的资源约束下,找到一组决策变量的最优值,使得某个目标(如利润最…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/28 7:34:42

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

2026/8/28 0:08:32

当AI助手能够独立完成从职位匹配、简历定制到面试准备的全链路求职流程时,求职不再是一场信息战,而是一场工程化战役。框架概述:本地运行的AI求职引擎这是一个构建在Claude Code之上的开源AI求职框架,核心理念是"在工作者的机…

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

2026/8/28 0:08:32

1. 问题现象 在 Godot 4 仿 agar.io 的 2D 项目中,相机缩放设计为「由球组整体尺寸决定」,世界可见高度恒定,窗口只作为视口裁剪。默认小窗口 1280x720 时相机高度正常;但窗口最大化到 2940x1912 后,视角被明显拉远、…

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

2026/8/28 0:08:32

1. 缘起:从校园到赛场,我的软件测试之路几年前,我还是一个在校园里对着Java课本和“Hello World”程序挠头的普通学生。软件测试对我来说,只是一个在开发流程末尾、用鼠标点点按钮的模糊概念。直到我偶然在学校的公告栏上看到了“…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…