Echarts 绘制地图(中国、省市、区县)

目录

前言

一、Apache Echarts

二、获取地图的GeoJSON

三、项目中引用

四、准备放地图的容器

五、配置地图option信息

六、初始化地图

往期回顾


前言

最近在搞大数据可视化的项目,需要用Echart来做可视化的图表,比如像地图,图表类,今天主要介绍下echart绘制地图如何使用,话不多说,直接上干货!

一、Apache Echarts

官网地址:https://echarts.apache.org/ 

npm install echarts --save

 

二、获取地图的GeoJSON

地址: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()
    })
  }
}

欢迎在评论区交流。

如果文章对你有所帮助,❤️关注+点赞❤️鼓励一下!博主会持续更新。。。。

往期回顾

 CSS多栏布局-两栏布局和三栏布局

 border边框影响布局解决方案

 css 设置字体渐变色和阴影

css 重置样式表(Normalize.css)

 css实现元素居中的6种方法 

Angular8升级至Angular13遇到的问题

前端vscode必备插件(强烈推荐)

Webpack性能优化

vite构建如何兼容低版本浏览器

前端性能优化9大策略(面试一网打尽)!

vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 vite构建打包性能优化

 vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 ES6实用的技巧和方法有哪些?

 css超出部分显示省略号

vue3使用i18n 实现国际化

vue3中使用prismjs或者highlight.js实现代码高亮

什么是 XSS 攻击?什么是 CSRF?什么是点击劫持?如何防御

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富朝阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值