Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
前面写了篇文章,mapboxgl实现带箭头轨迹线,介绍了如何基于mapboxgl实现类似高德地图导航轨迹效果。
下图是我基于leaflet实现的效果。
接下来分享一下在我基于leaflet实现该效果时一些思路以及踩到的坑。
轨迹线添加箭头效果
leaflet无法像mapboxgl
似的直接通过样式实现轨迹箭头效果,需要通过引用L.polylineDecorator扩展实现。核心代码如下。
注意:此处添加箭头图层应在轨迹线和实时轨迹线之后,不然箭头会被覆盖。
沿轨迹线带方向动态marker
实现该效果首先想到的是类似之前在用mapboxgl 实现的思路,将线打断,然后通过requestAnimationFrame循环更新marker的位置和角度实现;这种方式最终可以实现动态效果,但是流畅度差了一些,会有卡顿的现象。
为了得到更流畅的效果,又翻看Leaflet Plugins,搜索animate
关键字,发现了Leaflet.AnimatedMarker,动画效果挺流畅的,于是拉取代码研究了一下。
该插件主要是使用CSS3动画来实现marker在线段间的移动,所以效果比较流畅。
但是该插件并未考虑marker角度的问题,而且在做地图缩放的时候会有marker
偏移轨迹的问题。查找相关资料时,发现有人也尝试解决此问题leaflet-moving-marker。
但这里对于轨迹线的动态绘制并未考虑。
参考Leaflet.AnimatedMarker
、leaflet-moving-marker
中核心代码并考虑我们要实现的效果,最终解决了角度问题以及轨迹线动态绘制问题。
另外,在播放过程中当前后两个点位角度变化超过180度时,会出现marker
旋转的问题。
通过如下代码我们解决了此问题。
我们把代码重新封装,简单调用即可实现了文章开头的轨迹带箭头以及沿轨迹线带方向的动态marker
。
注意:在动态播放的过程中缩放地图,标记点由于播放延迟,有时仍然会出现偏离轨迹线的问题,目前该问题暂未解决,后续解决后更新。
总结
- 使用用
L.polylineDecorator
插件可以实现轨迹带箭头效果。 Leaflet.AnimatedMarker
插件可以更流畅的实现marker沿线播放,但是没有考虑marker
角度和轨迹线的动态绘制。- 参考
Leaflet.AnimatedMarker
、leaflet-moving-marker
中核心代码,解决角度问题以及轨迹线动态绘制等问题。 - 将代码重新封装成插件,方便调用。
在线示例
在线示例:http://gisarmory.xyz/blog/index.html?demo=LeafletRouteAnimate
示例代码地址:http://gisarmory.xyz/blog/index.html?source=LeafletRouteAnimate
插件地址:http://gisarmory.xyz/blog/index.html?source=LeafletAnimatedMarker
原文地址:http://gisarmory.xyz/blog/index.html?blog=LeafletRouteAnimate。
关注《GIS兵器库》, 第一时间获得更多高质量GIS文章。
本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker的更多相关文章
- GPS/轨迹追踪、轨迹回放、围栏控制
折腾一个多月终于弄完了这个项目,起初都未曾接触GPS/轨迹追踪.轨迹回放.圈划围栏...等一些在百度地图或者Googel地图操作的一些业务,后端的业务相对来说简单点 cas单点登录,mongdb灵活的 ...
- 不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)
说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会遇到一些问题,但是即便是人家的api有问题, ...
- 使用纯CSS实现带箭头的提示框
爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...
- popover带箭头弹框
我们先来看一下效果吧: 分析:这个带箭头的弹框其实是一个控制器,通过Modal方式展现,但跟传统模态方式效果不一样,我们一眼就能看出. Xib方式实现popover: 1.segue的时候选择Pres ...
- css实现带箭头选项卡
这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换.起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位.这种方法是可行的,但是因为手 ...
- div+css实现圆形div以及带箭头提示框效果
.img{ width:90px; height:90px; border-radius:45px; margin:0 40%; border:solid rgb(100,100,100) 1px;& ...
- iOS 新浪微博-2.0 搜索框/标题带箭头/下拉菜单
不管是搜索框还是下拉菜单,我们都需要对背景的图片进行拉伸.定义一个Category分类对图片进行操作. UIImage+Effect.h #import <UIKit/UIKit.h> @ ...
- iOS 带箭头菜单选项弹窗LFPopupMenu
一.效果图 由于是模拟器缩得比较小,一些细线可能显示不出来,不是bug哈. 二.用法 LFPopupMenuItem *item1 = [LFPopupMenuItem createWithTitle ...
- 圆角带箭头的提示框css实现
css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...
随机推荐
- G - 棋盘游戏
小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的"车",并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放, ...
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma (贪心,结构体排序)
题意:你要买\(n\)份午饭,你可以选择自己去买,或者叫外卖,每份午饭\(i\)自己去买需要消耗时间\(b_i\),叫外卖需要\(a_i\),外卖可以同时送,自己只能买完一份后回家再去买下一份,问最少 ...
- Vulkan与DX11交互
Demo演示地址07_wintest 有什么用 在android平台主流是用opengl es,android下vulkan与opengles纹理互通. 而在win平台,主流游戏还用的是DX11,如果 ...
- python try异常处理
什么是异常 python异常捕获,在刚开始学的时候,经常会遇到两种报错信息:语法错误和执行的异常. 语法错误在执行的时候就会报错,同时控制端会告诉你错误所在的行: 但即便python程序语法是正确的, ...
- httprunner(8)用例调用-RunTestCase
前言 一般我们写接口自动化的时候,遇到复杂的逻辑,都会调用API方法来满足前置条件,Pytest的特性是无法用例之间相互调动的,我们一般只调用自己封装的API方法. 而httprunner支持用例之间 ...
- OpenStack Train版-10.安装neutron网络服务(网络节点:可选)
可选:安装neutron网络服务节点(neutron01网络节点192.168.0.30)网络配置按照官网文档的租户自助网络 配置系统参数 echo 'net.ipv4.ip_forward = 1' ...
- 使用SignTool对软件安装包进行数字签名(二)--进行数字签名
四.使用signcode.exe为安装程序.库或cab包签名 1.运行signcode.exe. 2.点击"下一步",选择需要签名的文件(安装程序.库或cab包). 3.点击&qu ...
- SVG path d Attribute
Scalable Vector Graphics (SVG) 1.1 (Second Edition) W3C Recommendation 16 August 2011 http://www.w3. ...
- React Suspense All In One
React Suspense All In One 挂起让组件在渲染之前"等待"某些东西. 如今,Suspense仅支持一种用例:使用React.lazy动态加载组件. 将来,它将 ...
- browser parse CSS style order
browser parse CSS style order 浏览器解析 CSS style 的顺序 从右到左 https://juejin.im/entry/5a123c55f265da432240c ...