前言

最近在搞大数据可视化的项目,需要用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