1. 程式人生 > >Echarts地圖相關功能整合

Echarts地圖相關功能整合

        Echarts是一款開源、功能強大的資料視覺化產品。之前做圖表一直都是使用Highcharts來做的,Echarts與Highcharts大致用法差不多,最近用到了Echarts的地圖功能,把官網上的兩個例子整合了一下終於達到了要求。貼出來跟大家分享一下。另附上新疆各市縣經緯度js檔案一份(xjGeoCoord.js)

先來晒一個效果圖吧

下面就來看一下程式碼如果實現

一、引用的css與js

<link rel="shortcut icon" href="asset/ico/favicon.png"> 
<link href="asset/css/font-awesome.min.css" rel="stylesheet">
<link href="asset/css/bootstrap.css" rel="stylesheet">
<link href="asset/css/carousel.css" rel="stylesheet"> 
<link href="asset/css/echartsHome.css" rel="stylesheet"> 
<link href="asset/css/codemirror.css" rel="stylesheet"> 
<link href="asset/css/monokai.css" rel="stylesheet"> 

<script src="asset/js/jquery.min.js"></script>
<script src="asset/js/echartsHome.js" type="text/javascript"></script> 
<script src="asset/js/bootstrap.min.js"></script>
<script src="asset/js/codemirror.js"></script>
<script src="asset/js/javascript.js"></script> 
<script src="asset/js/echartsConfig.js"></script> 
<script src="www/js/echarts.js"></script> <script src="www/js/chart/geoCoord.js"></script>

二、html部分,用於地圖展示和top5相關資訊展示
		<div class="row-fluid" style="height:600px;position:relative;">
			<div id="mapContainer"  
							style="position: absolute; height: 100%; width: 90%; background-color: transparent; cursor: default;text-align:left">
					 無相關資料
			</div>
			<div id="pieChart" style="position:relative;z-index:1;height:100%;padding-right:0.5em;width:30%;float:right">
				<ol class="rectangle-list">
					<li>
					 	<div>
					 		克拉瑪依:1.1.1.1(626)
						</div>
					</li>
					<li>
						<div>
							烏魯木齊:22.2.2.2(855)								
					 	</div>
					</li>
					<li>
						<div>						 
							庫爾勒:3.3.3.3(755)
						</div>
					</li>
					<li>
					 	<div>
							天山:4.4.4.4(755)
					 	</div>
					</li>				 
				</ol>
			</div>
		</div>

三、自己寫的css與js部分及功能註釋
<style type="text/css">
			
			ol{
				counter-reset: li;
				list-style: none;
				*list-style: decimal;
				font: 15px 'trebuchet MS', 'lucida sans';
				padding: 0;
				margin-bottom: 4em;
				text-shadow: 0 1px 0 rgba(255,255,255,.5);
			}

			ol ol{
				margin: 0 0 0 2em;
			}

			

			.rectangle-list div{
				position: relative;
				display: block;
				padding: .4em .4em .4em .8em;
				*padding: .4em;
				margin: .5em 0 .5em 2.5em;
				background: #F0F0F0;
				color: #444;
				text-decoration: none;
				-webkit-transition: all .3s ease-out;
				-moz-transition: all .3s ease-out;
				-ms-transition: all .3s ease-out;
				-o-transition: all .3s ease-out;
				transition: all .3s ease-out;	
			}

			.rectangle-list div:hover{
				background: #eee;
			}	

			.rectangle-list div:before{
				content: counter(li);
				counter-increment: li;
				position: absolute;	
				left: -2.5em;
				top: 50%;
				margin-top: -1em;
				background: #FE0902; --序號背景色
				height: 2em;
				width: 2em;
				line-height: 2em;
				text-align: center;
				font-weight: bold;
			}
			
			.rectangle-list div:after{
				position: absolute;	
				content: '';
				border: .5em solid transparent;
				left: -1em;
				top: 50%;
				margin-top: -.5em;
				-webkit-transition: all .3s ease-out;
				-moz-transition: all .3s ease-out;
				-ms-transition: all .3s ease-out;
				-o-transition: all .3s ease-out;
				transition: all .3s ease-out;				
			}

			.rectangle-list div:hover:after{
				left: -.5em;
				border-left-color: #FE0902;				
			}
		
</style>

	<script type="text/javascript">
		var option;
		var maxRange = 1000;
		$(function(){
			option = {
				title : {
					text: '新疆',
					x:'center'
				},
				tooltip : {
					trigger: 'item',
					formatter:function(param){//提示資訊格式化
						return "<b>"+param.data.name+"</b><br/>數量:"+param.data.value;
					}
				},
				legend: {
					orient: 'vertical',//圖例位置
					x:'left',
					data:['']//圖例文字資訊
				},
				dataRange: {
					min : 0,//值域控制元件最小值
					max : maxRange,//值域控制元件最大值
					calculable : true,//預設為false,設定為true時值域顯示為線性漸變
					precision:0,//小數精度,預設為0
					color: ['red', 'orange', 'yellow','#FFFCEC']//值域顏色,最少兩個
				},
				toolbox: {//圖表工具
					show : true,	//是否展示
					//佈局方式,預設為水平佈局,水平(vertical)|垂直(horizontal)
					orient : 'horizontal',
					//橫向位置,可選為:'center' | 'left' | 'right' | {number}(x座標,單位px)
					x: 'left',
					//縱向位置可選為:'top' | 'bottom' | 'center' | {number}(y座標,單位px) 
					y: 'top',
					feature : {
						mark : {show: true},	//輔助線
						dataView : {show: false, readOnly: false},	//資料檢視
						restore : {show: true},	//還原
						saveAsImage : {show: true}	//儲存為圖片
					}
				},
				series : [
					{
						name: 'pm2.5',
						type: 'map',
						mapType: '新疆',	//地圖型別 china:中國;continent:世界
						hoverable: true,	//滑鼠經過時,是否高亮顯示
						roam:true,
						data : [ //區域編碼是亂寫的^_^,為了演示除name和value之外的屬性如何取值;
						    {name: '巴音郭楞蒙古自治州',value: 623,areaCode:11111},
						    //{name: '和田地區',value: 425,areaCode:11112},
							{name: '哈密地區',value: 78,areaCode:11113},
							{name: '阿克蘇地區',value: 384,areaCode:11114},
							{name: '阿勒泰地區',value:342,areaCode:11115},
							{name: '喀什地區',value: 109,areaCode:11116},
							//{name: '塔城地區',value: 526,areaCode:11117},
							{name: '昌吉回族自治州',value: 271,areaCode:11118},
							{name: '克孜勒蘇柯爾克孜自治州',value: 98,areaCode:11119},
							{name: '吐魯番地區',value:120,areaCode:11110},
							//{name: '伊犁哈薩克自治州',value: 451,areaCode:11120},
							{name: '博爾塔拉蒙古自治州',value: 239,areaCode:11121},
							{name: '烏魯木齊市',value: 740,areaCode:11122},
							{name: '克拉瑪依市',value: 122,areaCode:11123},
						    //{name: '阿拉爾市',value: 432,areaCode:11124},
							{name: '圖木舒克市',value: 170,areaCode:11125},
							//{name: '五家渠市',value: 250,areaCode:11126},
							//{name: '石河子市',value:193,areaCode:11127},
							{name: '那曲地區',value:127,areaCode:11128}
						],
						itemStyle:{
							normal:{
								borderColor:'#A1DFF2',	//地圖邊界線顏色
								borderWidth:1,	//邊界線寬度
								areaStyle:{
									color:'white'
								},
								label:{
									show:true
								}
							}
						},
						geoCoord: geoCoord	//地區經緯度
					},
					{//座標標註
						type: 'map',
						mapType: '新疆',
						data : [],
						markPoint : {
							// 標註大小,半寬(半徑)引數,當圖形為方向或菱形則總寬度為symbolSize * 2
							symbolSize: 5,      
							itemStyle: {
								normal: {	//地圖內圖形的預設樣式和強調樣式(懸浮時樣式)
									borderColor: 'orange',
									borderWidth: 1,            // 標註邊線線寬,單位px,預設為1
									label: {
										show: false
									}
								},
								emphasis: {	//地圖內圖形的強調樣式(懸浮時樣式)
									borderColor: '#1e90ff',
									borderWidth: 5,
									label: {
										show: false
									}
								}
							},
							data : [
									{name: "克拉瑪依", value: 626,ipAddress:'1.1.1.1'},
									{name: "烏魯木齊", value: 855,ipAddress:'22.2.2.2'},							 
									{name: "庫爾勒", value: 755,ipAddress:'3.3.3.3'},
									{name: "天山", value: 755,ipAddress:'4.4.4.4'}
								]
							}
					},
					{//向外發散光圈
						name: 'Top5',
						type: 'map',
						mapType: '新疆',
						data:[],
						markPoint : {
							symbol:'emptyCircle',
							symbolSize : function (v){
								//光圈大小,v代表節點的value值,可改為return 10+v*10/maxRange;
								return 10+v/100	
							},
							effect : {
								show: true,
								shadowBlur : 0
							},
							itemStyle:{
								normal:{
									label:{show:false	}
								}
							},
							tooltip:{//注:此處的tooltip必須放在data引數上面,才能生效
								formatter:function (param){
									return "<b>"+param.data.name+"</b><br/>IP地址:"+param.data.ipAddress+"("+param.data.value+")";
								}
							},
							data : [
									{name: "克拉瑪依", value: 626,ipAddress:'1.1.1.1'},
									{name: "烏魯木齊", value: 855,ipAddress:'22.2.2.2'},							 
									{name: "庫爾勒", value: 755,ipAddress:'3.3.3.3'},
									{name: "天山", value: 755,ipAddress:'4.4.4.4'}
								]
							}
					}
				]
			};	
			require.config({
				paths: {
					echarts: 'www/js'
				}
			});
			require(
				[
					'echarts',
					'echarts/chart/map'
				],
				DrawEChart
			);
		});
                    
		//回撥函式 渲染ECharts圖表
		function DrawEChart(ec) {

		var chartContainer = document.getElementById("mapContainer");

			//載入圖表

			var myChart = ec.init(chartContainer);
			myChart.on(echartsConfig.EVENT.CLICK,echartsClick);//設定單擊事件
			myChart.setOption(option);

		}

		function echartsClick(param){
			if(param.data.areaCode!=undefined){
				alert(param.data.name+":"+param.data.areaCode);
			}
		}


	</script>

五、在為Echarts設定主題時需要注意,只有內建主題('macarons', 'infographic')可以直接傳入名稱,其他的主題需要把主題包中對應的js檔案開頭和結尾有關封裝的部分去掉,再使用setTheme(Object)方法來設定主題。