三十五、openlayers官网示例Dynamic Data——在地图上加载动态数据形成动画效果

官网demo地址:

 Dynamic Data

 初始化地图

 const tileLayer = new TileLayer({source: new OSM(),});const map = new Map({layers: [tileLayer],target: "map",view: new View({center: [0, 0],zoom: 2,}),});

    创建了三个样式

const imageStyle = new Style({image: new CircleStyle({radius: 5,fill: new Fill({ color: "yellow" }),stroke: new Stroke({ color: "red", width: 1 }),}),});const headInnerImageStyle = new Style({image: new CircleStyle({radius: 2,fill: new Fill({ color: "blue" }),}),});const headOuterImageStyle = new Style({image: new CircleStyle({radius: 5,fill: new Fill({ color: "black" }),}),});

绘制动画效果主要还是利用了postrender事件,其原理解析可以参考这篇

十八、openlayers官网示例Custom Animation解析——地图上添加自定义动画、圆圈涟漪效果_unbykey(listenerkey);-CSDN博客

// 点的数量,用于定义图形的分辨率const n = 200;// 角速度常量,用于计算当前时间的角度const omegaTheta = 30000;// 大圆的半径const R = 7e6;// 小圆的半径const r = 2e6;// 距离小圆中心的点的距离const p = 2e6;tileLayer.on("postrender", function (event) {//获取渲染上下文和帧状态//用于在地图上绘制矢量图形const vectorContext = getVectorContext(event);//包含当前帧的状态,包括时间信息const frameState = event.frameState;//计算当前角度 theta 根据当前时间和 omegaTheta 计算当前角度 theta,用于动画效果const theta = (2 * Math.PI * frameState.time) / omegaTheta;//生成外旋轮线的坐标数组const coordinates = [];let i;for (i = 0; i < n; ++i) {const t = theta + (2 * Math.PI * i) / n;const x = (R + r) * Math.cos(t) + p * Math.cos(((R + r) * t) / r);const y = (R + r) * Math.sin(t) + p * Math.sin(((R + r) * t) / r);coordinates.push([x, y]);}vectorContext.setStyle(imageStyle);//设置样式 imageStyle 并绘制多点几何(MultiPoint)vectorContext.drawGeometry(new MultiPoint(coordinates));const headPoint = new Point(coordinates[coordinates.length - 1]);//将头部的圆标注出来设置成不同样式vectorContext.setStyle(headOuterImageStyle);vectorContext.drawGeometry(headPoint);vectorContext.setStyle(headInnerImageStyle);vectorContext.drawGeometry(headPoint);//强制重新渲染地图map.render();});

完整代码:

<template><div class="box"><h1>Dynamic Data动态数据</h1><div id="map"></div></div>
</template><script>
import Map from "ol/Map.js";
import OSM from "ol/source/OSM.js";
import TileLayer from "ol/layer/Tile.js";
import View from "ol/View.js";
import { Circle as CircleStyle, Fill, Stroke, Style } from "ol/style.js";
import { MultiPoint, Point } from "ol/geom.js";
import { getVectorContext } from "ol/render.js";
export default {name: "",components: {},data() {return {map: null,};},computed: {},created() {},mounted() {const tileLayer = new TileLayer({source: new OSM(),});const map = new Map({layers: [tileLayer],target: "map",view: new View({center: [0, 0],zoom: 2,}),});const imageStyle = new Style({image: new CircleStyle({radius: 5,fill: new Fill({ color: "yellow" }),stroke: new Stroke({ color: "red", width: 1 }),}),});const headInnerImageStyle = new Style({image: new CircleStyle({radius: 2,fill: new Fill({ color: "blue" }),}),});const headOuterImageStyle = new Style({image: new CircleStyle({radius: 5,fill: new Fill({ color: "black" }),}),});// 点的数量,用于定义图形的分辨率const n = 200;// 角速度常量,用于计算当前时间的角度const omegaTheta = 30000;// 大圆的半径const R = 7e6;// 小圆的半径const r = 2e6;// 距离小圆中心的点的距离const p = 2e6;tileLayer.on("postrender", function (event) {//获取渲染上下文和帧状态//用于在地图上绘制矢量图形const vectorContext = getVectorContext(event);//包含当前帧的状态,包括时间信息const frameState = event.frameState;//计算当前角度 theta 根据当前时间和 omegaTheta 计算当前角度 theta,用于动画效果const theta = (2 * Math.PI * frameState.time) / omegaTheta;//生成外旋轮线的坐标数组const coordinates = [];let i;for (i = 0; i < n; ++i) {const t = theta + (2 * Math.PI * i) / n;const x = (R + r) * Math.cos(t) + p * Math.cos(((R + r) * t) / r);const y = (R + r) * Math.sin(t) + p * Math.sin(((R + r) * t) / r);coordinates.push([x, y]);}vectorContext.setStyle(imageStyle);//设置样式 imageStyle 并绘制多点几何(MultiPoint)vectorContext.drawGeometry(new MultiPoint(coordinates));const headPoint = new Point(coordinates[coordinates.length - 1]);//将头部的圆标注出来设置成不同样式vectorContext.setStyle(headOuterImageStyle);vectorContext.drawGeometry(headPoint);vectorContext.setStyle(headInnerImageStyle);vectorContext.drawGeometry(headPoint);//强制重新渲染地图map.render();});map.render();},methods: {},
};
</script><style lang="scss" scoped>
#map {width: 100%;height: 500px;
}
.box {height: 100%;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WIFI 万[néng]钥匙 v5.0.10/v4.9.80 SVIP版!

WiFi Master Key v5.0.10/v4.9.80 WIFI万[Nng]钥匙APP是一款专业的网络连接工具&#xff0c;设计宗旨在于为用户提供方便快捷的WiFi接入方案。本应用集成了覆盖全国的大量免费WiFi热点信息&#xff0c;确保用户能够在不同地区快速而稳定地连接到互联网。此外&#xff0c;该应用…

HackTheBox-Machines--Sense

Popcorn 测试过程 1 信息收集 服务器开启80、443端口 80端口 访问 80 跳转到 443 – https://10.129.196.51/ &#xff0c;该页面是 pfSense 登录界面&#xff0c;默认密码是&#xff1a; admin/pfSense&#xff0c;使用默认账号密码登录失败 目录扫描 ./gobuster dir -u htt…

【TB作品】MSP430F149单片机,广告牌,滚动显示

LCD1602滚动显示切换播放暂停字符串 显示Public Places 显示No Smoking 播放 暂停 部分代码 char zifu1[] "Public Places "; char zifu2[] "Class Now "; char zifu3[] "No admittance "; char *zifu[] { zifu1, zifu2, zifu3 }…

【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好&#xff0c;世界”。 因为 The C Programming Language 中使用它做为第一个演示程序&#xff0c;后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面&#xff0c;我们也将演示利用Label显示Qt中的"Hello World!&q…

颠覆传统:探索Web3对传统计算机模式的冲击

随着Web3技术的崛起&#xff0c;传统计算机模式正面临着前所未有的冲击与挑战。Web3作为下一代互联网的代表&#xff0c;以其去中心化、安全可信的特性&#xff0c;正在颠覆着传统计算机模式的种种假设和局限性。本文将深入探讨Web3对传统计算机模式的冲击&#xff0c;并探索其…

imx6ull - 制作烧录SD卡

1、参考NXP官方的手册《i.MX_Linux_Users_Guide.pdf》的这一章节&#xff1a; 1、SD卡分区 提示&#xff1a;我们常用的SD卡一个扇区的大小是512字节。 先说一下i.MX6ULL使用SD卡启动时的分区情况&#xff0c;NXP官方给的镜像布局结构如下所示&#xff1a; 可以看到&#xff0c…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码&#xff08;bytecode&#xff09;&#xff0c;以及如何看懂字节码。 以下分析基于 lua-5.4.6&#xff0c;下载地址&#xff1a;https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一&#xff1a;使用 luac luac 是 lua 自带的编译程序&#x…

SaaS 电商设计 (十一) 那些高并发电商系统的限流方案设计

目录 一.什么是限流二.怎么做限流呢2.1 有哪些常见的系统限流算法2.1.1 固定窗口2.1.1 滑动窗口2.1.2 令牌桶2.1.3 漏桶算法 2.2 常见的限流方式2.2.1 单机限流&集群限流2.2.2 前置限流&后置限流 2.3 实际落地是怎么做的2.3.1 流量链路2.3.2 各链路限流2.3.2.1 网关层2…

Maven 中的 classifier 属性用过没?

最近训练营有小伙伴问到松哥一个关于 Maven 依赖的问题&#xff0c;涉及到 classifier 属性&#xff0c;随机问了几个小伙伴&#xff0c;都说工作中没用到过&#xff0c;因此简单整篇文章和小伙伴们分享下。 Maven 大家日常开发应该都有使用&#xff0c;Maven 中有一个比较好玩…

图论(四)—最短路问题(Dijkstra)

一、最短路 概念&#xff1a;从某个点 A 到另一个点B的最短距离&#xff08;或路径&#xff09;。从点 A 到 B 可能有多条路线&#xff0c;多种距离&#xff0c;求其中最短的距离和相应路径。 最短路径分类&#xff1a; 单源最短路&#xff1a;图中的一个点到其余各点的最短路径…

【图像处理与机器视觉】频率域滤波

知识铺垫 复数 CRjI 可以看作复平面上的点&#xff0c;则该复数的坐标为&#xff08;R&#xff0c;I&#xff09; 欧拉公式 e j θ c o s θ j s i n θ e^{j\theta} cos \theta j sin \theta ejθcosθjsinθ 极坐标系中复数可以表示为&#xff1a; C ∣ C ∣ ( c o s…

15、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、plot()函数默认格式画图 代码: x=0:0.1:20;%绘图默认格式 y=sin(x); plot(x,y) 2、X轴和Y轴显示范围/axis()函数 代码: x=0:0.1:20;%绘图默认格式 y=sin(x); plot(x,y) axis([0 21 -1.1 1.1])%设置范围 3、网格显示/grid on函数 代码: x=0:0.1:20;%绘图默认格式 …

拓展虚拟世界边界,云手机可以做到吗

虚拟世界&#xff0c;AI&#xff0c;VR等词汇是21世纪最为流行的词汇&#xff0c;在科技背后&#xff0c;这些词汇的影响变得越来越大&#xff0c;已经走进了人们的世界&#xff0c;比如之前APPLE发布的vision pro&#xff0c;使人们能够更加身临其境的体验到原生os系统&#x…

从MLP到卷积

1.从MLP到卷积层 最近要做多通道的实验&#xff0c;所以重新将处理图像的基础模型回顾一下&#xff0c;什么是卷积&#xff1f;卷积本质是是一种特殊的全连接层。 1.1怎么w的权重从一个值变成了4维呢?可以这样理解&#xff0c;在此举一个例子&#xff1a; 其实本质可以看成&…

安防综合管理系统EasyCVR平台GA/T1400视图库:基于XML的消息体格式

GA/T 1400标准的应用范围广泛&#xff0c;涵盖了公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在视频监控系统中&#xff0c;GA/T 1400公安视图库的对接是实现视频图像信息传输、处理和管理的重要环节。 以视频汇聚EasyCVR视频监…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

使用Xshell一键在多个会话中执行多个命令

背景 平时在工作中经常通过ssh远程操作Linux&#xff0c;由于我们负责的服务部署在超过5台服务器&#xff08;相同的代码及路径&#xff09;&#xff0c;每次发布后执行重启都得重复操作5次关闭、检查、启动、查看日志&#xff0c;特别繁琐。 后来发现Xshell 7可以录制脚本&am…

【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别

目录 一、 动态SQL1.1 \<if>标签1.2 \<trim>标签1.3 \<where>标签1.4 \<set>标签1.5 \<foreach>标签1.6 \<include>标签 二、 #{}与${}的区别2.1 #{}是预编译sql&#xff0c;${}是即时sql2.2 SQL注入2.3 #{}性能高于${}2.4 ${}用于排序功能…

洛谷 P10566 「Daily OI Round 4」Analysis 题解

先弄个 ASCII 码表&#xff1a; 分析 很明显&#xff0c;想要节省时间&#xff0c;就要把这些字符转换成和它们的 ASCII 值最接近的大写字母。 通过 ASCII 码表&#xff0c;很容易就可以发现&#xff1a; ASCII 值与数字最接近的大写字母是 A \texttt A A。ASCII 值与小写…

JVM学习-监控工具(二)

jmap&#xff1a;导出内存映像文件&内存使用情况 基本情况 jmap(JVM Memory Map)&#xff1a;一方法获取dump文件(堆转储快照文件&#xff0c;二进制文件)&#xff0c;还可以获取目标Java进程的内存相关信息&#xff0c;包括Java堆各区域的使用情况、堆中对象的统计信息、…