百度 Echarts 地圖->模擬遷徙,實現自動切換地圖
小航哥注釋:
1、本文主要是把模擬遷移的流程講了一遍,講的很好。具體實現參考航哥這篇隨筆“流量分析系統----實現-echarts模擬遷移(bmap.js/china.js)”
2、用了china.js就不需要用百度地圖的bmap.js,兩者取其一就可以。
3、本文參考自http://blog.csdn.net/cj_zyz/article/details/76574143
4、雖然china.js已經不能在echats官網下載了,但大家可以直接百度下載,網上很多資源。
剛好有個項目,然后前端找了這個百度的echarts地圖,領導說好,然后說要讓它自動切換地圖,就丟給我了。。。不過還好,做出來了。可惜的是,效果是實現了,最后卻被更高級的領導pass掉,但決定寫下這篇博客,或許能幫到有需要的人。
當時這個項目,是用於大看屏的,那種掛在牆上的大屏幕,長度6米左右樣子。
現在,重新在官網上弄個簡單的例子,重現下這個效果。
Echarts官網 -> 地圖 -> 模擬遷徙 官網示例地址:
http://echarts.baidu.com/demo.html#geo-lines
需要實現的效果:如圖1,實現右下角“北京”、“上海”、“廣州”的自動切換,定時切換。
圖1
我是個肝java的,這個echarts也要部署到服務器才能跑起來,如果有大佬有更好的方法,可以在評論下留言,一起討論學習。
步驟一、去官網下載兩個js,下面是下載地址還有圖片
①echarts.js : http://echarts.baidu.com/download.html
②(地圖)china.js : http://echarts.baidu.com/download-map.html
步驟二、用eclipse創建一個web項目,導入js,創建一個index.html文件
步驟三、編輯 index.html 文件,基於官網教程。有些注意點看下面的圖片
官網教程地址: http://echarts.baidu.com/tutorial.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <!-- 引入 jquery -->
- <script src="js/jquery-1.8.3.min.js"></script>
- <!-- 引入 ECharts 文件 -->
- <script src="js/echarts.js"></script>
- <!-- 引入地圖 -->
- <script src="js/china.js"></script>
- <!-- 航線自動切換,自己寫 -->
- <script src="js/line_auto_switch.js"></script>
- </head>
- <body>
- <!-- 為 ECharts 准備一個具備大小(寬高)的 DOM -->
- <div id="main" style="width: 600px;height:400px;"></div>
- <!-- 下面的script腳本,其實也可以寫成一個js,然后引入近來,但這里就不這樣做了 -->
- <script type="text/javascript">
- // 基於准備好的dom,初始化echarts實例,
- // 這句和最后一句,都是必須的。只是中間部分改變了。根據官網教程來的
- var myChart = echarts.init(document.getElementById('main'));
- //中間部分,就是最上面第一張圖,官網示例的代碼復制寫到這里
- //模擬遷徙 : http://echarts.baidu.com/demo.html#geo-lines
- // 使用剛指定的配置項和數據顯示圖表。
- myChart.setOption(option);
- </script>
- </body>
- </html>

selected屬性:官網例子沒有,就是這東西,才能實現這篇博客所說的效果,因為,不寫,它會默認第一個,也就是'北京 Top10'為選中狀態。
map:"china" : 是你下載地圖js的那個文件名“china.js”,比如你下載的是“world.js”,那么這里的“china”也要改為“world”。
步驟四、新建 line_auto_switch.js 文件,實現自動、定時切換效果,但會有個缺點,最后面會說到。
- //************************
- //******航線自動切換*********
- //************************
- $(document).ready(function(){
- auto_switch_timer();
- });
- //用來選中的節點,因為默認是 “北京 Top10” 先選中的,默認為select0
- //'北京 Top10', '上海 Top10', '廣州 Top10'
- var select0 = {
- '北京 Top10' : true,
- '上海 Top10' : false,
- '廣州 Top10' : false
- };
- var select1 = {
- '北京 Top10' : false,
- '上海 Top10' : true,
- '廣州 Top10' : false
- };
- var select2 = {
- '北京 Top10' : false,
- '上海 Top10' : false,
- '廣州 Top10' : true
- };
- var restTime = 2;// 2秒切換一次
- var switch_index = 1;//激活的select變量,因為0是默認的,所以從1開始
- var switch_count = 3;//總共有多少個 select變量
- /* 倒計時js */
- function auto_switch_timer() {
- // debugger;
- var intDiff = parseInt(restTime);// 倒計時總秒數量
- window.setInterval(function() {
- if (intDiff > 0) {
- intDiff--;
- } else {
- intDiff = parseInt(restTime);
- // 獲取 option 里的 legend 參數
- var legend = option.legend;
- // 判斷是不是激活最后一個selectX變量,是,下次就從 select0 開始
- if (switch_index == switch_count) {
- switch_index = 0;
- }
- switch (switch_index) {
- case 0:
- legend.selected = select0;
- break;
- case 1:
- // selected 是當前選中的
- legend.selected = select1;
- break;
- case 2:
- legend.selected = select2;
- break;
- }
- // 設置 option
- option.legend = legend;
- // 重新加載 option,因為修改了局部,所以不會出現整個頁面刷新
- myChart.setOption(option);
- switch_index++;
- }
- }, 1000);
- }
總結:
1、你可以把自動切換的代碼,放到官網例子上哦,寫在最下面,你就知道效果了,親測可用。如下圖
2、步驟四所說的缺點,就是你去拖動地圖后,等下次切換,又會跳回原來的位置,但是我把代碼放到官網例子上,卻重現不了。我也不明白怎么回事,反正不能怪我,嘿嘿,我當時只寫了這個切換航線的js。
3、這里面還有很多優化的地方,比如,不止“北上廣”3個城市的話,有10幾個城市,甚至更多,那么,js里面,“var selectXX;”這代碼要寫很多,然后,switch里面的case,也要相應的增加,所以如何優化,自己想,我只是個肝后台的,前端展示效果什么的,才不要呢?
坑留給你們。。。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------