天天看點

記錄echart下鑽到省 市兩級地圖

記錄echart下鑽到省 市兩級地圖測試小demo

昨天開始做的時候在網上查了半天,我心裡也很疑惑,地圖的資料從哪裡來的。然後就看到網上各種要下載下傳china.js,province.js。我就到各個部落格去看有沒有免費的,結果沒有。。。最後終于找到一個百度雲盤,下載下傳了China.js。下載下傳完成之後滿心歡喜,雖然沒弄到省份的,起碼中國的有了吧。我一打開js檔案發現後面一堆亂碼。。。。我想呀,沒事。照樣用。結果因為我們項目是用vue寫的,china.js檔案裡面有this指向的問題,就跟vue起沖突了,地圖怎麼也加載不出來,還報錯。T_T。。。

最搞笑的來了呀,我在引echarts的時候發現echarts的包裡面有china.js(echarts/map/js/china)…裡面還有各個省份的js(echarts/map/js/province/anhui),省份有點麻煩,如果所有的省份都要就需要引入三十多個,不知道有沒有人有更好的辦法。

貼圖:

記錄echart下鑽到省 市兩級地圖

其實一開始拿到這個需求的時候我也是懵逼的,地圖上的資料怎麼搞?怎麼知道我的資料定位在哪?我怎麼從省下磚到市?一臉懵逼。其實寫完小demo就發現邏輯很簡單。就是當展示全國地圖的時候,是一個全國是、各省分的option,點選省份要展示市的時候直接重新加載畫布換一個option就可以了。echarts真的是一個強大的工具。上主要代碼

initChart() {
        let myChart = echarts.init(document.getElementById('echartMap'))
        let data = [{
            name: '湖北',
            value1: this.randdomData(),
            value2: this.randdomData()
        }, {
            name: '北京',
            value1: this.randdomData(),
            value2: this.randdomData()
        }, {
            name: '上海',
            value1: this.randdomData(),
            value2: this.randdomData()
        }, {
            name: '浙江',
            value1: this.randdomData(),
            value2: this.randdomData()
        }, {
            name: '四川',
            value1: this.randdomData(),
            value2: this.randdomData()
        }]
        let resultdata0 = []
        let sum0 = 0
        let titledata = []
        for(let i = 0; i < data.length; i++){
            let d0 = {
                name: data[i].name,
                value: data[i].value1 + data[i].value2
            }
            titledata.push(data[i].name)
            resultdata0.push(d0)
            sum0 += data[i].value1 + data[i].value2
        }
        let option = {
            title: [{
                text: '測試地圖', // 标題
                subtext: '僅僅隻是測試',
                left: 'left'
            }, {
                text: '全部:' + sum0, // 标題文字展示總和
                right: '54%',
                top: 40, // 文字位置
                width: 100,
                textStyle: {
                    color: '#555',
                    fontSize: 16
                }
            }],
            tooltip: {
                trigger: 'item'
            },
            visualMap: {
                min: 0, // 指定元件允許的最小值
                max: 2500, // 指定元件允許的最大值
                left: 'left', // 距容器左側邊距
                top: '50', // 距容器上冊邊距
                text: ['高', '滴'], // 最大最小值得文字描述
                calculable: true, // 是否顯示拖拽的搖桿
                colorLightness: [0.2, 100],
                color: ['#c50500', '#e5cf0d', '#5ablef'],
                dimension: 0
            },
            toolbox: { // 懸浮框
                show: false,
                orient: 'vertical',
                left: 'right',
                top: 'center',
                feature: {
                    dataView: {
                        readOnly: false
                    },
                    restore: {},
                    saveAsImage: {}
                }
            },
            grid: {
                right: '10%',
                top: 100,
                bottom: 40,
                height: '40%',
                width: '100%'
            },
            // 重點是這裡
            series: [{
                z: 1,
                name: '全部',
                type: 'map', // 圖示類型
                map: 'china', // china就展示中國地圖,省份名字就展示省份地圖
                left: '10',
                right: '5%',
                top: 100,
                bottom: '3%',
                zoom: 1,
                label: {
                    normal: {
                        show: true
                    },
                    emphasis: {
                        show: true
                    }
                },
                // 有資料就高亮展示的地方
                data: resultdata0
            }]
        }
        // 地圖進行點選
        let Prov = ''
        myChart.on('click', (params) => {
            console.log(params)
            if(this.isProvince) {
                this.isProvince = !this.isProvince
                let proviceChart = echarts.init(document.getElementById('echartMap'))
                Prov = params.name
                option = {
                tooltip: {
                    trigger: 'item',
                    formatter: '{b}'
                },
                series: [
                    {
                        name: '中國',
                        type: 'map',
                        mapType: Prov,
                        selecteMode: 'single',
                        layoutCenter: ['50%', '50%'],
                        layoutSize: 600, //省份地圖大小
                        label: {
                            normal: {
                                show: true
                            },
                            emphasis: {
                                show: true
                            }
                        },
                        data: []
                    }
                ]
                }
                proviceChart.setOption(option)
                }
        })
        
        myChart.setOption(option)
    },
    randdomData() {
        return Math.round(Math.random()*1000)
    },
    NumDescSort(a, b) {
        return a.value - b.value
    }, 
           

以上隻是一簡單的demo,沒有任何的樣式。需要可以去echart官網讀一讀配置項手冊,不要嫌麻煩,真的很有用。

最終效果(真的醜,但是可以調的)

記錄echart下鑽到省 市兩級地圖
記錄echart下鑽到省 市兩級地圖

本文啟蒙文章,參考位址