在項目中,常常會涉及到地圖相關的比較炫,相對復雜的效果實現需求,這個時候,將echarts與百度地圖結合使用,就勢在必行了。以下是自己在實踐過程中遇到問題的簡要總結:
如:已經創建了一個echarts實例,var myChart = echarts.init(document.getElementById('allmap'));且進行了相關參數的設置,myChart.setOption(option);
1.通過echarts實例獲取地圖實例的方法
- var bmap = myChart.getModel().getComponent('bmap').getBMap();
- 獲取到的百度地圖對象bmap適用於所有的百度地圖的接口。
- 如,設置地圖的最大最小縮放級別:
bmap.setMinZoom(5);
bmap.setMaxZoom(6);
2.對bmap進行相關設置操作,但無效的原因及解決辦法
- 問題原因查找的思路:
1)排除其他代碼干擾因素,去官網示例中進行操作,看是否有效。
2)若有效,比較自己的代碼與官網示例的差異,鎖定可能存在問題的部分,進行問題排查- 解決方法:當數據是通過ajax異步請求得到時,重新執行了myChart.setOption(option)的設置語句,此時,需要重新通過該實例myChart去獲取地圖對象bmap並進行相關的設置操作。
3.數據定時刷新,即定時進行myChart.setOption(option)的設置時,地圖也進行了重載,導致出現了地圖一閃一閃的抖動,影響使用的原因及解決方法
- 問題原因查找的思路:同上面的問題2
- 解決方法:myChart.setOption(option,true)去掉該設置語句中的第二個參數true,加上該參數,會導致重繪
4.在頁面定時刷新的過程中,數據不斷堆疊,效果堆疊,最后頁面地圖無法顯示,頁面崩潰的原因及解決方法
- 問題原因查找的思路:起初,用到了myChart.clear()方法,起到了一定的作用,但是仍然效果不佳。
實際上,在查找bug原因時,一定要充分利用瀏覽器的js斷點調試,來查看代碼的執行情況,從而明確定位到bug原因,而不能是,單純地從效果着手解決問題。- 解決方法:在每次myChart.setOption(option)時,需要清空series,否則就是不停地往series里面push數據。
5.點擊頁面中的DOM節點,如tab選項卡,對應切換地圖效果渲染的實現方法
- 點擊切換tab選項卡,對應切換legend的選中狀態
option.legend.selected = {
'第一項': false,
'第二項': false,
'第三項': false
};
option.legend.selected[selecteditem] = true;
6.本地運行ok,集成到項目里面,引用文件內報錯的原因及解決方案
- 本地調試ok之后,集成到項目里面,引用的文件報錯,對於這種問題,基本上是寫的代碼的問題,而不是引用文件的問題,所以,着手點應該是集成前后的代碼差異,本次的問題原因最后確定是后添加的一個容錯處理return導致的。
7.文件引用的問題
- 根據需要,引用echarts對應的js文件,比如需要散點圖,則echarts.common.min.js就不夠用了,所以引用的是echarts.min.js
- 同時,還需要引用bmap.min.js,來完成echart的地圖部分的功能。