echarts合并地图,把中国各个省份分成'华北','东北','华东','华中','华南','西南',&

Posted zzwlong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了echarts合并地图,把中国各个省份分成'华北','东北','华东','华中','华南','西南',&相关的知识,希望对你有一定的参考价值。

最近公司有个需求是按照大区,即把中国分成华北\',\'东北\',\'华东\',\'华中\',\'华南\',\'西南\',\'西北\'七个大区,

但是echarts地图只有省市,还没有大区,只能自己网上找资料再按需求写了

  echarts地图合并关键点是把coordinates和encodeOffsets合并,而且这两个必须都合并,且最多只能合并到二维数组,合并到三维数组就不行了。

  实例结果截图

  

 

  代码:

    

<!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 class="echarts-map">
<div class="echarts-map-box" id="echartsMapBox" style="width: 1000px;height: 400px;"></div>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="js/echarts.min.js"></script>
<script type="text/javascript" src="js/china.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	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(){debugger;
	$.get(\'js/china.json\', function (chinaJson) {
		var params = {
				names: [//把各个大区的省份用二维数组分开
					[\'北京\',\'天津\',\'河北\',\'山西\',\'内蒙古\'],
					["黑龙江","吉林","辽宁"],
					[\'山东\',\'江苏\',\'安徽\',\'江西\',\'浙江\',\'福建\',\'上海\',\'台湾\'],
					[\'河南\',\'湖北\',\'湖南\'],
					[\'广东\',\'广西\',\'海南\',\'香港\',\'澳门\'],
					[\'重庆\',\'四川\',\'云南\',\'西藏\',\'贵州\'],
					[\'陕西\',\'甘肃\',\'青海\',\'宁夏\',\'新疆\']
				],
				properties: {//自定义大区的名字,要和上面的大区省份一一对应
					name: [\'华北\',\'东北\',\'华东\',\'华中\',\'华南\',\'西南\',\'西北\'],
					cp: [//经纬度可以自己随意定义
						[116.24,39.54],
						[126.32,43.50],
						[121.28,31.13],
						[114.20,30.32],
						[113.15,23.08],
						[104.04,30.39],
						[103.49,36.03]
					]
				}
			};
		
		mergeProvinces(chinaJson, params.names, params.properties);
		
		echarts.registerMap(\'china\', chinaJson); // 注册地图
		var pRChart = echarts.init(document.getElementById(\'echartsMapBox\'));

		var data = [//地图数据
			{
                "name": "东北", 
                "value": 3685
            }, 
            {
                "name": "华北", 
                "value": 7342
            }, 
            {
                "name": "华南", 
                "value": 21416
            }, 
            {
                "name": "华东", 
                "value": 25314
            }, 
            {
                "name": "华中", 
                "value": 2500
            }, 
            {
                "name": "西南", 
                "value": 10427
            }, 
            {
                "name": "西北", 
                "value": 2440
            }
		];
		
		option = {
			backgroundColor: \'#fff\',//地图背景色
		    title : {
		        text: \'营销策略\',
		        left: \'center\',
		        top: \'top\',
		        textStyle: {
		            color: \'#333\'
		        }
		    },
		    grid: {    //echarts地图距离容器位置
		    	left:20,
		    	top:20,
	            containLabel: false,
	          },
		    tooltip: {//鼠标放上去提示
		    	trigger: \'item\'
		    },
		  //左侧小导航图标
            visualMap: {  
                show : true,  
                type: \'continuous\',                     // 定义为连续型 viusalMap
                min:10,                                  //指定 visualMapContinuous 组件的允许的最小值
                max:100000,
                minOpen:true,                       //界面上会额外多出一个『< min』的选块
                maxOpen:true,
                realtime:true,
                itemWidth:20, 
                align:"auto",
                left:"50px",                              //组件离容器左侧的距离,\'left\', \'center\', \'right\',\'20%\'
                top:"auto",
                orient:"vertical",
                hoverLink:true,
                inverse:false,
                text:[\'高\', \'低\'],
                inRange:{                               //定义 在选中范围中 的视觉元素
                    color: [\'#f6efa6\', \'#ffb61e\', \'#ee9a00\'],
                    symbolSize: [30, 100]
                },
                outOfRange:{  //定义 在选中范围外 的视觉元素。
                    color: [\'#666\', \'#333\', \'#000\'],
                    symbolSize: [30, 100]
                }
            }, 
		    series: [
		      {
		    name: \'大区\',//城市
	            type: \'map\',
	            map: \'china\',
	            geoIndex: 1,
	            aspectScale: 0.75, //长宽比
	            symbolSize: 20,
	            data: data,
	            showLegendSymbol: true, // 存在legend时显示
	            label: {
	                normal: {
	                    show: true,
	                    textStyle: {
	                        color: \'#333\'
	                    }
	                },
	                emphasis: {//鼠标放上去时的状态
	                    show: true,
	                    textStyle: {
	                        color: \'#333\'
	                    }
	                }
	            },
	            roam: true,//禁止拖拽和伸缩
	            itemStyle: {
	                normal: {
	                    areaColor: \'#f6efa6\',
	                    borderColor: \'#a5a279\',
	                    borderWidth: 1
	                },
	                emphasis: {
	                    areaColor: \'#ffdf33\'
	                }
	            }
	        }
		  ]    
		};
	 pRChart.setOption(option,true);
 });
}	

</script>
</div>
</body>
</html>

  

 

 

 

       

以上是关于echarts合并地图,把中国各个省份分成'华北','东北','华东','华中','华南','西南',&的主要内容,如果未能解决你的问题,请参考以下文章

echarts中国及省份地图以及阴影的显示

Echarts 地图 省份的颜色自定义如何设置?

Echarts 地图 省份的颜色自定义如何设置?

echarts 中国地图,根据省份数值高低改变省份颜色深浅

echarts3的中国地图省份名称位置都不在省份中间,位置怎么调整?

报表中如何实现中国地图钻取到各省地图