首页 > 其他分享 >echarts实现世界地图,解决series-map和geo同时使用导致在地图上缩放图层会重叠的问题

echarts实现世界地图,解决series-map和geo同时使用导致在地图上缩放图层会重叠的问题

时间:2023-01-03 10:00:22浏览次数:42  
标签:map name 缩放 series value params var data

主要使用到的配置:

geoIndex

// 将坐标与值对应并反映在地图上
convertData(data) {
    var res = [];
    var that = this
    for (var i = 0; i < data.length; i++) {
        var geoCoord = that.geoCoordMap[data[i].name];
       // console.log('geoCoord',geoCoord)
        if (geoCoord) {
            res.push({
                name: data[i].name,
                value: geoCoord.concat(data[i].value)
            });
        }
    }
    return res;
},
// 获取近5年
getYearList() {
    var yearArr=[];
    var myDate = new Date();   
    nowYear = myDate.getFullYear();//当前年
    this.timeValue = nowYear
    for ( var int = nowYear-4; int <= nowYear; int++) {
        yearArr.push({
            label: int,
            value: int
        });
    }
    return yearArr.reverse();
},
/*获取数据*/
getData(){
    let that = this
    server.getTradeoverview({
        tradeflow: that.tradeflow,
        year: parseInt(that.timeValue),
        hscode: that.industryCode
    }).then(function(res){
        that.result=res.data
        var tempStr = that.tradeflow=='export'?'出口':'进口'
        that.pieces = [
            {min: res.data.section[3], label: '大于'+res.data.section[3],color:'#3267D7'},                     // 不指定 max,表示 max 为无限大(Infinity)。
            {min: res.data.section[2], max: res.data.section[3], label: res.data.section[2]+'-'+res.data.section[3],color:'#1681F0'},
            {min: res.data.section[1], max: res.data.section[2],label: res.data.section[1]+'-'+res.data.section[2],color:'#41ABFF'},
            {min: res.data.section[0], max: res.data.section[1],label: res.data.section[0]+'-'+res.data.section[1],color:'#A3CBFF'},
            {min: 0, max: res.data.section[0],label: '0-'+res.data.section[0],color:'#bdd2ec'},   
            {value: 0, label: '无数据', color: '#EDEDED'}
        ]
        that.tempData = that.dataDeal(res.data.map)
        that.getCountryList()
    })
},
/*转换数据格式给地图着色*/
dataDeal(list){
    var tempArr = []
    list.forEach(function(item,index){
        // console.log('11111-----',item)
        tempArr.push({
            name: item.countryCode,
            value: item.amountCurrent,
            other: item
        })
    })
    return tempArr
},
/*切换年份*/
changeOption(){
    this.getData()
},
/*生成地图*/
getCountryList() {
    var that = this;
    /* 根据请求的数据实例化地图 */
    var chart = echarts.init(document.getElementById('echartsMap'));
    chart.setOption({
        visualMap: { // 分区域着色
            //min: 0,
            //max: 2200000,
            type: 'piecewise',
            // splitNumber:5, //对于连续型数据,自动平均切分成几段。默认为5段
            hoverLink:false,
            itemWidth:12,    //图形的宽度,即长条的宽度。
            itemHeight:12,   //图形的高度,即长条的高度。
            showLabel: true, //是否显示每项的文本标签。默认情况是,如果text 被使用则不显示文本标签,否则显示。
            pieces: that.pieces,
            text:['单位:万元'], // 两端的文本,如['High', 'Low']
            textStyle: { //文本样式
                color: '#777F86'
            },
            bottom: 15 // 组件离容器下侧的距离
        },
        // 移到国家上的效果
        tooltip: {
            trigger: 'item',
            padding: 0,
            enterable: true,
            transitionDuration: 1,
            textStyle: {
                color: '#818A91',
                decoration: 'none',
            },
            backgroundColor: 'rgba(255,255,255,0.96)',
           // borderColor:'#000000',
            //borderWidth: 1,
            formatter: function(params) {
                //console.log('移到某个国家上:',params)
                var tipHtml = '';
                if (params.data&&params.data.other) {
                     tipHtml = '<div style="font-size:13px;min-width:300px;box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.3);border-radius:4px;padding:30px 20px;">'+
                    '<div style="font-size: 16px;color:#333333;">'+params.data.other.countryName+'</div>'+
                    '<div style="padding:6px 0;"><i style="display: inline-block;margin-bottom: 3px;width:6px;margin-right:6px;height: 6px;background: #3472EE;border-radius: 50%;"></i>'+that.timeValue+'年整体进口额为'+(params.data.other.amountCurrent||0)+'万元;</div>'+
                    '<div style="padding:6px 0;"><i style="display: inline-block;margin-bottom: 3px;width:6px;margin-right:6px;height: 6px;background: #3472EE;border-radius: 50%;"></i>'+that.timeValue+'年整体进口所占份额为'+(params.data.other.marketShare||0)+'%;</div>'+
                    '<div style="padding:6px 0;"><i style="display: inline-block;margin-bottom: 3px;width:6px;margin-right:6px;height: 6px;background: #3472EE;border-radius: 50%;"></i>'+that.timeValue+'年年进口额增长率为'+(params.data.other.growthRate||0)+'%;</div>'+
                    '</div>'
                } else {
                    tipHtml = '<div style="font-size:13px;min-width:300px;box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.3);border-radius:4px;padding:30px 20px;">'+
                    '<div style="font-size: 16px;color:#333333;">'+that.nameMap[params.name]+'</div>'+
                    '<div style="text-align:center;padding:20px 0 10px;">无数据</div>'+
                    '</div>'
                }
               
                return tipHtml;
            }
        },
       geo: {
                type: 'map',
                name: '世界地图',
                map: 'world',
                roam: true, // 是否开启鼠标缩放和平移漫游
                itemStyle: { // 每个区域的样式
                    normal: {
                        areaColor: '#EDEDED',
                        borderColor: '#D3D7E1', // 图形的描边颜色
                        borderWidth: 1 //描边线宽
                    },
                    emphasis: { // 高亮状态
                        label: {
                            show: false // 去除鼠标移到地图上,地图上显示国家名的效果
                        }
                        //areaColor: '#7d7d7d'
                    }
                },
                scaleLimit: { // 缩放的极限控制
                    min: 1,
                    max: 3
                },
                left: 40, // 组件离容器左侧的距离
                top: 80, // 组件离容器上侧的距离
                right: 80,
                //nameMap: that.nameMap, //自定义地区的名称映射(bug1:加了这个visualMap会错乱)
                data: that.tempData
        },
        series: [
            {
                type: 'map',
                name: '世界地图',
                map: 'world',
                geoIndex: 0, // (bug fixed:解决在地图上缩放重影问题:https://www.dazhuanlan.com/2019/11/30/5de14b1b3aa97/)
                roam: true, // 是否开启鼠标缩放和平移漫游
                itemStyle: { // 每个区域的样式
                    normal: {
                        areaColor: '#EDEDED',
                        borderColor: '#D3D7E1', // 图形的描边颜色
                        borderWidth: 1 //描边线宽
                    },
                    emphasis: { // 高亮状态
                        label: {
                            show: false // 去除鼠标移到地图上,地图上显示国家名的效果
                        }
                        //areaColor: '#7d7d7d'
                    }
                },
                scaleLimit: { // 缩放的极限控制
                    min: 1,
                    max: 3
                },
                left: 40, // 组件离容器左侧的距离
                top: 80, // 组件离容器上侧的距离
                right: 80,
                //nameMap: that.nameMap, //自定义地区的名称映射(bug1:加了这个visualMap会错乱)
                data: that.tempData
            },
            // 打点
            /*{
                type: 'scatter',
                coordinateSystem: 'geo',
                data: this.convertData([
                    {name: "中国", value: 110},
                    {name: "以色列", value: 110},
                    {name: "法国", value: 110},
                    {name: "澳大利亚", value: 210},
                    {name: "日本", value: 210},
                    {name: "韩国", value: 210},
                    {name: "新加坡", value: 310}
                ]),
                zlevel:12,
                symbolSize: [20,37], // 标记的大小,[宽、高]
                //symbol: 'pin', //气泡
                symbol: 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAlCAYAAABCr8kFAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAC1klEQVRIx+2WS0gVURjHf6OXvD4jM1+ZVhJmWNfwolmhqxaWRFQgLcwIWkVFG90EEUGhmyBKcpdUCGaPhenClZDgq8iyMqy8lo+0C5nPaz6+FndGx7mP5rqIFv3hwJnvO+d3zjffOd+MggnF1l8WM+MAgswONCtLIINHC68of32H/4H/INCrRCRYRE6LyCMR6RmeGZePk04Rkaeq3fxGRMQmIr3iXx9EZLcZWKEEpkJ/sJQAYZqS9BxFB+wEsrRn1+Ist4fv8tjZyNCvERLXxHE0poCzCaewBoXoGa2KouSuAIrIPuC5ZpxZdHHi3UU6J7o9IrFHZlCz4wahQVa9OUdRlHZYPjbFeu+trw/pGHMgCxEerWPMQeVAnXGdEq2jAXfqvU9G2rzCtFY33GoE7tI6WvmK13sHpuaQxSifCRycnjOaEozAFXUu0bIJx7TTJzA+dL3RFGwMeVDvPRK3x2/IxxP2GoHfjcBOvfdCaj72tWleYfa1aZzbmmcEtmsd7dhkA236Ea6FeW72dnLP0T3lnJ22xoSEuYo3Z4Sf32bHGuzx5chUFKVrhUVEXqzypjR4fdEikrlKYLTP7IlIbYCwS/iTiISIyLhJWB9mJCKHTQJtpoAqtO4PsHLTMBVoERGnD9hnf3NXXLmSsooQIBaILjqYn1OQl11lnFDb2Hyyobn9NfADGKkuL531AJaUVUQA23EXiaVFys4UHUtPTV4qTZ++DNVerXxwXx8M8A3oqS4vnQQILimriAVygSjcVzEJdznKann5Nio9NSU6KiLM2ts/OHrtTs0gsAWIARaBSSACSM7cf+BnV0vTlAWwsVwtDgEp+hCuV9W80j2Gqy1RndcP1KvzbUBTkLrSauXxI2oB3gB2dZVnwEY1rA3qa7CqvgXABYzjLld9LJe9BaDLmJR0IM6YeRM7HAHea0nxdmzigHVAJBCqRmEB5tWdTAMTvo7Nbwng09R+hsh2AAAAAElFTkSuQmCC',
                symbolOffset:[0, '-50%'], // 标记相对于原本位置的偏移
                label: {
                    normal: {
                        show: true,
                        offset: [18,-10], // 是否对文字进行偏移。默认不偏移。例如:[30, 40] 表示文字在横向上偏移 30,纵向上偏移 40。
                        formatter: function(params) {
                            console.log('气泡:',params)
                            return '{fline|'+params.data.name+'}';
                        },
                        position: 'insideTopLeft', // 标签相对于图形包围盒左上角的位置。
                        distance:0,
                        backgroundColor: '#16B47F',
                        padding: [0, 0],
                        borderRadius: 3,
                        // verticalAlign:'middle',
                        // lineHeight: 32,
                        color: '#ffffff',
                        rich: {
                            fline: {
                                padding: [4, 6, 4, 6],
                                color: '#ffffff'
                            }
                        }
                    },
                    emphasis: {
                        show: false
                    }
                },
                itemStyle: {
                    emphasis: {
                        borderColor: '#fff',
                        borderWidth: 1
                    }
                }
            }*/
        ]
    },true)
    // 地图点击事件
    chart.on('click', function(params) {
        console.log('---params----',params)
    })
}

 

标签:map,name,缩放,series,value,params,var,data
From: https://www.cnblogs.com/yayuya/p/17021153.html

相关文章

  • 分析.foreach和.map的区别
    在程序员编程的过程中经常会有遍历数组的需要,.foreach和.map都具有遍历的作用,那么他们的共同点和区别是什么呢?我们来分析一下.一、共同点1.都只能遍历数组。2.每次......
  • Java Map实现按value排序
    JavaMap实现按value排序如果想按照key来排序,用TreeMap就可以;如果想实现按value排序,可以采用下面这种方式publicstaticvoidmain(String[]args){Map<St......
  • HashMap-2023-1-2
    packageCollection;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;importjava.util.Set;publicclassMapTest{publicMap<String,Stu......
  • SQL堆叠注入及waf绕过注入;SQL注入之SQLMAP绕过WAF
    堆叠查询注入Stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令......
  • 第十三章《集合》第5节:Map集合
    ​List、Set和Queue都是Collection接口的子接口,因此从更高层次来说它们属于统一类型的集合。Map接口也代表一种集合,但它不是Collection子接口,因此它属于另一种类型的集合。M......
  • pandas库中series数据结构的常用方法
    文章初衷series,又称序列。是pandas库中的一种常用数据结构。为了提高工作效率,笔者总结了该数据结构的一些常用使用方法,尽量使读者只需看本篇文章即可无障碍掌握这个叫seri......
  • QPixmap QImage
    QPixmap  QImage voidScrollBox::setThumbnail(QPixmapimg){QPixmapbkPixmap=img.fromImage(img.toImage().scaled(size(),Qt::IgnoreAspectRatio,Qt......
  • Java Map 集合类简介
    java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储和......
  • rmap反向映射
    数据结构AV&AVC&VMAstructanon_vma{//AV是perVMA的structanon_vma*root;//指向祖宗(root)进程的anon_vmastructanon_vma*parent;//指向父进程的......
  • 18、前端基础-ES6---数组的map&reduce
    ......