echarts5.x按需加载绘制地图geo

本文介绍了如何使用ECharts 5.x按需加载地图,包括绘制空地图、区域颜色区分、经纬度定点闪烁效果以及彩色地图。通过注册地图文件,结合`geo`、`visualMap`、`effectScatter`等组件,实现地图的展示与动态效果,并强调了地图文件中的地理名称需与数据一致。
摘要由CSDN通过智能技术生成

背景

echarts@5按需加载的时候绘制地图,包括缺省时的地图,有数据时区域块颜色区分的地图,有数据时按经纬度定位闪烁效果的地图,以及世界地图不同区域显示不同颜色

缺省地图

在这里插入图片描述

const echarts = require('echarts/lib/echarts')
import ChinaGeo from './../geoJSON/china.json'
import WorldGeo from './../geoJSON/world.json'
import 'echarts/lib/component/geo'
import 'echarts/lib/chart/map'

/* 绘制空地图 */
drawEmpty () {
  echarts.registerMap(this.mapType, this.mapType === 'china' ? ChinaGeo : WorldGeo)
  this.echartsObj = echarts.init(document.getElementById(this.id))
  let option = {
      geo: {
        map: this.mapType,
        zoom: 1,
        roam: false
      }
    }
  this.echartsObj.setOption(option)
}

块颜色visualMap

在这里插入图片描述

const echarts = require('echarts/lib/echarts')
import ChinaGeo from './../geoJSON/china.json'
import WorldGeo from './../geoJSON/world.json'
import 'echarts/lib/component/geo'
import 'echarts/lib/chart/map'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/visualMap'

data = [
	{name: '四川省', value: 5200},
	{name: '河南省', value: 2300},
	{name: '黑龙江省', value: 730},
	{name: '福建省', value: 330}
]
mapType = 'china' // world 为世界地图

/* 绘制图形 */
drawEcharts () {
  echarts.registerMap(this.mapType, this.mapType === 'china' ? ChinaGeo : WorldGeo)
  this.echartsObj = echarts.init(document.getElementById(this.id))
  let option = {
    tooltip: {
      triggerOn: 'mousemove',
      backgroundColor: '#fff',
      extraCssText: 'box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.15);',
      padding: [12, 16, 12, 16],
      textStyle: {
        color: 'rgba(0,0,0,0.65)'
      },
      formatter: (param) => {
        if (Number.isNaN(param.value)) {
          return param.name + ':暂无攻击来源'
        } else {
          let result = '<p>'+ param.seriesName + ':' + param.name +'</p>'
          result += '<p>攻击次数:'+ param.value +'次</p>'
          return result
        }
      }
    },
    visualMap: {
      itemWidth: 4,
      min: 0,
      max: 10000,
      hoverLink: false,
      showLabel: true,
      textStyle: {
        color: 'rgba(0,0,0,0.65)'
      },
      pieces: [{
        gte: 5000,
        label: '>= 5000',
        color: '#FF7C32'
      }, {
        gte: 1000,
        lte: 4999,
        label: '1000 - 4999',
        color: '#FDCC1A'
      }, {
        gte: 500,
        lte: 999,
        label: '500 - 999',
        color: '#5AD7D8'
      }, {
        gte: 1,
        lte: 499,
        label: '1 - 499',
        color: '#4174FE'
      }, {
        value: 0,
        color: '#f5f5f5'
      }]
    },
    geo: {
      map: this.mapType,
      zoom: 1,
      roam: false, // 鼠标滑动放大缩小
      itemStyle: {
        areaColor: '#f5f5f5',
        borderWidth: '.5',
        borderColor: '#999'
      },
      emphasis: {
        itemStyle: {
          borderWidth: '1',
          areaColor: '#4168ff',
          borderColor: '#333',
          color: '#fff'
        }
      }
    },
    series: [{
      name: '攻击来源',
      type: 'map',
      geoIndex: 0,
      data: this.data
    }]
  }
  this.echartsObj.setOption(option)
}

经纬度定点闪烁effectScatter

在这里插入图片描述

const echarts = require('echarts/lib/echarts')
import ChinaGeo from './../geoJSON/china.json'
import WorldGeo from './../geoJSON/world.json'
import 'echarts/lib/component/geo'
import 'echarts/lib/chart/effectScatter'
import 'echarts/lib/chart/map'
import 'echarts/lib/component/tooltip'

data = [
	{name: '上海', value: [121.4648, 31.2891, 21]},
    {name: '广州', value: [113.12244, 23.009505, 19]}
]
mapType = 'china' // world 为世界地图

/* 绘制图形 */
drawEcharts () {
  echarts.registerMap(this.mapType, this.mapType === 'china' ? ChinaGeo : WorldGeo)
  this.echartsObj = echarts.init(document.getElementById(this.id))
  let option = {
    tooltip: {
      formatter: (param) => {
        console.log(param)
        return 'kkk'
      }
    },
    geo: {
      map: this.mapType,
      zoom: 1,
      roam: false, // 鼠标滑动放大缩小
      itemStyle: {
        areaColor: '#f5f5f5',
        borderWidth: '.5',
        borderColor: '#999'
      }
    },
    series: [{
      type: 'effectScatter',
      coordinateSystem: 'geo',
      rippleEffect: {
        period: 4,
        brushType: 'stroke'
      },
      symbolSize: 10,
      itemStyle: {
        color: 'blue',
        opacity: 1
      },
      data: this.data
    }]
  }
  this.echartsObj.setOption(option)
}

彩色地图的经纬度定点闪烁effectScatter

在这里插入图片描述

const echarts = require('echarts/lib/echarts')
import ChinaGeo from './../geoJSON/china.json'
import WorldGeo from './../geoJSON/world.json'
import 'echarts/lib/component/geo'
import 'echarts/lib/chart/effectScatter'
import 'echarts/lib/chart/map'
import 'echarts/lib/component/tooltip'

data = [
	{name: '上海', value: [121.4648, 31.2891, 21]},
    {name: '广州', value: [113.12244, 23.009505, 19]}
]
mapType = 'china' // world 为世界地图
CONST_CHINA_REGION_COLOR = [
  { name: '北京市', selected: false, itemStyle: {areaColor: '#cfc5de'} },
  { name: '天津市', selected: false, itemStyle: {areaColor: '#f1ebd1'} },
  { name: '上海市', selected: false, itemStyle: {areaColor: '#feffdb'} },
  { name: '重庆市', selected: false, itemStyle: {areaColor: '#e0cee4'} },
  { name: '河北省', selected: false, itemStyle: {areaColor: '#fde8cd'} },
  { name: '河南省', selected: false, itemStyle: {areaColor: '#e4f1d7'} },
  { name: '云南省', selected: false, itemStyle: {areaColor: '#fffed7'} },
  { name: '辽宁省', selected: false, itemStyle: {areaColor: '#e4f1d7'} },
  { name: '黑龙江省', selected: false, itemStyle: {areaColor: '#e4f1d7'} },
  { name: '湖南省', selected: false, itemStyle: {areaColor: '#fffed7'} },
  { name: '安徽省', selected: false, itemStyle: {areaColor: '#fffed8'} },
  { name: '山东省', selected: false, itemStyle: {areaColor: '#dccee7'} },
  { name: '新疆省', selected: false, itemStyle: {areaColor: '#fffed7'} },
  { name: '江苏省', selected: false, itemStyle: {areaColor: '#fce8cd'} },
  { name: '浙江省', selected: false, itemStyle: {areaColor: '#ddceeb'} },
  { name: '江西省', selected: false, itemStyle: {areaColor: '#e4f1d3'} },
  { name: '湖北省', selected: false, itemStyle: {areaColor: '#fde8cd'} },
  { name: '广西省', selected: false, itemStyle: {areaColor: '#fde8cd'} },
  { name: '甘肃省', selected: false, itemStyle: {areaColor: '#fde8cd'} },
  { name: '山西省', selected: false, itemStyle: {areaColor: '#fffdd6'} },
  { name: '内蒙古自治区', selected: false, itemStyle: {areaColor: '#ddcfe6'} },
  { name: '陕西省', selected: false, itemStyle: {areaColor: '#fad8e9'} },
  { name: '吉林省', selected: false, itemStyle: {areaColor: '#fce8cd'} },
  { name: '福建省', selected: false, itemStyle: {areaColor: '#fad8e8'} },
  { name: '贵州省', selected: false, itemStyle: {areaColor: '#fad8e8'} },
  { name: '广东省', selected: false, itemStyle: {areaColor: '#ddcfe8'} },
  { name: '青海省', selected: false, itemStyle: {areaColor: '#fad8e9'} },
  { name: '西藏自治区', selected: false, itemStyle: {areaColor: '#ddcfe6'} },
  { name: '四川省', selected: false, itemStyle: {areaColor: '#e4f1d5'} },
  { name: '宁夏回族自治区', selected: false, itemStyle: {areaColor: '#fefcd5'} },
  { name: '新疆维吾尔自治区', selected: false, itemStyle: {areaColor: '#fefcd5'} },
  { name: '海南省', selected: false, itemStyle: {areaColor: '#fad8e9'} },
  { name: '台湾省', selected: false, itemStyle: {areaColor: '#fce8cd'} },
  { name: '香港特别行政区', selected: false, itemStyle: {areaColor: '#dc9bbb'} },
  { name: '澳门特别行政区', selected: false, itemStyle: {areaColor: '#e0f7cc'} },
  { name: '南海诸岛', selected: false, itemStyle: {areaColor: '#dc9bbb'} }
]

/* 绘制图形 */
drawEcharts () {
  echarts.registerMap(this.mapType, this.mapType === 'china' ? ChinaGeo : WorldGeo)
  this.echartsObj = echarts.init(document.getElementById(this.id))
  let option = {
    tooltip: {
      formatter: (param) => {
        console.log(param)
        return 'kkk'
      }
    },
    geo: {
      map: this.mapType,
      zoom: 1,
      roam: false, // 鼠标滑动放大缩小
      itemStyle: {
        areaColor: '#f5f5f5',
        borderWidth: '.5',
        borderColor: '#999'
      }
    },
    series: [{
      type: 'map',
      map: this.mapType,
      itemStyle: {
        areaColor: '#f5f5f5',
        borderWidth: '.5',
        borderColor: '#999'
      },
      data: this.mapType === 'china' ? CONST_CHINA_REGION_COLOR : CONST_WORLD_REGION_COLOR // 彩色地图绘制
    }, {
      type: 'effectScatter',
      coordinateSystem: 'geo',
      rippleEffect: {
        period: 4,
        brushType: 'stroke'
      },
      symbolSize: 10,
      itemStyle: {
        color: 'blue',
        opacity: 1
      },
      data: this.data
    }]
  }
  this.echartsObj.setOption(option)
}

注意

geo文件

V5移除了内置的geoJSON(原先在echarts/map文件夹下),这里引用的中国和世界地图的geoJSON是我从老的版本中复制出来的

git clone https://gitee.com/potatocoder/geo_json.git

地理名称一致

变量CONST_CHINA_REGION_COLOR中的地理位置需要跟geoJSON中的地理名称完全对应,否则也会匹配不到具体的地理位置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值