详解Echarts绘制街道及镇级地图「图文步骤」

1. Echarts简介

Echarts是百度开源的一个数据可视化库,基于JavaScript语言编写,可以通过Echarts的API通过简单的配置实现数据可视化。它提供了丰富的图表类型和多种数据展示方式,可以广泛用于数据分析、大屏展示和可视化报表等应用场景。

接下来,我们将通过Echarts库来绘制一张街道与镇级地图,展现Echarts的强大功能。

2. 数据来源

在开始绘制地图之前,先确定数据的来源,这里我们使用了geojson.io提供的街道与镇级别的地图数据,数据格式为GeoJSON,可以通过代码引入。

代码如下:

option = {

title:{

text:'街道与镇级别地图',

subtext:'绘制地图示例'

},

tooltip:{

trigger:'item'

},

series:{

name:'行政区域',

type:'map',

map:'json 工具应用 - geojson - 区县json数据',

roam:true,

label:{

normal:{

show:true

},

emphasis:{

show:true

}

},

data:[

{name:'街道一',value:1},

{name:'街道二',value:2},

{name:'街道三',value:3},

{name:'街道四',value:4},

{name:'街道五',value:5},

{name:'街道六',value:6},

{name:'街道七',value:7},

{name:'街道八',value:8},

{name:'街道九',value:9},

{name:'街道十',value:10},

{name:'镇一',value:11},

{name:'镇二',value:12},

{name:'镇三',value:13},

{name:'镇四',value:14},

{name:'镇五',value:15},

{name:'镇六',value:16},

{name:'镇七',value:17},

{name:'镇八',value:18},

{name:'镇九',value:19},

{name:'镇十',value:20}

]

}

}

代码中,我们自定义了每个街道和镇的名称,以及对应的value值,这个value可以用来在地图上显示不同的颜色。

3. 地图样式设置

在绘制地图前,可以通过设置样式来调整地图的风格,包括背景颜色、边框颜色、文本颜色等。

代码如下:

option = {

backgroundColor:'#fff', //背景颜色

color:['#C4D6D6','#C3F6CC','#DCE6CE','#F9DDA5','#F6BBAF'], //颜色

textStyle:{ //文字样式

color:'#333'

},

tooltip:{

trigger:'item',

formatter:param=>{

if(param.seriesType=='map'){

let p = param.name + ' : ' + param.value;

return p;

}

return param.name;

}

},

geo:{ //地理坐标系组件

map:'json 工具应用 - geojson - 区县json数据',

label:{

emphasis:{

show:false

}

},

roam:true, //允许缩放和漫游

itemStyle:{ //地理坐标系组件样式

normal:{

areaColor:'#F4F1E6', //地图区域颜色

borderColor:'#B2B1B8' //边框颜色

},

emphasis:{

areaColor:'#F88376' //高亮显示颜色

}

}

},

series:{

name:'行政区域',

type:'map',

map:'json 工具应用 - geojson - 区县json数据',

roam:true,

label:{

normal:{

show:true

},

emphasis:{

show:true

}

},

data:[

{name:'街道一',value:1},

{name:'街道二',value:2},

{name:'街道三',value:3},

{name:'街道四',value:4},

{name:'街道五',value:5},

{name:'街道六',value:6},

{name:'街道七',value:7},

{name:'街道八',value:8},

{name:'街道九',value:9},

{name:'街道十',value:10},

{name:'镇一',value:11},

{name:'镇二',value:12},

{name:'镇三',value:13},

{name:'镇四',value:14},

{name:'镇五',value:15},

{name:'镇六',value:16},

{name:'镇七',value:17},

{name:'镇八',value:18},

{name:'镇九',value:19},

{name:'镇十',value:20}

]

}

}

代码中,我们设置了背景颜色为#fff,文本颜色为#333,边框颜色为#B2B1B8,同时设置了鼠标hover到地图的区域时,该区域会变成#F88376的颜色。

4. 地图标注设置

除了地图本身的样式之外,我们还可以在地图上添加标注,以更清晰的展示地图信息。

代码如下:

option = {

backgroundColor:'#fff',

color:['#C4D6D6','#C3F6CC','#DCE6CE','#F9DDA5','#F6BBAF'],

textStyle:{

color:'#333'

},

tooltip:{

trigger:'item',

formatter:param=>{

if(param.seriesType=='map'){

let p = param.name + ' : ' + param.value;

return p;

}

return param.name;

}

},

geo:{

map:'json 工具应用 - geojson - 区县json数据',

label:{

emphasis:{

show:false

}

},

roam:true,

itemStyle:{

normal:{

areaColor:'#F4F1E6',

borderColor:'#B2B1B8'

},

emphasis:{

areaColor:'#F88376'

}

}

},

series:[

{

name:'行政区域',

type:'map',

map:'json 工具应用 - geojson - 区县json数据',

roam:true,

label:{

normal:{

show:true

},

emphasis:{

show:true

}

},

data:[

{name:'街道一',value:1},

{name:'街道二',value:2},

{name:'街道三',value:3},

{name:'街道四',value:4},

{name:'街道五',value:5},

{name:'街道六',value:6},

{name:'街道七',value:7},

{name:'街道八',value:8},

{name:'街道九',value:9},

{name:'街道十',value:10},

{name:'镇一',value:11},

{name:'镇二',value:12},

{name:'镇三',value:13},

{name:'镇四',value:14},

{name:'镇五',value:15},

{name:'镇六',value:16},

{name:'镇七',value:17},

{name:'镇八',value:18},

{name:'镇九',value:19},

{name:'镇十',value:20}

]

},

{

type:'scatter',

coordinateSystem:'geo',

data:[

{name:'街道一',value:[116.109099,28.311707,1]},

{name:'街道二',value:[116.122249,28.292867,2]},

{name:'街道三',value:[116.105265,28.301263,3]},

{name:'街道四',value:[116.104414,28.322154,4]},

{name:'街道五',value:[116.121017,28.307013,5]},

{name:'街道六',value:[116.12632,28.32683,6]},

{name:'街道七',value:[116.138579,28.315478,7]},

{name:'街道八',value:[116.096636,28.323584,8]},

{name:'街道九',value:[116.112771,28.28461,9]},

{name:'街道十',value:[116.125013,28.279556,10]},

{name:'镇一',value:[116.060017,28.291886,11]},

{name:'镇二',value:[116.093019,28.262098,12]},

{name:'镇三',value:[116.063146,28.277334,13]},

{name:'镇四',value:[116.098068,28.256239,14]},

{name:'镇五',value:[116.130391,28.239387,15]},

{name:'镇六',value:[116.120984,28.31777,16]},

{name:'镇七',value:[116.11717,28.341329,17]},

{name:'镇八',value:[116.0853,28.356117,18]},

{name:'镇九',value:[116.067378,28.328562,19]},

{name:'镇十',value:[116.086895,28.287965,20]}

],

symbol:'image://https://echarts.apache.org/examples/data/asset/img/weather/sunny_128.png',

symbolSize:function(val){

return 30*val[2];

},

label:{

normal:{

formatter:'{b}',

position:'right',

show:false

},

emphasis:{

show:true

}

},

itemStyle:{

normal:{

color:'#F06C00'

}

}

}

]

}

代码中,我们首先定义了一个type为scatter的series,表示散点图,coordinatesystem为geo(地理坐标系)。

数据分别为name、value、symbol(这里使用了气象时报的太阳图标)、symbolSize(表示图标大小)等,其中symbolSize的大小与value有关,用简单的公式:30*val[2]。

最后,将这个series添加到series列表中,即可在地图上添加图标。

5. 总结

至此,我们完成了一张街道与镇级别地图的绘制,通过Echarts的API,我们可以实现非常复杂的数据可视化图表,同时调整样式和设置标注,可以使图表更清晰、更直观。

相信在实际项目中,可以根据需求来自定义自己想要的图表效果,让数据更好地展示和分析。