最近出了一個新需求,需要把電工的軌跡展示在公司的系統平台上,並且需要里邊有動畫,還有節點的信息等。
經過查詢閱讀高德地圖的API文檔,找到了高德地圖的Polyline類,這個Polyline類是高德地圖中用來在地圖上根據給的坐標集合畫成折線展示的。
AMap.Polyline(opt:PolylineOptions)
構造折線對象,通過PolylineOptions指定折線樣式
繪制軌跡
var polyline = new AMap.Polyline({
map: map,
path: lineArr,
strokeColor: "#00A", //線顏色
strokeOpacity: 1, //線透明度
strokeWeight: 3, //線寬
strokeStyle: "solid" //線樣式
});
然而后來發現,這個Polyline類滿足不了我現在的需求,於是我又找到了高德地圖中ui組件庫中關於軌跡展示的組件 PathSimplifier(軌跡展示)。
下邊是關於PathSimplifier的一下介紹(來自官方文檔)
PathSimplifier是一個軌跡展示組件,相比 AMap.Polyline (折線),PathSimplifier更加針對節點數量巨大、排布密集的路徑,比如按秒記錄位置的車輛行進軌跡,精細的地理邊界等等。主要的功能特性包括:
- 對需要繪制的軌跡節點,在保留視覺效果的前提下,做一定的簡化處理(利用Simplify.js 。舉例來說,比如A點和B點,兩者距離不到1像素,則可以去掉B點,只留A點;再比如A,B,C三點在一條直線上,或者,B點僅僅稍微偏離A點和C點構成的線段,那么B點就可以去掉),從而減少軌跡繪制時涉及的節點數量,提升繪制性能。
- 支持快速識別軌跡上的節點。比如鼠標在軌跡上滑動時,可以顯示鼠標位置對應的節點信息。
- 內置軌跡巡航器,支持軌跡回放,標識經過路徑,以及獲取經過距離等等。
- 支持豐富的樣式配置,覆蓋軌跡線、軌跡方向、軌跡節點,以及巡航器等。
瀏覽器支持:
PathSimplifier目前依賴Canvas進行繪制,因此不支持IE9及以下瀏覽器。
然后一切都很順利,在平台上的地圖上完美展現了電工的軌跡線,並且利用PathSimplifier提供的巡航器進行循環動畫,還根據它的配置項,添加事件展示信息。
然后,就發現了一個問題,當我點擊其他的功能的時候,這個軌跡竟然沒消失,是的,我不能把這個東西清除了。
經過查閱文檔和別人的一些經驗還有自己的一些測試,發現,現有的Map類里邊的方法都清除不了它,即使是最厲害的號稱清除一切覆蓋物的clearMap()都拿它沒辦法,着實讓人很苦惱,我當初是把new 這個PathSimplifier構造函數的方法封裝在一個自定義方法里邊,每次調用都會執行一次這個自定義方法,等於每次都會重新new一個PathSimplifier對象,然后每次都會新添加一個圖層,(通過map.getLayers()方法可以查詢當前地圖的圖層信息),中間有試過每次調用先清除PathSimplifier對象,然后並沒有成功,后來想,既然它是一個圖層,那么我每次調用的時候判斷如果不是第一次調動那么就利用map.setLayers(arr)清除第一次調用時的圖層,這樣就可以達到清除上次軌跡的目的。
var layerNum = 0;//定義成全局變量,這樣在平台的其他地方可可以判斷然后進行操作
var arr = map.getLayers();
if(layerNum > 1){
arr.pop();
}
map.setLayers(arr);
經過試驗,果然好使。