1. 程式人生 > >Echarts地圖使用擴充套件(1)

Echarts地圖使用擴充套件(1)

本文主要介紹map與geo兩種圖形的聯合使用,以及一些屬性的妙用。

實現效果:在世界地圖上標註省會城市的地理位置,以下只是選擇性的顯示了幾個點,如下圖所示:
這裡寫圖片描述

實現此效果,需要有兩個series物件,series[0]為顏色漸變的世界地圖,series[1] 為 geo地理位置點;

需要引入的js

echarts.min.js      官網下載即可
world.js            官網下載即可
jquery-2.2.3.min.js
jquery.resize.js

實現過程

1、獲取世界地圖各省會城市對應的地理位置

我們可以看到echarts3官網上提供了world地圖檔案,可以儲存成js或者json格式,下載world.json格式的地圖檔案,開啟我們可以看到,每個國家對應有一個coordinates列表,裡面是這個國家對應的各個城市的座標列表,但是沒有明確說明哪個座標是省會城市,於是我摒棄了官網的world檔案,從網上找到了一份相對比較齊全的世界地圖省會城市的地理位置表。

以下是world.json檔案
{
    "coordinates" : {
        "阿富汗" : [69.11, 34.28],
        "阿爾巴尼亞" : [19.49, 41.18],
        "阿爾及利亞" : [3.08, 36.42],
        "美屬薩摩亞" : [-170.43, -14.16],
        "安道​​爾" : [1.32, 42.31],
        "安哥拉" : [13.15, -8.50],
        "安地卡及巴布達" : [-61.48, 17.20],
        "阿根廷" : [-60.00, -36.30
]
, "亞美尼亞" : [44.31, 40.10], "阿魯巴" : [-70.02, 12.32], "澳大利亞" : [149.08, -35.15], "奧地利" : [16.22, 48.12], "亞塞拜然" : [49.56, 40.29], "巴哈馬" : [-77.20, 25.05], "巴林" : [50.30, 26.10], "孟加拉國" : [90.26, 23.43], "巴貝多" : [-59.30, 13.05], "白俄羅斯" : [27.30
, 53.52]
, "比利時" : [4.21, 50.51], "貝里斯" : [-88.30, 17.18], "貝南" : [2.42, 6.23], "不丹" : [89.45, 27.31], "玻利維亞" : [-68.10, -16.20], "波斯尼亞和黑塞哥維那" : [18.26, 43.52], "波札那" : [25.57, -24.45], "巴西" : [-47.55, -15.47], "英屬維爾京群島" : [-64.37, 18.27], "汶萊" : [115.00, 4.52], "保加利亞" : [23.20, 42.45], "布吉納法索" : [-1.30, 12.15], "蒲隆地" : [29.18, -3.16], "柬埔寨" : [104.55, 11.33], "喀麥隆" : [11.35, 3.50], "加拿大" : [-75.42, 45.27], "維德角" : [-23.34, 15.02], "開曼群島" : [-81.24, 19.20], "中非共和國" : [18.35, 4.23], "查德" : [14.59, 12.10], "智利" : [-70.40, -33.24], "中國" : [116.20, 39.55], "哥倫比亞" : [-74.00, 4.34], "葛摩" : [43.16, -11.40], "剛果" : [15.12, -4.09], "哥斯大黎加" : [-84.02, 9.55], "象牙海岸" : [-5.17, 6.49], "克羅埃西亞" : [15.58, 45.50], "古巴" : [-82.22, 23.08], "塞普勒斯" : [33.25, 35.10], "捷克共和國" : [14.22, 50.05], "朝鮮" : [125.30, 39.09], "剛果(扎伊爾)" : [15.15, -4.20], "丹麥" : [12.34, 55.41], "吉布提" : [42.20, 11.08], "多明尼加" : [-61.24, 15.20], "多明尼加共和國" : [-69.59, 18.30], "東帝汶" : [125.34, -8.29], "厄瓜多" : [-78.35, -0.15], "埃及" : [31.14, 30.01], "薩爾瓦多" : [-89.10, 13.40], "赤道幾內亞" : [8.50, 3.45], "厄利垂亞" : [38.55, 15.19], "愛沙尼亞" : [24.48, 59.22], "衣索比亞" : [38.42, 9.02], "福克蘭群島(馬爾維納斯群島)" : [-59.51, -51.40], "法羅群島" : [-6.56, 62.05], "斐濟" : [178.30, -18.06], "芬蘭" : [25.03, 60.15], "法國" : [2.20, 48.50], "法屬蓋亞那" : [-52.18, 5.05], "法屬波利尼西亞" : [-149.34, -17.32], "加彭" : [9.26, 0.25], "甘比亞" : [-16.40, 13.28], "喬治亞" : [44.50, 41.43], "德國" : [13.25, 52.30], "迦納" : [-0.06, 5.35], "希臘" : [23.46, 37.58], "格陵蘭" : [-51.35, 64.10], "瓜德羅普島" : [-61.44, 16.00], "瓜地馬拉" : [-90.22, 14.40], "根西島" : [-2.33, 49.26], "幾內亞" : [-13.49, 9.29], "幾內亞比索" : [-15.45, 11.45], "蓋亞那" : [-58.12, 6.50], "海地" : [-72.20, 18.40], "赫德島和麥當勞群島" : [74.00, -53.00], "宏都拉斯" : [-87.14, 14.05], "匈牙利" : [19.05, 47.29], "冰島" : [-21.57, 64.10], "印度" : [77.13, 28.37], "印度尼西亞" : [106.49, -6.09], "伊朗" : [51.30, 35.44], "伊拉克" : [44.30, 33.20], "愛爾蘭" : [-6.15, 53.21], "以色列" : [35.12, 31.47], "義大利" : [12.29, 41.54], "牙買加" : [-76.50, 18.00], "約旦" : [35.52, 31.57], "哈薩克" : [71.30, 51.10], "肯亞" : [36.48, -1.17], "吉里巴斯" : [173.00, 1.30], "科威特" : [48.00, 29.30], "吉爾吉斯斯坦" : [74.46, 42.54], "寮國" : [102.36, 17.58], "拉脫維亞" : [24.08, 56.53], "黎巴嫩" : [35.31, 33.53], "賴索托" : [27.30, -29.18], "賴比瑞亞" : [-10.47, 6.18], "阿拉伯利比亞民眾國" : [13.07, 32.49], "列支敦斯登" : [9.31, 47.08], "立陶宛" : [25.19, 54.38], "盧森堡" : [6.09, 49.37], "馬達加斯加" : [47.31, -18.55], "馬拉維" : [33.48, -14.00], "馬來西亞" : [101.41, 3.09], "馬爾地夫" : [73.28, 4.00], "馬裡" : [-7.55, 12.34], "馬耳他" : [14.31, 35.54], "馬提尼克島" : [-61.02, 14.36], "茅利塔尼亞" : [57.30, -20.10], "馬約特島" : [45.14, -12.48], "墨西哥" : [-99.10, 19.20], "密克羅尼西亞(聯邦) " : [158.09, 6.55], "摩爾多瓦共和國" : [28.50, 47.02], "莫三比克" : [32.32, -25.58], "緬甸" : [96.20, 16.45], "納米比亞" : [17.04, -22.35], "尼泊爾" : [85.20, 27.45], "荷蘭" : [4.54, 52.23], "荷屬安的列斯" : [-69.00, 12.05], "新喀里多尼亞" : [166.30, -22.17], "紐西蘭" : [174.46, -41.19], "尼加拉瓜" : [-86.20, 12.06], "尼日" : [2.06, 13.27], "奈及利亞" : [7.32, 9.05], "諾福克島" : [168.43, -45.20], "北馬裡亞納群島" : [145.45, 15.12], "挪威" : [10.45, 59.55], "阿曼" : [58.36, 23.37], "巴基斯坦" : [73.10, 33.40], "帛琉" : [134.28, 7.20], "巴拿馬" : [-79.25, 9.00], "巴布亞紐幾內亞" : [147.08, -9.24], "巴拉圭" : [-57.30, -25.10], "祕魯" : [-77.00, -12.00], "菲律賓" : [121.03, 14.40], "波蘭" : [21.00, 52.13], "葡萄牙" : [-9.10, 38.42], "波多黎各" : [-66.07, 18.28], "卡達" : [51.35, 25.15], "韓國" : [126.58, 37.31], "羅馬尼亞" : [26.10, 44.27], "俄羅斯" : [37.35, 55.45], "盧安達" : [30.04, -1.59], "聖克里斯多福及尼維斯" : [-62.43, 17.17], "聖露西亞" : [-60.58, 14.02], "聖皮埃爾和密克隆" : [-56.12, 46.46], "聖文森及格瑞那丁" : [-61.10, 13.10], "薩摩亞" : [-171.50, -13.50], "聖馬利諾" : [12.30, 43.55], "聖多美和普林西比" : [6.39, 0.10], "沙烏地阿拉伯" : [46.42, 24.41], "塞內加爾" : [-17.29, 14.34], "獅子山" : [-13.17, 8.30], "斯洛伐克" : [17.07, 48.10], "斯洛維尼亞" : [14.33, 46.04], "索羅門群島" : [159.57, -9.27], "索馬利亞" : [45.25, 2.02], "比勒陀利亞" : [28.12, -25.44], "西班牙" : [-3.45, 40.25], "蘇丹" : [32.35, 15.31], "蘇利南" : [-55.10, 5.50], "史瓦濟蘭" : [31.06, -26.18], "瑞典" : [18.03, 59.20], "瑞士" : [7.28, 46.57], "阿拉伯敘利亞共和國" : [36.18, 33.30], "塔吉克" : [68.48, 38.33], "泰國" : [100.35, 13.45], "馬其頓" : [21.26, 42.01], "多哥" : [1.20, 6.09], "湯加" : [-174.00, -21.10], "突尼西亞" : [10.11, 36.50], "土耳其" : [32.54, 39.57], "土庫曼" : [57.50, 38.00], "吐瓦魯" : [179.13, -8.31], "烏干達" : [32.30, 0.20], "烏克蘭" : [30.28, 50.30], "阿聯酋" : [54.22, 24.28], "英國" : [-0.05, 51.36], "坦尚尼亞" : [35.45, -6.08], "美國" : [-77.02, 39.91], "美屬維爾京群島" : [-64.56, 18.21], "烏拉圭" : [-56.11, -34.50], "烏茲別克" : [69.10, 41.20], "萬那杜" : [168.18, -17.45], "委內瑞拉" : [-66.55, 10.30], "越南" : [105.55, 21.05], "南斯拉夫" : [20.37, 44.50], "尚比亞" : [28.16, -15.28], "辛巴威" : [31.02, -17.43], "日本":[139.69, 35.70] }
, "UTF8Encoding" : true }

2、畫出顏色漸變的世界地圖 及 在地圖上標註出各個省會的地理位置

2.1 初始化世界地圖

function load_world_map(max, data){
    //國家名稱中英文對應關係
    var nameMap = {
            'Afghanistan':'阿富汗',
            'Angola':'安哥拉',
            'Albania':'阿爾巴尼亞',
            'United Arab Emirates':'阿拉伯聯合大公國',
            'Argentina':'阿根廷',
            'Armenia':'亞美尼亞',
            'French Southern and Antarctic Lands':'法屬南半球領地',
            'Australia':'澳大利亞',
            'Austria':'奧地利',
            'Azerbaijan':'亞塞拜然',
            'Burundi':'蒲隆地',
            'Belgium':'比利時',
            'Benin':'貝南',
            'Burkina Faso':'布吉納法索',
            'Bangladesh':'孟加拉國',
            'Bulgaria':'保加利亞',
            'The Bahamas':'巴哈馬',
            'Bosnia and Herzegovina':'波黑',
            'Belarus':'白俄羅斯',
            'Belize':'貝里斯',
            'Bermuda':'百慕大',
            'Bolivia':'玻利維亞',
            'Brazil':'巴西',
            'Brunei':'汶萊',
            'Bhutan':'不丹',
            'Botswana':'波札那',
            'Central African Republic':'中非共和國',
            'Canada':'加拿大',
            'Switzerland':'瑞士',
            'Chile':'智利',
            'China':'中國',
            'Ivory Coast':'象牙海岸',
            'Cameroon':'喀麥隆',
            'Democratic Republic of the Congo':'剛果民主共和國',
            'Republic of the Congo':'剛果共和國',
            'Colombia':'哥倫比亞',
            'Costa Rica':'哥斯大黎加',
            'Cuba':'古巴',
            'Northern Cyprus':'北塞普勒斯',
            'Cyprus':'塞普勒斯',
            'Czech Republic':'捷克',
            'Germany':'德國',
            'Djibouti':'吉布提',
            'Denmark':'丹麥',
            'Dominican Republic':'多明尼加共和國',
            'Algeria':'阿爾及利亞',
            'Ecuador':'厄瓜多',
            'Egypt':'埃及',
            'Eritrea':'厄利垂亞',
            'Spain':'西班牙',
            'Estonia':'愛沙尼亞',
            'Ethiopia':'衣索比亞',
            'Finland':'芬蘭',
            'Fiji':'斐濟',
            'Falkland Islands':'福克蘭群島',
            'France':'法國',
            'Gabon':'加彭',
            'United Kingdom':'英國',
            'Georgia':'喬治亞',
            'Ghana':'迦納',
            'Guinea':'幾內亞',
            'Gambia':'甘比亞',
            'Guinea Bissau':'幾內亞比索',
            'Equatorial Guinea':'赤道幾內亞',
            'Greece':'希臘',
            'Greenland':'格陵蘭島',
            'Guatemala':'瓜地馬拉',
            'French Guiana':'法屬蓋亞那',
            'Guyana':'蓋亞那',
            'Honduras':'宏都拉斯',
            'Croatia':'克羅埃西亞',
            'Haiti':'海地',
            'Hungary':'匈牙利',
            'Indonesia':'印度尼西亞',
            'India':'印度',
            'Ireland':'愛爾蘭',
            'Iran':'伊朗',
            'Iraq':'伊拉克',
            'Iceland':'冰島',
            'Israel':'以色列',
            'Italy':'義大利',
            'Jamaica':'牙買加',
            'Jordan':'約旦',
            'Japan':'日本',
            'Kazakhstan':'哈薩克',
            'Kenya':'肯亞',
            'Kyrgyzstan':'吉爾吉斯斯坦',
            'Cambodia':'柬埔寨',
            'South Korea':'韓國',
            'Kosovo':'科索沃',
            'Kuwait':'科威特',
            'Laos':'寮國',
            'Lebanon':'黎巴嫩',
            'Liberia':'賴比瑞亞',
            'Libya':'利比亞',
            'Sri Lanka':'斯里蘭卡',
            'Lesotho':'賴索托',
            'Lithuania':'立陶宛',
            'Luxembourg':'盧森堡',
            'Latvia':'拉脫維亞',
            'Morocco':'摩洛哥',
            'Moldova':'摩爾多瓦',
            'Madagascar':'馬達加斯加',
            'Mexico':'墨西哥',
            'Macedonia':'馬其頓',
            'Mali':'馬裡',
            'Myanmar':'緬甸',
            'Montenegro':'黑山',
            'Mongolia':'蒙古',
            'Mozambique':'莫三比克',
            'Mauritania':'茅利塔尼亞',
            'Malawi':'馬拉維',
            'Malaysia':'馬來西亞',
            'Namibia':'納米比亞',
            'New Caledonia':'新喀里多尼亞群島',
            'Niger':'尼日',
            'Nigeria':'奈及利亞',
            'Nicaragua':'尼加拉瓜',
            'Netherlands':'荷蘭',
            'Norway':'挪威',
            'Nepal':'尼泊爾',
            'New Zealand':'紐西蘭',
            'Oman':'阿曼',
            'Pakistan':'巴基斯坦',
            'Panama':'巴拿馬',
            'Peru':'祕魯',
            'Philippines':'菲律賓',
            'Papua New Guinea':'巴布亞紐幾內亞',
            'Poland':'波蘭',
            'Puerto Rico':'波多黎各',
            'North Korea':'朝鮮',
            'Portugal':'葡萄牙',
            'Paraguay':'巴拉圭',
            'Qatar':'卡達',
            'Romania':'羅馬尼亞',
            'Russia':'俄羅斯',
            'Rwanda':'盧安達',
            'Western Sahara':'西薩摩亞',
            'Saudi Arabia':'沙烏地阿拉伯',
            'Sudan':'蘇丹',
            'South Sudan':'南蘇丹',
            'Senegal':'塞內加爾',
            'Solomon Islands':'索羅門群島',
            'Sierra Leone':'獅子山',
            'El Salvador':'薩爾瓦多',
            'Somaliland':'索馬利亞蘭',
            'Somalia':'索馬利亞',
            'Republic of Serbia':'塞爾維亞',
            'Suriname':'蘇利南',
            'Slovakia':'斯洛伐克',
            'Slovenia':'斯洛維尼亞',
            'Sweden':'瑞典',
            'Swaziland':'史瓦濟蘭',
            'Syria':'敘利亞',
            'Chad':'查德',
            'Togo':'多哥',
            'Thailand':'泰國',
            'Tajikistan':'塔吉克',
            'Turkmenistan':'土庫曼',
            'East Timor':'東帝汶',
            'Trinidad and Tobago':'特里尼達和多巴哥',
            'Tunisia':'突尼西亞',
            'Turkey':'土耳其',
            'United Republic of Tanzania':'坦尚尼亞',
            'Uganda':'烏干達',
            'Ukraine':'烏克蘭',
            'Uruguay':'烏拉圭',
            'United States of America':'美國',
            'Uzbekistan':'烏茲別克',
            'Venezuela':'委內瑞拉',
            'Vietnam':'越南',
            'Vanuatu':'萬那杜共和國',
            'West Bank':'西岸',
            'Yemen':'葉門',
            'South Africa':'南非',
            'Zambia':'尚比亞',
            'Zimbabwe':'辛巴威',
            'Singapore':"新加坡"
            };

    var mapData = [];
    $.each(data, function(i, obj){
        var name = obj.name;
        for(var key in nameMap) {
            if( nameMap[key] == obj.name){
                name = key;
            }
        } 

        mapData.push({
            name : name,
            value : obj.value,
            tooltip : {
                formatter : "{a}<br/>"+nameMap[name]+":"+obj.value
            }
        });
    })

    var option = {
        tooltip: {
            trigger: 'item'
        },
        visualMap: {
            show: true,
            min: 0,
            max: max,
            left: 'left',
            top: 'bottom',
            text: ['高','低'], // 文字,預設為數值文字
            calculable: true,
            seriesIndex:0,   //多個series組成元素,此顏色配置範圍只用於series[0]
            inRange: {
                color: ['lightskyblue', 'yellow', 'orange']
            }
        },
        geo: {
            map: 'world',
            show: true,
            zoom: 1.2,
            label:{
                normal: {
                    show:false
                },
                emphasis: {
                    show:true
                }
            },
            roam: true,
            selectedMode : 'single'
        },
        series: [{
            name: '數量',
            type: 'map',
            map: 'world',
            roam: true,
            zoom: 1.2,
            label:{
                normal: {
                    show:false,
                },
                emphasis : {
                    show : true,
                    formatter: function (params) {
                        return nameMap[params.name];   //此處代替nameMap
                    }
                }
            },
            // nameMap : nameMap, //使用nameMap時,label顯示的會不準確,不在地圖中間
            data: mapData,
            geoIndex:0,
        }]
    };

    var worldMapChart = echarts.init(document.getElementById('world-map'));
    worldMapChart.setOption(option);

    worldMapChart.on("click", function(param) {
        var country_zh = param.name;
        if (country_zh != undefined && country_zh!=null) {
            country_zh = nameMap[country_zh];  //獲取中文名稱
            common.doSearch("country", country_zh);
        }
    });

    $('#world-map-box').resize(function() {
        worldMapChart.resize();
    });

}

2.2 載入資料,使地圖顏色漸變,並標註各個國家的省會地理位置

function loadData(){
    var data = [{
            "name" : "中國",
            "value" : 20677
        }, {
            "name" : "美國",
            "value" : 3337
        }, {
            "name" : "日本",
            "value" : 484
        }, {
            "name" : "韓國",
            "value" : 347
        }, {
            "name" : "印度",
            "value" : 154
        }, {
            "name" : "澳大利亞",
            "value" : 124
        }, {
            "name" : "德國",
            "value" : 102
        }, {
            "name" : "新加坡",
            "value" : 101
        }, {
            "name" : "泰國",
            "value" : 91
        }, {
            "name" : "加拿大",
            "value" : 81
        }, {
            "name" : "法國",
            "value" : 58
        }, {
            "name" : "英國",
            "value" : 56
        }, {
            "name" : "越南",
            "value" : 56
        }, {
            "name" : "荷蘭",
            "value" : 43
        }, {
            "name" : "印度尼西亞",
            "value" : 40
        }, {
            "name" : "馬來西亞",
            "value" : 39
        }, {
            "name" : "俄羅斯",
            "value" : 38
        }, {
            "name" : "墨西哥",
            "value" : 38
        }, {
            "name" : "義大利",
            "value" : 34
        }, {
            "name" : "菲律賓",
            "value" : 33
        }, {
            "name" : "波蘭",
            "value"