最近在使用mapboxgl實現軌跡展現時,想實現相似高德地圖導航軌跡效果,然而並未在網上找到相似示例。經一番研究與嘗試,最終解決,效果以下。javascript
添加箭頭核心代碼以下,只需在配置layout
中添加symbol-placement
和symbol-spacing
屬性便可:html
// 添加箭頭圖層 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。java
在解決此bug過程當中,不經意間看到道路標註都是沿道路線方向,忽然有了新的靈感。算法
從新查看mapboxgl API
,發現將layout
中的symbol-placement
設置爲line
,便可實現沿着線的方向繪製箭頭。json
注意:spa
icon-rotate
爲90。symbol-placement
設置爲line
,箭頭間距過於稀疏;須要設置下symbol-spacing
參數,symbol-spacing
默認值爲250,修改成50便可實現文章首頁圖片效果。在線示例:http://gisarmory.xyz/blog/index.html?demo=MapboxGLPolylineDecorator插件
代碼地址:http://gisarmory.xyz/blog/index.html?source=MapboxGLPolylineDecoratorcode
原文地址:http://gisarmory.xyz/blog/index.html?blog=MapboxGLPolylineDecorator。htm
關注《GIS兵器庫》公衆號, 第一時間得到更多高質量GIS文章。blog
本文章採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、從新發布,但務必保留文章署名《GIS兵器庫》(包含連接: http://gisarmory.xyz/blog/),不得用於商業目的,基於本文修改後的做品務必以相同的許可發佈。