高德地圖軌跡展示


  最近出了一個新需求,需要把電工的軌跡展示在公司的系統平台上,並且需要里邊有動畫,還有節點的信息等。

  經過查詢閱讀高德地圖的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更加針對節點數量巨大、排布密集的路徑,比如按秒記錄位置的車輛行進軌跡,精細的地理邊界等等。主要的功能特性包括:

  1. 對需要繪制的軌跡節點,在保留視覺效果的前提下,做一定的簡化處理(利用Simplify.js 。舉例來說,比如A點和B點,兩者距離不到1像素,則可以去掉B點,只留A點;再比如A,B,C三點在一條直線上,或者,B點僅僅稍微偏離A點和C點構成的線段,那么B點就可以去掉),從而減少軌跡繪制時涉及的節點數量,提升繪制性能。
  2. 支持快速識別軌跡上的節點。比如鼠標在軌跡上滑動時,可以顯示鼠標位置對應的節點信息。
  3. 內置軌跡巡航器,支持軌跡回放,標識經過路徑,以及獲取經過距離等等。
  4. 支持豐富的樣式配置,覆蓋軌跡線、軌跡方向、軌跡節點,以及巡航器等。

  瀏覽器支持:

  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);

  經過試驗,果然好使。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM