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

openLayers实现实时轨迹

 代码实现了一个基于定时器的轨迹动画效果。

通过预定义的轨迹数据点,每2秒更新一次图标位置,并绘制红色半透明线段连接相邻点。首先在地图上创建图层并添加初始图标,然后使用定时器逐步更新图标坐标,计算航向角调整图标方向(与正北的夹角),同时在移动路径上生成线段特征对象。当遍历完所有轨迹点后自动清除定时器。该功能适用于可视化动态移动轨迹场景。

let trajectData = [[110, 30],[110.2, 30],[110.4, 30.2],[110.8, 30.4],[111, 31],[111.3, 31],[111.6, 31],[111.9, 31],[112, 31],[112.3, 31],[112.5, 31],[112.8, 31],[113, 31],[114, 31],[115.3, 32],[115.5, 32],[115.8, 31.8],[116, 31.4],[116.2, 31.1],[116.5, 30.5],[115, 30.2],[114, 29.8],[113, 29.6],[112, 29.4],[111, 30.2],[110, 30.4],[109, 30.6],[108, 31],
];
export function addTrajectory(id) {const layers = map.getLayers().getArray();let layer = layers.find((item) => item.values_.id === id);if (layer) {layer.getSource().clear();} else {layer = new LayerVector({source: new SourceVector({features: "",}),properties: {id: id,},});map.addLayer(layer);}let imgUrl = require("../assets/111.png");let iconFeature = new Feature({geometry: new Point([110, 30]),});let icon = new Icon({anchor: [120, 1],scale: 0.2,anchorXUnits: "pixels",anchorYUnits: "pixels",src: imgUrl,});iconFeature.setStyle(new Style({image: icon,}));// 添加到之前的创建的layer中去layer.getSource().addFeature(iconFeature);let i = 0;intervals = setInterval(() => {if (trajectData[i + 1]) {// 更改点的位置iconFeature.setGeometry(new Point(trajectData[i + 1]));let arc = 0;if ((trajectData[i + 1][0] - trajectData[i][0] >= 0 &&trajectData[i + 1][1] - trajectData[i][1] >= 0) ||(trajectData[i + 1][0] - trajectData[i][0] < 0 &&trajectData[i + 1][1] - trajectData[i][1] > 0)) {arc = Math.atan((trajectData[i + 1][0] - trajectData[i][0]) /(trajectData[i + 1][1] - trajectData[i][1]));} else if ((trajectData[i + 1][0] - trajectData[i][0] > 0 &&trajectData[i + 1][1] - trajectData[i][1] < 0) ||(trajectData[i + 1][0] - trajectData[i][0] < 0 &&trajectData[i + 1][1] - trajectData[i][1] < 0)) {arc =Math.PI +Math.atan((trajectData[i + 1][0] - trajectData[i][0]) /(trajectData[i + 1][1] - trajectData[i][1]));}icon.setRotation(arc); //设置航向角(与正北的夹角)// 创建矢量对象let feature = new Feature({geometry: new LineString([trajectData[i], trajectData[i + 1]]),});feature.setStyle(new Style({stroke: new Stroke({color: [255, 0, 0, 0.5],width: 4,}),}));layer.getSource().addFeature(feature);i++;} else {clearInterval(intervals);intervals = null;}}, 2000);
}

实时轨迹

相关文章:

  • 【HarmonyOS 5】出行导航开发实践介绍以及详细案例
  • 29.【新型数据架构】-边缘计算数据架构
  • 边缘计算网关提升水产养殖尾水处理的远程运维效率
  • Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)
  • 摆脱硬件依赖:SkyEye在轨道交通中的仿真应用
  • hbuildx运行uzapp项目初始化配置
  • day35-系统编程之网络编程IV及MQTT协议
  • 相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解
  • AI系统提示词:V0
  • PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
  • Chrome安装代理插件ZeroOmega(保姆级别)
  • [大A量化专栏] VMware (mac本地跑QMT)
  • Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
  • 详细介绍uni-app中Composition API和Options API的使用方法
  • 第8篇:数据库中间件的分布式事务解决方案与实践
  • 【芯片设计- RTL 数字逻辑设计入门 4.2 -- 组合逻辑赋值 + 时序逻辑状态保持】
  • Python基础语法全解:从入门到精通的简明指南
  • [Python学习日记-90] 并发编程之多线程 —— 线程理论
  • B站画质补完计划(4):SDR2HDR 让观感如临其境 Part.1
  • IBM官网新闻爬虫代码示例
  • 如何做企业网站规划/seo外包
  • wordpress和织梦架构/神马搜索seo优化排名
  • 京东网站建设策略/微信怎么做推广
  • 个人网站类型/推广app的单子都在哪里接的
  • 电子商务的网站建设分析/免费建站的平台
  • wordpress点击按钮复制文字内容/seo网站外链工具