Leaflet实现轨迹播放动画效果

效果图如下:

<!DOCTYPE html>
<html><head><title>轨迹</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- 引入样式 --><!-- <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> --><link rel="stylesheet" href="../../lib/element-ui@2.13.0/index.css" /><style>html,body,#map {height: 100%;padding: 0;margin: 0;}.menuBar {position: absolute;text-align: center;top: 10px;margin: 0 50px;padding: 5px;border-radius: 3px;z-index: 999;color: #ffffff;background-color: rgba(0, 168, 0, 1);}.timeslider {position: absolute;z-index: 999;width: 100%;height: 100px;background: lightseagreen;bottom: 0px;display: flex;align-items: center;justify-content: center;}.block {width: 80%;}.timeslider .slider-demo-block {display: flex;align-items: center;}.slider-demo-block .el-slider {margin-top: 0;margin-left: 12px;}.el-slider__marks-text {position: absolute;-webkit-transform: translateX(-50%);transform: translateX(-50%);font-size: 14px;color: #fff;margin-top: 15px;}</style><script src="../../lib/vue@2.6.11/vue.js"></script><!-- <script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script> --><!-- 引入组件库 --><!-- <script src="https://unpkg.com/element-ui@2.13.0/lib/index.js"></script> --><script src="../../lib/element-ui@2.13.0/index.js"></script><script src="../../js/prjconfig.js" maptype="leaflet"></script><!-- 引入插件 --><script src="../../lib/leaflet/plugins/leaflet.polylineDecorator.js"></script><script src="../../lib/leaflet/plugins/Leaflet.AnimatedMarker.js"></script>
</head><body><div id="map"></div><div class="menuBar"><input type="button" value="开始" onclick="startClick()" /><input type="button" value="暂停" onclick="pauseClick()" /><input type="button" value="加速" onclick="speetUp()" /><input type="button" value="减速" onclick="speetDown()" /><input type="button" value="停止" onclick="stopClick()" /></div><div id="app" class="timeslider"><div class="block"><el-slider v-model="value" :max="120" :step="10" :marks="marks" :show-tooltip="false" @change="change"></el-slider></div></div><script>//'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}'var map = L.map("map", {crs: L.CRS.EPSG4326, //L.CRS.EPSG3857center: [MAPINIT.Location.lat, MAPINIT.Location.lon], //[40.76339, 106.9477844],zoom: MAPINIT.Location.zoom,minZoom: MAPINIT.zoomsExtent[0],maxZoom: MAPINIT.zoomsExtent[1],zoomControl: true,});// 使用WMTS Key-Value加载地图服务let _getc ="http://192.168.1.212:8095/server/default/getTile/wmts?request=GetCapabilities&service=wmts&layer=yx";MAPCONFIG.MAPWMTS_IMG ="http://192.168.1.212:8095/server/vtile/getTile/wmts";let ls ="http://192.168.1.212:8095/server/vtile/getTile/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=yx&STYLE=default&TILEMATRIXSET=w&FORMAT=image/png&TILEMATRIX={z}&TILECOL={x}&TILEROW={y}&tk=''";L.tileLayer(ls, {zoomOffset: 1,}).addTo(map);map.setView(L.latLng(37.550339, 104.114129), 4); //设置缩放级别及中心点let speetX = 1; // 默认速度倍数// 加速function speetUp() {speetX = speetX * 2;animatedMarker.setSpeetX(speetX);}// 减速function speetDown() {speetX = speetX / 2;animatedMarker.setSpeetX(speetX);}// 开始function startClick() {animatedMarker.start();}// 暂停function pauseClick() {animatedMarker.pause();}// 停止function stopClick() {newLatlngs = [];animatedMarker.stop();}var routeLine;var realRouteLine;var decorator;var animatedMarker;var newLatlngs;// 初始化轨迹function initTrack(coor) {let latlngs = coor;// 小车速度var speedList = [1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 3, 2, 2, 1, 1,1,];// 轨迹线routeLine = L.polyline(latlngs, {weight: 8,}).addTo(map);// 实时轨迹线realRouteLine = L.polyline([], {weight: 8,color: "#FF9900",}).addTo(map);// 轨迹方向箭头decorator = L.polylineDecorator(routeLine, {patterns: [{repeat: 50,symbol: L.Symbol.arrowHead({pixelSize: 5,headAngle: 75,polygon: false,pathOptions: {stroke: true,weight: 2,color: "#FFFFFF",},}),},],}).addTo(map);var carIcon = L.icon({iconSize: [37, 26],iconAnchor: [19, 13],iconUrl: "../../image/car.png",});// 动态markeranimatedMarker = L.animatedMarker(routeLine.getLatLngs(), {speedList: speedList,interval: 200, // 默认为100mmicon: carIcon,playCall: updateRealLine,}).addTo(map);newLatlngs = [routeLine.getLatLngs()[0]];// 绘制已行走轨迹线(橙色那条)function updateRealLine(latlng) {newLatlngs.push(latlng);realRouteLine.setLatLngs(newLatlngs);}}// 清除polyline线function clearPolylineGroup(polyline_group) {latlngs = [];if (polyline_group) {map.removeLayer(polyline_group);}}// 清除轨迹方向箭头function clearArrow() {map.removeLayer(decorator);}// 清除markerfunction clearMarker() {map.removeLayer(animatedMarker);}// 重置清空地图上的轨迹、markerfunction resetMap() {clearPolylineGroup(routeLine);clearArrow(decorator);clearMarker(animatedMarker);}let app = new Vue({el: "#app",data: {message: "Hello Vue!",value: 0,marks: {0: "2023-01",10: "2023-02",20: "2023-03",30: "2023-04",40: "2023-05",50: "2023-06",60: "2023-07",70: "2023-08",80: "2023-09",90: "2023-10",100: "2023-11",110: "2023-12",},latlngs: [[39.898457, 116.391844],[39.898595, 116.377947],[39.898341, 116.368001],[39.898063, 116.357144],[39.899095, 116.351934],[39.905871, 116.35067],[39.922329, 116.3498],[39.931017, 116.349671],[39.939104, 116.349225],[39.942233, 116.34991],[39.947263, 116.366892],[39.947568, 116.387537],[39.947764, 116.401988],[39.947929, 116.410824],[39.947558, 116.42674],[39.9397, 116.427338],[39.932404, 116.427919],[39.923109, 116.428377],[39.907094, 116.429583],[39.906858, 116.41404],[39.906622, 116.405321],[39.906324, 116.394954],[39.906308, 116.391264],[39.916611, 116.390748],],},mounted() {this.getMonth();initTrack(this.latlngs);},methods: {change(e) {let step = e.toString();// console.log(Object.keys(this.marks));if (Object.keys(this.marks).indexOf(step) > -1) {console.log(this.marks[step]);}// console.log(this.value);if (this.value == 20) {resetMap();} else {resetMap();initTrack(this.latlngs);}},getMonth() {let dataArr = [];let data = new Date();let year = data.getFullYear();data.setMonth(data.getMonth() + 1, 1); //获取到当前月份,设置月份for (let i = 0; i < 12; i++) {data.setMonth(data.getMonth() - 1); //每次循环一次,月份值减1let m = data.getMonth() + 1;m = m < 10 ? "0" + m : m;dataArr.push(data.getFullYear() + "-" + m);}let list = dataArr.reverse();let obj = {};let labelArr = Object.keys(this.marks);labelArr.forEach((item, index) => {obj[item] = list[index];});this.marks = obj;},},});</script>
</body></html>

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

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

相关文章

常见面试题-Redis 主从复制原理以及痛点

Redis 主从复制如何同步数据呢&#xff1f; 参考文章&#xff1a;https://blog.csdn.net/Seky_fei/article/details/106877329 https://zhuanlan.zhihu.com/p/55532249 https://cloud.tencent.com/developer/article/2063597 https://xie.infoq.cn/article/4cffee02a2a12c2…

每日一题(LeetCode)----链表--分隔链表

每日一题(LeetCode)----链表–分隔链表 1.题目&#xff08;86. 分隔链表&#xff09; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初…

pyqt5的组合式部件制作(四)

对组合式部件的制作又改进了一版&#xff0c;组合式部件的子部件不再需要单独“提升为”&#xff0c;如果在模板文件的提升部件窗口内选择了“全局包含”&#xff0c;那么只需要在模板文件和应用文件中直接复制粘贴即可&#xff0c;部件的应用更为简便。如下图&#xff1a;按住…

在windows笔记本中安装tensorflow1.13.2版本的gpu环境2

tensorflow1.13.2版本的gpu环境 看python-anacona的安装只需要看1.1部分即可 目录 1.1 Anaconda安装 1.2 tensorflow-gpu安装 1.3 python编译器-pycharm安装 1.1 Anaconda安装 从镜像源处下载anaconda&#xff0c;地址&#xff1a;Index of /anaconda/archive/ | 北京…

快速入门Postman接口测试,让你轻松掌握接口测试技能!

1.postman界面 下载安装postman工具&#xff0c;以下是postman的界面 快捷区&#xff1a;提供常用的操作入口&#xff0c;新建请求&#xff0c;执行器&#xff0c;导入别人共享的收藏夹测试数据&#xff0c;包括运行收藏夹的一组测试数据&#xff1b; 侧边栏&#xff1a;搜索栏…

SpringBoot集成Swagger2登录功能和安全认证

本篇文章要实现的功能&#xff1a; 1.集成swagger2.集成swagger登录功能&#xff0c;访问 /swagger-ui.html需要先登录3.集成安全认证&#xff0c;访问接口时携带header 请求接口时携带了上一步输入的header参数和值 1.集成swagger jdk11&#xff0c;SpringBoot 2.7.13 pom…

pycurl>=7.43.0.5机器学习环境配置问题

去官网下载对应版本.whl文件&#xff0c;注意使用python --version提前查看 python版本信息和64bit还是32bit,下载对应版本。 cd 到该路径下&#xff0c;并pip。6

排序算法-----快速排序(非递归实现)

目录 前言 快速排序 基本思路 非递归代码实现 前言 很久没跟新数据结构与算法这一栏了&#xff0c;因为数据结构与算法基本上都发布完了&#xff0c;哈哈&#xff0c;那今天我就把前面排序算法那一块的快速排序完善一下&#xff0c;前面只发布了快速排序递归算法&#xff0c;…

国际版Amazon Lightsail的功能解析

Amazon Lightsail是一项易于使用的云服务,可为您提供部署应用程序或网站所需的一切,从而实现经济高效且易于理解的月度计划。它是部署简单的工作负载、网站或开始使用亚马逊云科技的理想选择。 作为 AWS 免费套餐的一部分&#xff0c;可以免费开始使用 Amazon Lightsail。注册…

机器学习/sklearn 笔记:K-means,kmeans++

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类&#xff0c;该算法要求指定群集的数量。它适用于大量样本&#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇&#xff0c;每个簇由簇中样本的平均值描…

【办公常识】写好的代码如何上传?使用svn commit

首先找到对应的目录 找到文件之后点击SVN Commit

oracle面试相关的,Oracle基本操作的SQL命令

文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…