ECharts之类型map(省级,地级市)
一、效果:
1.广东地图
2.深圳地图
二、项目结构:
1.广东地图
2.深圳地图
三、项目介绍:
1.广东地图:
地图包含三个模块,①广东地图图表是用geo,不是series因为只作为背景(可捕捉点击地级市事件)。②地图上的条形图是根据坐标地位的③左下角的条形图是根据grid来定位的。
2.深圳市地图:(与广东地图一样)
四、源码
1.广东地图:
1 DOCTYPE html> 2 <html> 3 <head> 4 <link rel='icon' href='w.ico' type='image/x-icon'> 5 <title>广东地图2Dtitle> 6 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 7 <script src="echarts.min.js">script> 8 <script src="echarts-gl.min.js">script> 9 10 <script src="guangdong.js">script> 11 <script src="jquery-3.2.1.js">script> 12 13 <style type="text/css"> 14 #id1 { 15 16 border:2px solid green; 17 height: 450px; 18 19 } 20 21 style> 22 23 head> 24 25 <body> 26 <div id="id1">div> 27 28 29 <script> 30 var rawData = [ 31 {name: '珠海市',value:130}, 32 {name: '广州市',value: 50}, 33 {name: '中山市',value:30}, 34 {name: '佛山市',value: 50}, 35 {name: '清远市',value:30}, 36 {name: '梅州市',value: 50}, 37 {name: '汕头市',value:30}, 38 {name: '东莞市',value: 50}, 39 {name: '惠州市',value:30}, 40 {name: '深圳市',value: 50} 41 ]; 42 43 function Map(id,cityData){ 44 45 function sortRule(a,b){return a.value-b.value;} 46 cityData.sort(sortRule); 47 var name=cityData.map(name=>name.name); 48 49 var chart = echarts.init(document.getElementById(id)); 50 51 var geoCoordMap = { 52 '珠海市': [113.353986,21.924979] 53 ,'广州市':[113.480637,23.125178] 54 ,'湛江市':[110.264977,21.274898] 55 ,'茂名市':[110.919229,21.659751] 56 ,'阳江市':[111.825107,21.859222] 57 ,'云浮市':[112.044439,22.629801] 58 ,'肇庆市':[112.472529,23.051546] 59 ,'江门市':[112.894942,22.090431] 60 ,'中山市':[113.382391,22.321113] 61 ,'佛山市':[113.022717,22.828762] 62 ,'清远市':[113.051227,23.685022] 63 ,'韶关市':[113.591544,24.501322] 64 ,'河源市':[114.897802,23.746266] 65 ,'梅州市':[116.117582,24.099112] 66 ,'潮州市':[116.692301,23.661701] 67 ,'揭阳市':[116.255733,23.143778] 68 ,'汕头市':[116.708463,22.87102] 69 ,'汕尾市':[115.364238,22.774485] 70 ,'深圳市':[114.085947,22.347] 71 ,'东莞市':[113.746262,22.746237] 72 ,'惠州市':[114.412599,23.079404] 73 }; 74 75 var option = { 76 legend: [], 77 xAxis: [{ 78 type: "value", 79 axisLine: { 80 show: false 81 }, 82 axisTick: { 83 show: false 84 }, 85 axisLabel: { 86 show: false 87 }, 88 splitLine: { 89 show: false 90 } 91 },], 92 yAxis: [{ 93 type: "category", 94 95 axisLine: { 96 show: false 97 }, 98 axisTick: { 99 show: false, 100 alignWithLabel: true 101 }, 102 axisLabel: { 103 textStyle:{ 104 show:false 105 } 106 }, 107 data:name, 108 },], 109 grid: [{ 110 left: "70%", 111 right: "20", 112 bottom: "10", 113 top:'60%', 114 containLabel: true 115 },], 116 title:[{ 117 text:'全省安全态势', 118 x:0, 119 textStyle:{ 120 color:'rgb(0,147,203)', 121 fontSize:14 122 } 123 },{ 124 text: "综合安全事件影响排名Top10", 125 textStyle: { 126 color: "#000", 127 fontWeight: "bold", 128 fontSize: 14 129 }, 130 top: "55%", 131 left: "69%" 132 }], 133 tooltip:[{ 134 // formatter:function(params){ 135 // console.log(params) 136 // var content='', 137 // content=params.name+params.value[0]+params.value[1]+params.value[2]; 138 // return content; 139 // }, 140 show:true, 141 }], 142 backgroundColor:'#fff', 143 // visualMap: { 144 // show: false, 145 // min: 0, 146 // max: 3000, 147 // inRange: { 148 // color: ['#00ffff', '#006edd'], 149 // color: ['#00467F', '#A5CC82'] 150 // }, 151 // calculable:true 152 153 // }, 154 155 geo:{ 156 157 show:true, 158 map:'广东', 159 type:'map', 160 label: { 161 normal: { 162 show: false 163 }, 164 emphasis: { 165 show: true, 166 fontSize:15, 167 fontWeight:'bold', 168 color:'rgb(80,50,180)', 169 } 170 }, 171 roam: false, 172 itemStyle: { 173 normal: { 174 areaColor: ['rgb(0,90,157)'], 175 borderColor: '#fff', 176 borderWidth: '0.8', 177 }, 178 emphasis: { 179 areaColor: '#2B91B7', 180 } 181 } 182 }, 183 series: [{ 184 name: "安全事件数量", 185 type: "bar", 186 data: cityData, 187 barWidth:7, 188 barCategoryGap: "50%", 189 label: { 190 normal: { 191 left:'right', 192 show: true, 193 position: "right", 194 formatter: function(params) { 195 console.log(params); 196 return params.data.value; 197 }, 198 textStyle: { 199 color: "#000" //color of value 200 } 201 } 202 }, 203 itemStyle: { 204 normal: { 205 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ 206 offset: 0, 207 color: "rgb(231,91,250)" // 0% 处的颜色 208 }, { 209 offset: 1, 210 color: "rgb(80,50,180)" // 100% 处的颜色 211 }], false), 212 barBorderRadius: [30, 30,30, 30], 213 } 214 } 215 },] 216 217 };//option 218 chart.setOption(option); 219 220 function renderEachCity() { 221 var width=$('#id1').width(); 222 var height=$('#id1').height(); 223 // option.xAxis.push(); 224 // option.yAxis.push(); 225 // option.grid.push(); 226 // option.series.push(); 227 echarts.util.each(rawData, function(dataItem, idx) { 228 229 var geoCoord = geoCoordMap[dataItem.name]; 230 231 var coord = chart.convertToPixel('geo', geoCoord); 232 console.log(geoCoord+":"+coord); 233 idx += ''; 234 235 236 option.xAxis.push({ 237 id: idx, 238 gridId: idx, 239 type: 'category', 240 show: false 241 }); 242 option.yAxis.push({ 243 id: idx, 244 gridId: idx, 245 show: false 246 }); 247 option.grid.push({ 248 id: idx, 249 width: 10, 250 height: (dataItem.value), 251 left: coord[0], 252 bottom:height-coord[1]+10, 253 }); 254 255 256 option.series.push({ 257 name:dataItem.name, 258 type: 'bar', 259 xAxisId: idx, 260 yAxisId: idx, 261 road:true, 262 itemStyle: { 263 normal: { 264 color:new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ 265 offset: 0, 266 color: 'rgba(231,91,250,1)' 267 }, { 268 offset: 1, 269 color: 'rgba(80,50,180,0.9)' 270 }], false), 271 barBorderRadius: [30, 30,30, 30], 272 borderColor:'rgba(255,255,255,0.8)', 273 }, 274 emphasis:{ 275 color:new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ 276 offset: 1, 277 color: 'rgb(231,91,250)' 278 }, { 279 offset: 0, 280 color: 'rgb(80,50,180)' 281 }], false) 282 } 283 }, 284 data: [dataItem.value] 285 }); 286 287 288 }); 289 chart.setOption(option); 290 } 291 292 renderEachCity(); 293 294 295 chart.on('click',function(params){console.log(params);}) 296 297 } 298 Map('id1',rawData); 299 script> 300 body> 301 html>
2.深圳市地图:
1 DOCTYPE html> 2 <html> 3 <head> 4 <link rel='icon' href='w.ico' type='image/x-icon'> 5 <title>地级市地图2Dtitle> 6 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 7 <script src="echarts.min.js">script> 8 <script src="echarts-gl.min.js">script> 9 10 <script src="guangdong.js">script> 11 <script src="jquery-3.2.1.js">script> 12 13 <style type="text/css"> 14 #id1 { 15 16 border:2px solid green; 17 height: 530px; 18 width:1097px; 19 20 } 21 22 style> 23 24 head> 25 26 <body> 27 <div id="id1">div> 28 29 30 <script> 31 var rawData = [ 32 {name: '时代互联',value:130}, 33 {name: '朗达互动',value: 50} 34 35 ]; 36 37 function Map(id,cityData,cityName){ 38 var name=cityData.map(name=>name.name); 39 40 41 var chart = echarts.init(document.getElementById(id)); 42 $.getJSON('广东/'+cityName+'.json', function (usaJson) { 43 echarts.registerMap('city', usaJson); 44 var geoCoordMap = { 45 '时代互联':[114.085947,22.547], 46 '朗达互动':[114.005947,22.547], 47 '飞远网络':[113.353986,21.924979], 48 '科飞科技':[113.353986,21.924979], 49 '明飞互联':[113.353986,21.924979], 50 '万网网络':[113.353986,21.924979], 51 '大朗科技':[113.353986,21.924979], 52 '腾度科技':[112.353986,22.924979] 53 54 55 56 }; 57 58 var option = { 59 legend: [], 60 xAxis: [{ 61 type: "value", 62 axisLine: { 63 show: false 64 }, 65 axisTick: { 66 show: false 67 }, 68 axisLabel: { 69 show: false 70 }, 71 splitLine: { 72 show: false 73 } 74 },], 75 yAxis: [{ 76 type: "category", 77 78 axisLine: { 79 show: false 80 }, 81 axisTick: { 82 show: false, 83 alignWithLabel: true 84 }, 85 axisLabel: { 86 textStyle:{ 87 show:false 88 } 89 }, 90 data:name, 91 },], 92 grid: [{ 93 left: "70%", 94 right: "20", 95 bottom: "10", 96 top:'60%', 97 containLabel: true 98 },], 99 title:[{ 100 text:cityName+'IDC安全态势', 101 x:0, 102 textStyle:{ 103 color:'rgb(0,147,203)', 104 fontSize:14 105 } 106 },{ 107 text: "综合安全事件影响排名Top10", 108 textStyle: { 109 color: "#000", 110 fontWeight: "bold", 111 fontSize: 14 112 }, 113 top: "55%", 114 left: "69%" 115 }], 116 tooltip:[{ 117 // formatter:function(params){ 118 // console.log(params) 119 // var content='', 120 // content=params.name+params.value[0]+params.value[1]+params.value[2]; 121 // return content; 122 // }, 123 show:true, 124 }], 125 backgroundColor:'#fff', 126 // visualMap: { 127 // show: false, 128 // min: 0, 129 // max: 3000, 130 // inRange: { 131 // color: ['#00ffff', '#006edd'], 132 // color: ['#00467F', '#A5CC82'] 133 // }, 134 // calculable:true 135 136 // }, 137 138 geo:{ 139 left:'10', 140 show:true, 141 map:'city', 142 type:'map', 143 zlevel:0, 144 label: { 145 normal: { 146 show: false 147 }, 148 emphasis: { 149 show: true, 150 fontSize:20, 151 color:'rgb(255,255,255)', 152 } 153 }, 154 roam: false, 155 itemStyle: { 156 normal: { 157 color: 'rgb(0,90,157)', 158 borderColor: 'rgb(0,90,157)', 159 borderWidth: 1, 160 }, 161 emphasis: { 162 areaColor: '#2B91B7', 163 164 165 166 } 167 } 168 }, 169 series: [{ 170 name: "安全事件数量", 171 type: "bar", 172 data: cityData, 173 barWidth:7, 174 barCategoryGap: "50%", 175 zlevel:2, 176 label: { 177 normal: { 178 left:'right', 179 show: true, 180 position: "right", 181 formatter: function(params) { 182 console.log(params); 183 return params.data.value; 184 }, 185 textStyle: { 186 color: "#000" //color of value 187 } 188 } 189 }, 190 itemStyle: { 191 normal: { 192 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ 193 offset: 0, 194 color: "rgb(231,91,250)" // 0% 处的颜色 195 }, { 196 offset: 1, 197 color: "rgb(80,50,180)" // 100% 处的颜色 198 }], false), 199 barBorderRadius: [30, 30,30, 30], 200 } 201 } 202 },] 203 204 };//option 205 chart.setOption(option); 206 207 function renderEachCity() { 208 var width=$('#'+id).width(); 209 var height=$('#'+id).height(); 210 // option.xAxis.push(); 211 // option.yAxis.push(); 212 // option.grid.push(); 213 // option.series.push(); 214 echarts.util.each(rawData, function(dataItem, idx) { 215 216 var geoCoord = geoCoordMap[dataItem.name]; 217 console.log(dataItem.name); 218 var coord = chart.convertToPixel('geo', geoCoord); 219 console.log(geoCoord+":"+coord); 220 idx += ''; 221 222 console.log(dataItem.name) 223 option.xAxis.push({ 224 id: idx, 225 gridId: idx, 226 type: 'category', 227 //show: true, 228 data:[dataItem.name], 229 boundaryGap:true, 230 axisLine: { 231 show: false 232 }, 233 axisTick: { 234 235 236 show: false, 237 238 }, 239 axisLabel: { 240 interval:0, 241 fontSize:10, 242 243 color: "#fff", 244 245 246 247 } 248 }); 249 option.yAxis.push({ 250 id: idx, 251 gridId: idx, 252 show: false 253 }); 254 option.grid.push({ 255 id: idx, 256 width: 10, 257 height: (dataItem.value), 258 left: coord[0], 259 bottom:height-coord[1]+10, 260 }); 261 262 263 option.series.push({ 264 name:dataItem.name, 265 type: 'bar', 266 xAxisId: idx, 267 yAxisId: idx, 268 zlevel:1, 269 road:true, 270 itemStyle: { 271 normal: { 272 color:new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ 273 offset: 0, 274 color: 'rgba(231,91,250,1)' 275 }, { 276 offset: 1, 277 color: 'rgba(80,50,180,0.8)' 278 }], false), 279 borderColor:'rgba(255,255,255,0.8)', 280 barBorderRadius: [30, 30,30, 30], 281 }, 282 emphasis:{ 283 color:new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ 284 offset: 1, 285 color: 'rgb(231,91,250)' 286 }, { 287 offset: 0, 288 color: 'rgb(80,50,180)' 289 }], false) 290 } 291 }, 292 data: [dataItem.value] 293 }); 294 295 296 }); 297 chart.setOption(option); 298 } 299 300 renderEachCity(); 301 302 303 chart.on('click',function(params){console.log(params);}) 304 }); 305 } 306 Map('id1',rawData,'深圳市'); 307 script> 308 body> 309 html>
五、github源码链接(及地图文件):
Github