vue引入echarts地图,可切换到各个省份

背景

可视化大屏需求,地图可切换到世界地图、中国地图、各个省份地图。


image.png

开始---引入echarts

npm install echarts
import echarts from 'echarts';

初始化数据

image.png
    // 设置地图数据
    async setMapType(obj) {
      let url = '';// 本地地址
      if (obj == 'china') {
        url = `${location.origin}${location.pathname}models/map/json/china.json`;
      } else if (obj == 'world') {
        url = `${location.origin}${location.pathname}models/map/json/world.json`;
      } else {
        url = `${location.origin}${location.pathname}models/map/json/province/${obj}.json`;
      }
      const map = await common.loadJson(url);//从静态json读取文件数据
      if (map != false) {
        echarts.registerMap('map', JSON.stringify(map));//注册地图数据
      }
    },
// 加载外部json文件
async function loadJson(url = '') {
  const result = await $.ajax({
    type: 'get',
    url,
    dataType: 'JSON',
    success(map) {
      return map;
    },
    error() {
      return false;
    },
  });
  return result;
}

初始化地图

async initChart(special) {
      const vm = this;
      vm.chart = echarts.init(document.getElementById(vm.dataInfo.id));
      const option = {
        backgroundColor: config.map.bgColor,
        tooltip: {
          show: config.tooltip.isTooltip,
          trigger: 'item',
          position: config.tooltip.tooltipPosition,
          backgroundColor: config.tooltip.bgColor,
          borderColor: config.tooltip.borderColor,
          borderWidth: config.tooltip.borderWidth * common.getFontSize(),
          padding: config.tooltip.padding * common.getFontSize(),
          formatter(params) {
            if (params.value == undefined) {
              return `${params.name}`;
            } else {
              return `${params.name} :</br>${params.value[2]}${unit}`;
            }
          },
          textStyle: {
            color: config.tooltip.color,
          },
        },
        legend: {
          orient: 'vertical',
          y: 'bottom',
          x: 'right',
          data: ['pm2.5'],
          textStyle: {
            color: '#fff',
          },
        },
        geo: {
          map: 'map',
          left: 0.25 * common.getFontSize(),
          top: 0.25 * common.getFontSize(),
          right: 0.25 * common.getFontSize(),
          bottom: 0.25 * common.getFontSize(),
          roam: config.map.isRoam, // 是否允许鼠标滚动放大,缩小
          scaleLimit: { // 所属组件的z分层,z值小的图形会被z值大的图形覆盖
            min: 0.5, // 最小的缩放值
            max: 3, // 最大的缩放值
          },
          label: {
            show: config.textLabel.isTextLabel, // 是否显示文本
            color: config.textLabel.textColor, // 文本颜色
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。 默认样试。
            normal: {
              color: {
                type: 'linear',
                x: 100,
                y: 12,
                x2: 12,
                y2: 100,
                colorStops: [{
                  offset: 0, color: config.area.color[0], // 0% 处的颜色
                }, {
                  offset: 1, color: config.area.color[1], // 100% 处的颜色
                }],
                global: config.area.isGlobal, // 缺省为 false
              },
              borderColor: config.area.borderColor, // 边框线
              borderWidth: config.area.borderWidth * common.getFontSize(), // 线宽
              borderType: config.area.borderType, // 支持 'solid', 'dashed', 'dotted'。
              shadowColor: config.area.shadowColor[0], // 阴影颜色
              shadowBlur: config.area.shadowBlur * common.getFontSize(), // 模糊大小
              shadowOffsetX: config.area.shadowOffsetX * common.getFontSize(), // 水平偏移
              shadowOffsetY: config.area.shadowOffsetY * common.getFontSize(), // 垂直偏移
            },
          },
          emphasis: { // 高亮状态下的多边形和标签样式。
            label: { // 文本
              show: config.textLabel.isTextLabel,
              color: config.textLabel.emphasizeColor,
            },
            itemStyle: { // 区域
              areaColor: config.area.emphasizeAreaColor,
            },
          },
          // regions: [{
          //   name: '重庆',
          //   itemStyle: {
          //     normal: {
          //       areaColor: 'red',
          //       color: 'red',
          //     },
          //   },
          // }], // 区域块的颜色
        },
        // visualMap: {
        //   min: 0,
        //   max: 200,
        //   calculable: true,
        //   inRange: {
        //     color: ['#50a3ba', '#eac736', '#d94e5d'],
        //   },
        //   textStyle: {
        //     color: '#fff',
        //   },
        // },
        series: [
          {
            name: '点',
            type: config.scatter.isRipple ? 'effectScatter' : 'scatter',
            coordinateSystem: 'geo',
            data,
            symbol: config.scatter.isIconSelect ? `image://${config.scatter.iconUrl}` : config.scatter.scatterType,
            symbolSize: config.scatter.isIconSelect ? config.scatter.iconSize * common.getFontSize() : config.scatter.symbolSize * common.getFontSize(),
            // 标记的大小,可以设置数组或者函数返回值的形式
            // symbolSize(val) {
            //   return (val[2] / 2) / 100 * common.getFontSize();
            // },
            label: {
              normal: {
                formatter: '{b}',
                position: config.scatter.lapelPosition,
                show: config.scatter.iScatterLabel,
                color: config.scatter.labelColor,
              },
            },
            itemStyle: {
              color: config.scatter.scatterColor,
              borderColor: config.scatter.borderColor,
              borderWidth: 1,
            },
            emphasis: {
              itemStyle: {
                borderColor: '#fff',
                borderWidth: 1,
              },
            },
            rippleEffect: { // 涟漪特效相关配置。
              brushType: config.scatter.brushType, // 波纹的绘制方式
            },
            hoverAnimation: true, // 鼠标移入放大圆
          },
        ],
      };
      vm.chart.setOption(option, true);
    },

图片

image.png

image.png

欢迎评论点赞!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容