使用echarts加载地图

本文介绍了如何使用echarts 2.2.7版本来加载中国地图,强调了高版本中可能缺失的地图实例,并推荐了模块化单文件引入的方式。在实际应用中,开发者需要根据API进行个性化配置。
摘要由CSDN通过智能技术生成

echarts这样的插件很好用,在这直奔重点,以下为注意事项:
1.echarts高版本的是没有中国地图的实例的,使用echarts做低版本的中国地图,需要引入低版本的echarts,这里用的版本是是echarts-2.2.7。
2.引入echarts的方法有三种,模块化包引入,模块化单文件引入(推荐),标签式单文件引入在实例中的代码,引入的方法一般为第二种(不同的引入方式会导致报错),具体http://echarts.baidu.com/echarts2/doc/doc.html#引入ECharts2。
3.echarts中的demo只是简单例子,平常我们使用时要对照的官网上的api根据自己的需求去调试js。
以下是一个中国地图的例子,效果图如下:

//设置一个DOM
<table>
	<tr>
		<td width="50%">
			<div id="china-map" style="width: 100%; height: 350px;"></div>
		</td>
		<td width="50%">
			<div id="rmap" style="width: 100%; height: 350px;"></div>
		</td>
	</tr>
</table>

然后引入js,写js代码

<script language="JavaScript" src="<%=request.getContextPath()%>/Script/component/echarts-2.2.7/build/dist/echarts.js"></script>
<script>
$(document).ready(function(){
	echartsChina();
	echartsrmap();
});

require.config({
    paths: {
        echarts: '<%=request.getContextPath()%>/Script/component/echarts-2.2.7/build/dist'
    }
});
//初始化加载的右边图形的函数
function echartsrmap(){
	 require(
          [
            'echarts',
            'echarts/chart/line',
            'echarts/chart/bar',
            'echarts/chart/scatter',
            'echarts/chart/k',
            'echarts/chart/pie',
            'echarts/chart/radar',
            'echarts/chart/force',
            'echarts/chart/chord',
            'echarts/chart/gauge',
            'echarts/chart/funnel',
            'echarts/chart/eventRiver',
            'echarts/chart/venn',
            'echarts/chart/treemap',
            'echarts/chart/tree',
            'echarts/chart/wordCloud',
            'echarts/chart/heatmap',
            'echarts/chart/map'
          ],
          function (ec) {
             var myChart = ec.init(document.getElementById('rmap'));
				var option = {
				title : {
					text: '',
					subtext: '',
					x:'center'
				},
				tooltip : {
					trigger: 'item',
					formatter: "{a} <br/>{b} : {c} ({d}%)"
				},
				toolbox: {
					feature: {
						saveAsImage: {},
						restore: {},
						dataView: {}
					}
				},
				legend: {
					orient: 'vertical',
					x: 'left',
					data: ['北京','天津','上海','重庆','河北', '河南','云南','辽宁','黑龙江','湖南','安徽','山东','新疆','江苏','浙江', '江西', '湖北', '广西', '甘肃', '山西', '内蒙古', '陕西', '吉林', '福建', 
			'贵州', '广东', '青海', '西藏', '四川', '宁夏', '海南', '台湾', '香港', '澳门']
				},
				series : [
					{
						name: '所占比例',
						type: 'pie',
						radius : '55%',
						center: ['50%', '60%'],
						data:[
						   {name: '北京',value: Math.round(Math.random()*2000)},
								{name: '天津',value: Math.round(Math.random()*2000)},
								{name: '上海',value: Math.round(Math.random()*2000)},
								{name: '重庆',value: Math.round(Math.random()*2000)},
								{name: '河北',value: 0},
								{name: '河南',value: Math.round(Math.random()*2000)},
								{name: '云南',value: 5},
								{name: '辽宁',value: 305},
								{name: '黑龙江',value: Math.round(Math.random()*2000)},
								{name: '湖南',value: 200},
								{name: '安徽',value: Math.round(Math.random()*2000)},
								{name: '山东',value: Math.round(Math.random()*2000)},
								{name: '新疆',value: Math.round(Math.random()*2000)},
								{name: '江苏',value: Math.round(Math.random()*2000)},
								{name: '浙江',value: Math.round(Math.random()*2000)},
								{name: '江西',value: Math.round(Math.random()*2000)},
								{name: '湖北',value: Math.round(Math.random()*2000)},
								{name: '广西',value: Math.round(Math.random()*2000)},
								{name: '甘肃',value: Math.round(Math.random()*2000)},
								{name: '山西',value: Math.round(Math.random()*2000)},
								{name: '内蒙古',value: Math.round(Math.random()*2000)},
								{name: '陕西',value: Math.round(Math.random()*2000)},
								{name: '吉林',value: Math.round(Math.random()*2000)},
								{name: '福建',value: Math.round(Math.random()*2000)},
								{name: '贵州',value: Math.round(Math.random()*2000)},
								{name: '广东',value: Math.round(Math.random()*2000)},
								{name: '青海',value: Math.round(Math.random()*2000)},
								{name: '西藏',value: Math.round(Math.random()*2000)},
								{name: '四川',value: Math.round(Math.random()*2000)},
								{name: '宁夏',value: Math.round(Math.random()*2000)},
								{name: '海南',value: Math.round(Math.random()*2000)},
								{name: '台湾',value: Math.round(Math.random()*2000)},
								{name: '香港',value: Math.round(Math.random()*2000)},
								{name: '澳门',value: Math.round(Math.random()*2000)}
						],
						itemStyle: {
							emphasis: {
								shadowBlur: 10,
								shadowOffsetX: 0,
								shadowColor: 'rgba(0, 0, 0, 0.5)'
							}
						}
					}
				]
			};
			myChart.setOption(option);
          }
      );
	
	
}

//根据左边地图选择省份传入数据显示右边的饼图
function echartsrmapt(data1,data2){
	 require(
          [
            'echarts',
            'echarts/chart/line',
            'echarts/chart/bar',
            'echarts/chart/scatter',
            'echarts/chart/k',
            'echarts/chart/pie',
            'echarts/chart/radar',
            'echarts/chart/force',
            'echarts/chart/chord',
            'echarts/chart/gauge',
            'echarts/chart/funnel',
            'echarts/chart/eventRiver',
            'echarts/chart/venn',
            'echarts/chart/treemap',
            'echarts/chart/tree',
            'echarts/chart/wordCloud',
            'echarts/chart/heatmap',
            'echarts/chart/map'
          ],
          function (ec) {
             var myChart = ec.init(document.getElementById('rmap'));
				var option = {
				title : {
					text: '',
					subtext: '',
					x:'center'
				},
				tooltip : {
					trigger: 'item',
					formatter: "{a} <br/>{b} : {c} ({d}%)"
				},
				toolbox: {
					feature: {
						saveAsImage: {},
						restore: {},
						dataView: {}
					}
				},
				legend: {
					orient: 'vertical',
					x: 'left',
					data: data1
				},
				series : [
					{
						name: '所占比例',
						type: 'pie',
						radius : '55%',
						center: ['50%', '60%'],
						data:data2,
						itemStyle: {
							emphasis: {
								shadowBlur: 10,
								shadowOffsetX: 0,
								shadowColor: 'rgba(0, 0, 0, 0.5)'
							}
						}
					}
				]
			};
			myChart.setOption(option);
          }
      );

}

//加载中国地图
function echartsChina(){
	 require(
        [
            'echarts',
            'echarts/chart/wordCloud', 
            'echarts/chart/map'// 按需加载所需图表,如需动态类型切换功能,别忘了同时加载相应图表
        ],
        function (ec) {
            var myChart = ec.init(document.getElementById('china-map'));
            var ecConfig = require('echarts/config');
        	var zrEvent = require('zrender/tool/event');
        	//var myChart = echarts.init(document.getElementById('china-map'));
        	var curIndx = 0;
        	var mapType = [
        	    'china',
        	    // 23个省
        	    '广东', '青海', '四川', '海南', '陕西', 
        	    '甘肃', '云南', '湖南', '湖北', '黑龙江',
        	    '贵州', '山东', '江西', '河南', '河北',
        	    '山西', '安徽', '福建', '浙江', '江苏', 
        	    '吉林', '辽宁', '台湾',
        	    // 5个自治区
        	    '新疆', '广西', '宁夏', '内蒙古', '西藏', 
        	    // 4个直辖市
        	    '北京', '天津', '上海', '重庆',
        	    // 2个特别行政区
        	    '香港', '澳门'
        	];
        	document.getElementById('china-map').onmousewheel = function (e){
        		return false;   //这个方法我取消了滑动切换地图
        	    var event = e || window.event;
        	    curIndx += zrEvent.getDelta(event) > 0 ? (-1) : 1;
        	    if (curIndx < 0) {
        	        curIndx = mapType.length - 1;
        	    }
        	    var mt = mapType[curIndx % mapType.length];
        	    if (mt == 'china') {
        	        option.tooltip.formatter = '滑动鼠标或点击进入该省<br/>{b}';
        	    }
        	    else{
        	        option.tooltip.formatter = '滑动鼠标或点击返回全国<br/>{b}';
        	    }
        	    option.series[0].mapType = mt;
        	    option.title.subtext = mt + ' (滑动鼠标或点击切换)';
        	    myChart.setOption(option, true);
        	    
        	    zrEvent.stop(event);
        	};
			//下面这个是选择省份触发的事件
        	myChart.on(ecConfig.EVENT.MAP_SELECTED, function (param){
				alert("选择省份触发的事件");
        		var len = mapType.length;
        	    var mt = mapType[curIndx % len];
        	    if (mt == 'china') {
        	        // 全国选择时指定到选中的省份
        	        var selected = param.selected;
        	        /* var mapSeries = option.series[0];
           		    var data = [];
           		    var legendData = [];
           		    var name;
					var datat =[];
           		    for (var p = 0, len = mapSeries.data.length; p < len; p++) {
           		        name = mapSeries.data[p].name;
           		        //mapSeries.data[p].selected = selected[name];
           		        parentid = 
你可以使用以下代码来使用echarts加载地图: ```html <html> <head> <meta charset="utf-8"> <title>使用echarts加载地图</title> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/echarts/4.9.0/echarts.min.js"></script> <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> <script type="text/javascript" src="https://api.tianditu.gov.cn/api?v=4.0&tk=您的密钥"></script> <style> #main { width: 100%; height: 600px; } </style> </head> <body> <div id="main"></div> <script> var myChart = echarts.init(document.getElementById('main')); // 使用地图作为底图 var tdtLayer = new ol.layer.Tile({ preload: Infinity, source: new ol.source.XYZ({ url: 'http://t0.tianditu.com/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk=您的密钥' }) }); var baseMapLayer = new ol.layer.Group({ layers: [tdtLayer] }); var map = new ol.Map({ target: 'main', layers: [baseMapLayer], view: new ol.View({ projection: 'EPSG:4326', center: [104.07, 30.67], zoom: 12 }) }); echarts.util.mapData.params.params['成都'] = { getGeoJson: function (callback) { $.getJSON('../geoJson/chengdu.json', callback); } }; var convertedData = []; //向地图添加人口密度 $.get('../data/population.json', function (data) { echarts.registerMap('成都', data); data.features.forEach(function (feature) { convertedData.push({ name: feature.properties.name, value: Math.random() * 10000 }); }); myChart.setOption(option = { tooltip: { trigger: 'item' }, visualMap: { min: 0, max: 10000, left: 'left', top: 'bottom', text: ['High', 'Low'], seriesIndex: [1], inRange: { color: ['#e0ffff', '#006edd'] }, calculable: true }, geo: { map: '成都', roam: true, label: { normal: { show: true, textStyle: { color: 'rgba(0,0,0,0.4)' } } }, itemStyle: { normal: { borderColor: 'rgba(0, 0, 0, 0.2)' } } }, series: [ { name: 'Top 5', type: 'effectScatter', coordinateSystem: 'geo', data: convertedData.sort(function (a, b) { return b.value - a.value; }).slice(0, 5), symbolSize: function (val) { return val[2] / 10; }, showEffectOn: 'render', rippleEffect: { brushType: 'stroke' }, hoverAnimation: true, label: { normal: { formatter: '{b}', position: 'right', show: true } }, itemStyle: { normal: { color: 'purple', shadowBlur: 10, shadowColor: '#333' } }, zlevel: 1 }, { name: 'Area Name', type: 'map', geoIndex: 0, data: convertedData } ] }); }); </script> </body> </html> ``` 其中,需要把`您的密钥`替换成您的天地图和百度地图的密钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值