mapboxgl实现带箭头轨迹线的代码


Posted in Javascript onJanuary 04, 2021

最近在使用mapboxgl实现轨迹展示时,想实现类似高德地图导航轨迹效果,然而并未在网上找到类似示例。经一番研究与尝试,最终解决,效果如下。

mapboxgl实现带箭头轨迹线的代码

添加箭头核心代码如下,只需在配置layout中添加symbol-placementsymbol-spacing属性即可:

// 添加箭头图层
function addArrowlayer() {
  map.addLayer({
    'id': 'arrowLayer',
    'type': 'symbol',
    'source': {
      'type': 'geojson',
      'data': routeGeoJson //轨迹geojson格式数据
    },
    'layout': {
      'symbol-placement': 'line',
      'symbol-spacing': 50, // 图标间隔,默认为250
      'icon-image': 'arrowIcon', //箭头图标
      'icon-size': 0.5
    }
  });
}

然而,为实现上述效果,确走了不少弯路。曾尝试集成Leaflet.PolylineDecorator插件核心算法,通过对线的处理,计算每个箭头所在位置以及角度,也能实现上述效果。不过该方案在地图倾斜旋转后,有时会有箭头偏移的bug。

在解决此bug过程中,不经意间看到道路标注都是沿道路线方向,突然有了新的灵感。

重新查看mapboxgl API,发现将layout中的symbol-placement设置为line,即可实现沿着线的方向绘制箭头。

注意:

1.我所用图标为右侧方向箭头,结果与实际方向相符,如果图标为向上箭头,需修改icon-rotate为90。

2.只把symbol-placement设置为line,箭头间距过于稀疏;需要设置下symbol-spacing参数,symbol-spacing默认值为250,修改为50即可实现文章首页图片效果。

在线示例

在线示例:http://gisarmory.xyz/blog/index.html?demo=MapboxGLPolylineDecorator

代码地址:http://gisarmory.xyz/blog/index.html?source=MapboxGLPolylineDecorator

原文地址:http://gisarmory.xyz/blog/index.html?blog=MapboxGLPolylineDecorator。

到此这篇关于mapboxgl实现带箭头轨迹线的文章就介绍到这了,更多相关mapboxgl实现带箭头轨迹线内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
js DOM的学习笔记
Dec 22 Javascript
JavaScript基础知识之数据类型
Aug 06 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
Apr 16 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
Aug 27 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
Mar 15 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 #Vue.js
three.js显示中文字体与tween应用详析
Jan 04 #Javascript
js用正则表达式筛选年月日的实例方法
Jan 04 #Javascript
vue中父子组件的参数传递和应用示例
Jan 04 #Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 #Vue.js
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
JS中表单的使用小结
2014/01/11 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python 可爱的大小写
2008/09/06 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
python写日志封装类实例
2015/06/28 Python
python实现中文分词FMM算法实例
2015/07/10 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python中import机制详解
2017/11/14 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python实现代码统计工具
2019/09/19 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
职工运动会邀请函
2014/01/19 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
大学团日活动总结书
2015/05/11 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Python sklearn分类决策树方法详解
2022/09/23 Python