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的运用和定 ...
随机推荐
- P3803 [模板] 多项式乘法 (FFT)
Rt 注意len要为2的幂 #include <bits/stdc++.h> using namespace std; const double PI = acos(-1.0); inli ...
- poj1066 线段相交简单应用(解题报告)
#include<stdio.h> #include<math.h> const double eps=1e-8; int n; struct Point { double x ...
- Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break
题意:有一张\(n\)x\(m\)的图,图中每个点都关押着罪犯,在坐标\((r,c)\)处有一个出口,每名罪犯每秒可以可以像上下最有移动一个单位或者不动,问所有罪犯能够逃离监狱的最少时间. 题解:直接 ...
- poj3661 Running
Description The cows are trying to become better athletes, so Bessie is running on a track for exact ...
- [Python] Pandas的delete、drop函数的用法
目录 drop函数 Axis(轴)含义 drop用法实验 delete函数 drop函数 DataFrame.drop(labels=None, axis=0, index=None, columns ...
- Ansible 自动化部署
参考 BLOG: Ansible 系列模块 Ansible 部署与使用 Ansible Book Ansible Ansible 是一个自动化统一配置管理工具,自动化主要体现在 Ansible 集成了 ...
- 网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读
参考 http://prontosil.club/posts/c08799e1/ 一. 实验名称 企业环境渗透2 二. 实验目的 [实验描述] 操作机的操作系统是kali 进入系统后默认是命令行界面 ...
- linux repo init 遇到的问题
问题描述: 利用repo从远程服务器上取代码时候,出现错误 fatal: cannot make .repo directory:Permission denied, 加了sudo 之后,还是不行, ...
- 操作系统 part5
1.线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数据污染. 线程不安全就 ...
- flex & align-content & justify-items
flex & align-content & justify-items align-content 多行 align-items 的对其方式 https://developer.mo ...