openlayers 轨迹回放(历史轨迹),实时轨迹

2024-06-22 02:36

本文主要是介绍openlayers 轨迹回放(历史轨迹),实时轨迹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇介绍一下使用openlayers轨迹回放(历史轨迹),实时轨迹

1 需求

  • 轨迹回放(历史轨迹)
  • 实时轨迹

2 分析

主要是利用定时器,不断添加feature

  • 轨迹回放(历史轨迹),一般是一次性拿到所有坐标点,按照时间间隔不断循环添加feature
  • 实时轨迹,一般是通过websocket监听,不断获取最新坐标点,根据上报的频率,可能需要抽样

3 实现

<template><div id="map" class="map"></div>
</template><script setup lang="ts">
import { Feature, Map, View } from 'ol';
import { LineString, Point } from 'ol/geom';
import { Tile as TileLayer, Vector as VectorLayer } from 'ol/layer';
import { get } from 'ol/proj';
import { Vector as VectorSource, XYZ } from 'ol/source';
import { Circle, Fill, Icon, Stroke, Style } from 'ol/style';
import iconSrc from '@/assets/image/truck.png';const projection = get('EPSG:4326');const layerTypeMap = {vector: ['vec', 'cva'], // [矢量底图, 矢量注记]image: ['img', 'cia'], // [影像底图, 影像注记]terrain: ['ter', 'cta'] // [地形晕渲, 地形注记]
};const map = shallowRef();
const source = shallowRef<VectorSource>(new VectorSource());
const trace = ref();onMounted(() => {initMap('image');initTrace();
});const initMap = (layerType = 'image') => {const key = '替换为天地图key';// c: 经纬度投影 w: 墨卡托投影const matrixSet = 'c';map.value = new Map({target: 'map',layers: [// 底图new TileLayer({source: new XYZ({url: `https://t{0-7}.tianditu.gov.cn/DataServer?T=${layerTypeMap[layerType][0]}_${matrixSet}&tk=${key}&x={x}&y={y}&l={z}`,projection})}),// 注记new TileLayer({source: new XYZ({url: `https://t{0-7}.tianditu.gov.cn/DataServer?T=${layerTypeMap[layerType][1]}_${matrixSet}&tk=${key}&x={x}&y={y}&l={z}`,projection})}),new VectorLayer({source: source.value,style: new Style({stroke: new Stroke({color: 'rgba(228, 147, 87, 1)',width: 3})})})],view: new View({center: [116.406393, 39.909006],projection: projection,zoom: 5,maxZoom: 17,minZoom: 1})});
};const initTrace = () => {trace.value = [[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]];const iconFeature = new Feature({geometry: new Point(trace.value[0])});const icon = new Icon({crossOrigin: 'anonymous',src: iconSrc, // 或者new URL('../../assets/svg/truck.svg',import.meta.url).hrefcolor: 'red',opacity: 1,width: 30,height: 30});iconFeature.setStyle(new Style({image: icon}));source.value?.addFeature(iconFeature);let i = 0;const interval = setInterval(() => {if (trace.value[i + 1]) {iconFeature.setGeometry(new Point(trace.value[i + 1]));let arc = 0;if ((trace.value[i + 1][0] - trace.value[i][0] >= 0 &&trace.value[i + 1][1] - trace.value[i][1] >= 0) ||(trace.value[i + 1][0] - trace.value[i][0] < 0 &&trace.value[i + 1][1] - trace.value[i][1] > 0)) {arc = Math.atan((trace.value[i + 1][0] - trace.value[i][0]) / (trace.value[i + 1][1] - trace.value[i][1]));} else if (trace.value[i + 1][0] - trace.value[i][0] > 0 &&trace.value[i + 1][1] - trace.value[i][1] < 0 ||trace.value[i + 1][0] - trace.value[i][0] < 0 &&trace.value[i + 1][1] - trace.value[i][1] < 0) {arc =Math.PI +Math.atan((trace.value[i + 1][0] - trace.value[i][0]) /(trace.value[i + 1][1] - trace.value[i][1]));} icon.setRotation(arc);//设置航向角(与正北的夹角)source.value?.addFeature(new Feature({geometry: new LineString([trace.value[i], trace.value[i + 1]])}));i++;} else {clearInterval(interval);}}, 200);
};
</script>
<style scoped lang="scss">
.map {width: 100%;height: 100%;
}
</style>

这篇关于openlayers 轨迹回放(历史轨迹),实时轨迹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083047

相关文章

下载Xcode的历史版本

1.打开链接:https://developer.apple.com/download/more 进入页面 2.在搜索框输入Xcode,回车搜索.如图,找到各种版本Xcode 搜索Xcode 3.双击要下载的Xcode,或者点击前面的+,打开详细.点击下载 下载Xcode 4.接下来就耐心等待下载吧!

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

使用Flink CDC实时监控MySQL数据库变更

在现代数据架构中,实时数据处理变得越来越重要。Flink CDC(Change Data Capture)是一种强大的工具,可以帮助我们实时捕获数据库的变更,并进行处理。本文将介绍如何使用Flink CDC从MySQL数据库中读取变更数据,并将其打印到控制台。 环境准备 <dependency><groupId>org.apache.flink</groupId><artifactId>

RTP:实时传输协议详解(转)

实时传输协议RTP 1.RTP协议: RTP( Real-time Transport Protocol)协议最初是在70年代为了尝试传输声音文件,把包分成几部分用来传输语音,时间标志和队列号。经过一系列发展,RTP第一版本在1991年8月由美国的一个实验室发布了。到本世纪1996年形成了标准的的版本。很多著名的公司如Netscape ,就宣称“Netscape LiveMedia”是基于RTP协

Selenium WebDriverWait和expected_conditions来定位实时更新的元素

WebDriverWait 是 Selenium WebDriver 的一个等待机制,用于等待一个特定条件成立直到一个最大的时间阈值。这种等待方式是显式等待,与隐式等待相对。显式等待提供了一种更灵活的方式来等待页面上的元素或条件,因为它允许你指定等待条件和时间。 WebDriverWait 通常与 expected_conditions 一起使用,来指定等待的条件。当条件满足时,等待操作会立即结

【GD32】从零开始学兆易创新32位微处理器——RTC实时时钟+日历例程

1 简介 RTC实时时钟顾名思义作用和墙上挂的时钟差不多,都是用于记录时间和日历,同时也有闹钟的功能。从硬件实现上来说,其实它就是一个特殊的计时器,它内部有一个32位的寄存器用于计时。RTC在低功耗应用中可以说相当重要,因为在使用外部低速晶振的条件下,它在所有的低功耗模式下都可以工作,这使得RTC很适合实现芯片的低功耗唤醒。下面是RTC的框图。 咋一看RTC的内部还挺复杂的。 2 硬件时

YOLOv9基础 | 实时目标检测新SOTA,手把手带你深度解析yolov9论文!

前言:Hello大家好,我是小哥谈。YOLOv9是Chien-Yao Wang等人提出的YOLO系列的最新版本之一(截止到目前,YOLOv10已发布),于2024年2月21日发布。它是 YOLOv7的改进版本,两者均由Chien-Yao Wang及其同事开发。本节课就以YOLOv9论文为基础带大家深入解析YOLOv9算法。🌈        目录 🚀1.算法介绍 🚀2.论文解析

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章: STM32单片机BKP备份寄存器和RTC实时时钟详解

React项目-OpenLayers地图初始化

一、环境描述         React集成OpenLayers地图需要注意软件兼容性问题,可以从官网或者百度文章查询React和OpenLayers地图的版本兼容性, 1、软件版本         (1)create-react-app创建项目;         (2)React版本:18.3.1;         (3)OpenLayers版本:6.15.1;         (

深交所互动易问答平台关键词实时监控提醒

首先打开深交所互动易问答平台网站,打开开发者工具,选择网络内容,然后在最新提问和最新答复来回点击,发现它通过另一个网址加载数据,我们直接找到这个网址,问题就简单多了。 在新的选项卡中打开最新提问内容的网址,再分析这个页面。分析提问内容和链接,其中链接包含“viewQuestionForSzse.do?questionid=”这样的字符串 在新的选项卡中,打开最