描述: 公司需要将中国划分成八个区域,华北,东北,华东,华中,华南,西南,西北,境外,鼠标指上区域显示每个区域库存与供货,先上效果图:

 

 

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>echarts地图合并-生成中国大区</title>
</head>
<body>
<div id="chinaMap" style="width: 1000px;height: 500px;"></div>
<script type="text/javascript" src="./jquery.min.js"></script>
<script type="text/javascript" src="./echarts.min.js"></script>
<script type="text/javascript">
    repRegionStrategy();

    var mergeProvinces = function(chinaJson, names, properties) {//合并大区里省份的coordinates
        var features = chinaJson.features;
        var polygons = [];
        var polygons2 = [];
        
        for(var i = 0; i < names.length; i++) {
            var polygonsCoordinates = [];
            var polygonsEncodeOffsets = [];
            for(var z = 0; z < names[i].length;z++){
                for(var j = 0; j < features.length; j++) {
                    if(features[j].properties.name == names[i][z]) {
                        if(features[j].geometry.coordinates[0].constructor == String){//合并coordinates
                            for(var l = 0; l<features[j].geometry.coordinates.length;l++){
                                polygonsCoordinates.push(features[j].geometry.coordinates[l]);
                            }
                            
                        }else if(features[j].geometry.coordinates[0].constructor == Array){
                            for(var k=0;k<features[j].geometry.coordinates.length;k++){
                                for(var d=0;d<features[j].geometry.coordinates[k].length;d++){
                                    polygonsCoordinates.push(features[j].geometry.coordinates[k][d]);
                                }
                            }
                        }
                        
                        
                        
                        if(features[j].geometry.encodeOffsets[0].constructor == String){//合并encodeOffsets
                            polygonsEncodeOffsets.push(features[j].geometry.encodeOffsets);
                        }else if(features[j].geometry.encodeOffsets[0].constructor == Array){
                            for(var k=0;k<features[j].geometry.encodeOffsets.length;k++){
                                if(features[j].geometry.encodeOffsets[k][0].constructor == Array){
                                    for(var e=0;e<features[j].geometry.encodeOffsets[k].length;e++){
                                        polygonsEncodeOffsets.push(features[j].geometry.encodeOffsets[k][e]);
                                    }
                                }else{
                                    polygonsEncodeOffsets.push(features[j].geometry.encodeOffsets[k]);
                                }
                            }
                        }
                        
                        break;
                    }
                }
            }
            polygons.push(polygonsCoordinates);
            polygons2.push(polygonsEncodeOffsets);
            
        }
        
        // 构建新的合并区域
        var features = [];
        
        for(var a = 0;a<names.length;a++){
            var feature = {
                id: features.length.toString(),
                type: "FeatureCollection",
                geometry: {
                    type: "Polygon",
                    coordinates: polygons[a],
                    encodeOffsets: polygons2[a]
                },
                properties: {
                    name: properties.name[a] || "",
                    childNum:polygons[a].length
                }
            };
            if(properties.cp[a]) {
                feature.properties.cp = properties.cp[a];
            }
            
            // 将新的合并区域添加到地图中
            features.push(feature);
        }
        chinaJson.features = features;
        
    };
     
    function repRegionStrategy(){
        $.get('./china.json', function (chinaJson) {
            var params = {
                    names: [//把各个大区的省份用二维数组分开
                        ['北京','天津','河北','山西','内蒙古'],
                        ["黑龙江","吉林","辽宁"],
                        ['山东','江苏','安徽','江西','浙江','福建','上海'],
                        ['河南','湖北','湖南'],
                        ['广东','广西','海南'],
                        ['重庆','四川','云南','西藏','贵州'],
                        ['陕西','甘肃','青海','宁夏','新疆'],
                        ['香港','澳门','台湾']
                    ],
                    properties: {//自定义大区的名字,要和上面的大区省份一一对应
                        name: ['华北','东北','华东','华中','华南','西南','西北','境外'],
                        cp: [//经纬度可以自己随意定义,如'东北'等在地图的位置
                            [134.47,47.78],
                            [126.32,43.50],
                            [121.28,31.13],
                            [114.20,30.32],
                            [113.15,23.08],
                            [104.04,30.39],
                            [103.49,36.03],
                            [103.49,56.03]
                        ]
                    }
                };
            
            mergeProvinces(chinaJson, params.names, params.properties);
            
            echarts.registerMap('china', chinaJson); // 注册地图
            var pRChart = echarts.init(document.getElementById('chinaMap'));
     
            var data = [//地图数据
                    {
                        "name": "东北", 
                        "value": [['库存', '12亿', '30%'], ['供货', '1亿', '10%']]
                    }, 
                    {
                        "name": "华北", 
                        "value": [['库存', '22亿', '30%'], ['供货', '12亿', '10%']]
                    }, 
                    {
                        "name": "华南", 
                        "value": [['库存', '13亿', '30%'], ['供货', '3亿', '10%']]
                    }, 
                    {
                        "name": "华东", 
                        "value": [['库存', '2亿', '60%'], ['供货', '1亿', '20%']]
                    }, 
                    {
                        "name": "华中", 
                        "value": [['库存', '12亿', '33%'], ['供货', '5亿', '10%']]
                    }, 
                    {
                        "name": "西南", 
                        "value": [['库存', '22亿', '30%'], ['供货', '8亿', '10%']]
                    }, 
                    {
                        "name": "西北", 
                        "value": [['库存', '14亿', '50%'], ['供货', '2亿', '10%']]
                    },
                    {
                        "name": "境外", 
                        "value": [['库存', '19亿', '20%'], ['供货', '1亿', '10%']]
                    }
            ];
            
            option = {
                tooltip: {//鼠标放上去提示
                    trigger: 'item',
                    backgroundColor: '#fff',
                    padding: 0,
                    textStyle:{
                        color: '#333'
                    },
                    formatter: function (params) {
                        
                        var style = `
                            <style>
                            .title{background:#f1f4fc;line-height:25px;text-align:center;padding:5px 10px;}
                                table{width:100%;text-align:center;border-collapse:collapse;}
                                table td{border-right:1px solid #ddd;border-bottom:1px solid #ddd;padding:5px 10px;}
                                 table td:last-child{border-right:0;}
                            </style>
                        `

                        var title = `<div class="title">${params.name}</div><table>`,
                            con = '',
                            bottom = '</table>';

                        if(params.data) {
                            var arr = params.data.value
                            for(var i = 0; i < arr.length; i++) {
                                con += `<tr><td>${arr[i][0]}</td><td>${arr[i][1]}</td><td>${arr[i][2]}</td></tr>`
                            }
                        }                                        
                        return style + title + con + bottom
                    }
                }, 
                series: [
                    {
                        name: '大区',//城市
                            type: 'map',
                            map: 'china',
                            geoIndex: 1,
                            aspectScale: 0.75, //长宽比
                            symbolSize: 20,
                            data: data,
                            showLegendSymbol: true, // 存在legend时显示
                            label: {
                                normal: {
                                    show: false,
                                    textStyle: {
                                        color: '#333'
                                    }
                                },
                                emphasis: {//鼠标放上去时的状态
                                    show: false,
                                    textStyle: {
                                        color: '#333'
                                    }
                                }
                            },
                            roam: false,//禁止拖拽和伸缩
                            itemStyle: {
                                normal: {
                                    areaColor: '#d3dae1',
                                    borderColor: '#fff',
                                    borderWidth: 1
                                },
                                emphasis: {
                                    areaColor: '#3c55b7'
                                }
                            }
                    }
              ]    
            };
         pRChart.setOption(option,true);
     });
    }   
</script>
</body>
</html>