前言
最近在搞大数据可视化的项目,需要用Echart来做可视化的图表,比如像地图,图表类,今天主要介绍下echart绘制地图如何使用,话不多说,直接上干货!
一、Apache Echarts
官网地址:https://echarts.apache.org/
npm install echarts –save
二、获取地图的GeoJSON
地址:https://datav.aliyun.com/portal/school/atlas/area_selector DataV.地图GeoJSON数据
左侧是地图,右侧是JSON数据路径,点击你想要生成的地图省市、地级(以中华人名共和国为例为例)
注意:地图点击可以下钻,再点进去是二级,直到你想要的省市地区(点击旁边的空白可以返回上一级);右侧JSON数据的链接地址,可以选择下载下来(放在json文件夹中),也可以使用在线地址!(json API与geoJSON数据地址均可用)
三、项目中引用
import * as echarts from 'echarts';
四、准备放地图的容器
<div style="width:800px;height:600px" id="chartMap"></div>
五、配置地图option信息
let mapOption = {
tooltip: {
trigger: 'item',
formatter: (params: any) => {
let num
let showHtml = ''
if (isNaN(params.value)) {
num = '0'
} else {
num = params.value
}
showHtml += `
<span style="display: flex; font-size: 12px;">
${'装机量'}:${params.name}</br>
</span>
`
return showHtml
},
},
legend: {
orient: 'vertical',
left: 'left',
data: [],
},
series: [
{
name: '安装信息',
type: 'map',
mapType: 'china',
roam: false,
label: {
normal: {
show: true,
},
emphasis: {
show: true,
},
},
emphasis: {
scale: true,
itemStyle: {
areaColor: '#fff',
},
},
symbolSize: function (val: any) {
return val[2] / 15
},
showEffectOn: 'render',
itemStyle: {
areaColor: '#2043AA',
borderColor: '#111',
color: '#fff',
},
zlevel: 1,
data: [
{
name: '北京',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '天津',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '上海',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '重庆',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{ name: '河北', value: Math.round(Math.random() * 100) },
{ name: '河南', value: Math.round(Math.random() * 100) },
{ name: '云南', value: Math.round(Math.random() * 100) },
{ name: '辽宁', value: Math.round(Math.random() * 100) },
{ name: '黑龙江', value: Math.round(Math.random() * 100) },
{ name: '湖南', value: Math.round(Math.random() * 100) },
{ name: '安徽', value: Math.round(Math.random() * 100) },
{ name: '山东', value: Math.round(Math.random() * 100) },
{ name: '新疆', value: Math.round(Math.random() * 100) },
{ name: '江苏', value: Math.round(Math.random() * 100) },
{ name: '浙江', value: Math.round(Math.random() * 100) },
{ name: '江西', value: Math.round(Math.random() * 100) },
{ name: '湖北', value: Math.round(Math.random() * 100) },
{ name: '广西', value: Math.round(Math.random() * 100) },
{ name: '甘肃', value: Math.round(Math.random() * 100) },
{ name: '山西', value: Math.round(Math.random() * 100) },
{ name: '内蒙古', value: Math.round(Math.random() * 100) },
{ name: '陕西', value: Math.round(Math.random() * 100) },
{ name: '吉林', value: Math.round(Math.random() * 100) },
{ name: '福建', value: Math.round(Math.random() * 100) },
{ name: '贵州', value: Math.round(Math.random() * 100) },
{ name: '广东', value: Math.round(Math.random() * 100) },
{ name: '青海', value: Math.round(Math.random() * 100) },
{ name: '西藏', value: Math.round(Math.random() * 100) },
{ name: '四川', value: Math.round(Math.random() * 100) },
{ name: '宁夏', value: Math.round(Math.random() * 100) },
{ name: '海南', value: Math.round(Math.random() * 100) },
// {name: '台湾',value: Math.round(Math.random()*100)},
{ name: '香港', value: Math.round(Math.random() * 100) },
{ name: '澳门', value: Math.round(Math.random() * 100) },
],
},
],
}
六、初始化地图
我的地图Json文件是下载放到项目里assets下的,你可以使用在线的也可以引用本地的,如果你框架是vue可以使用axio获取到JSON信息。博主用的是Angular18框架,可以使用HttpClient获取
constructor(private http: HttpClient) {}
initEcharts() {
this.http.get('assets/json/china.json').subscribe((res: any) => {
const echart = echarts.init(this.chartMap.nativeElement) // 获取视图的echarts的DOM节点,并初始化对象
echarts.registerMap('china', res) // 注册china.json的数据到初始化的echarts对象
echart.setOption(this.mapOption) // 绑定地图的配置参数对象,参考第二步
echart.resize()
})
}
vue的不难,同理,这里我就不多说了。
完整代码(我的是angular18写法,仅供参考,其他框架大同小异):
import { HttpClient } from '@angular/common/http'
import {
Component,
ElementRef,
Input,
NgModule,
OnInit,
ViewChild,
} from '@angular/core'
import { SharedModule } from '@shared'
import * as echarts from 'echarts/core'
@Component({
selector: 'china-map',
template: `<div #chartMap class="china-map" [ngStyle]="styles"></div>`,
standalone: true,
imports: [SharedModule],
styleUrls: ['./china-map.component.less'],
})
export class ChinaMapComponent implements OnInit {
@Input() styles: any = {
width: '100%',
height: '100%',
left: 0,
right: 0,
bottom: 0,
top: 0,
}
@ViewChild('chartMap')
chartMap!: ElementRef // 获取DOM节点的对象
constructor(private http: HttpClient) {}
mapOption = {
tooltip: {
trigger: 'item',
formatter: (params: any) => {
let num
let showHtml = ''
if (isNaN(params.value)) {
num = '0'
} else {
num = params.value
}
showHtml += `
<span style="display: flex; font-size: 12px;">
${'装机量'}:${params.name}</br>
</span>
`
return showHtml
},
},
legend: {
orient: 'vertical',
left: 'left',
data: [],
},
series: [
{
name: '项目信息',
type: 'map',
mapType: 'china',
roam: false,
label: {
normal: {
show: true,
},
emphasis: {
show: true,
},
},
emphasis: {
scale: true,
itemStyle: {
areaColor: '#fff',
},
},
symbolSize: function (val: any) {
return val[2] / 15
},
showEffectOn: 'render',
itemStyle: {
areaColor: '#2043AA',
borderColor: '#111',
color: '#fff',
},
zlevel: 1,
data: [
{
name: '北京',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '天津',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '上海',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '重庆',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{ name: '河北', value: Math.round(Math.random() * 100) },
{ name: '河南', value: Math.round(Math.random() * 100) },
{ name: '云南', value: Math.round(Math.random() * 100) },
{ name: '辽宁', value: Math.round(Math.random() * 100) },
{ name: '黑龙江', value: Math.round(Math.random() * 100) },
{ name: '湖南', value: Math.round(Math.random() * 100) },
{ name: '安徽', value: Math.round(Math.random() * 100) },
{ name: '山东', value: Math.round(Math.random() * 100) },
{ name: '新疆', value: Math.round(Math.random() * 100) },
{ name: '江苏', value: Math.round(Math.random() * 100) },
{ name: '浙江', value: Math.round(Math.random() * 100) },
{ name: '江西', value: Math.round(Math.random() * 100) },
{ name: '湖北', value: Math.round(Math.random() * 100) },
{ name: '广西', value: Math.round(Math.random() * 100) },
{ name: '甘肃', value: Math.round(Math.random() * 100) },
{ name: '山西', value: Math.round(Math.random() * 100) },
{ name: '内蒙古', value: Math.round(Math.random() * 100) },
{ name: '陕西', value: Math.round(Math.random() * 100) },
{ name: '吉林', value: Math.round(Math.random() * 100) },
{ name: '福建', value: Math.round(Math.random() * 100) },
{ name: '贵州', value: Math.round(Math.random() * 100) },
{ name: '广东', value: Math.round(Math.random() * 100) },
{ name: '青海', value: Math.round(Math.random() * 100) },
{ name: '西藏', value: Math.round(Math.random() * 100) },
{ name: '四川', value: Math.round(Math.random() * 100) },
{ name: '宁夏', value: Math.round(Math.random() * 100) },
{ name: '海南', value: Math.round(Math.random() * 100) },
// {name: '台湾',value: Math.round(Math.random()*100)},
{ name: '香港', value: Math.round(Math.random() * 100) },
{ name: '澳门', value: Math.round(Math.random() * 100) },
],
},
],
}
ngOnInit() {
this.initEcharts() // 初始化地图
}
initEcharts() {
this.http.get('assets/json/china.json').subscribe((res: any) => {
const echart = echarts.init(this.chartMap.nativeElement) // 获取视图的echarts的DOM节点,并初始化对象
echarts.registerMap('china', res) // 注册china.json的数据到初始化的echarts对象
echart.setOption(this.mapOption) // 绑定地图的配置参数对象,参考第二步
echart.resize()
})
}
}
原文链接:https://blog.csdn.net/chaoPerson/article/details/140611460