vue使用echarts与echarts-gl实现3d地图与 3d柱状图

目录

前言

一、下载echarts与echarts gl

二、vue引入与页面使用

1.引入

2.页面引入echarts-gl

三、下载地图数据

四、使用地图

1、html初始化地图放入位置:

2、data创建变量

3、创建地图

4、钩子函数渲染地图

5、渲染完成效果

总结


前言

提示:本项目使用vue,请提前搭建好vue项目

本次需求为实现一个有立体效果的地图,上面需有柱状图表示当地的数据


提示:以下是本篇文章正文内容,下面案例可供参考

一、下载echarts与echarts gl

在终端直接输入npm install echarts下载最新版本echarts

输入npm install echarts-gl 下载3d主张图插件

npm install echarts

npm install echarts-gl

二、vue引入与页面使用

1.引入

在main.js文件下引入echarts

代码如下(示例):

import * as echarts from 'echarts'

添加到vue原型以实现全局使用

Vue.prototype.$echarts = echarts

2.页面引入echarts-gl

代码如下(示例):

import "echarts-gl"

三、下载地图数据

前往http://datav.aliyun.com/portal/school/atlas/area_selector下载需要的地图数据

这边下载的是 四川省自贡市的地图数据,直接下载json文件即可

下载后放在项目文件夹里后,在页面引入

import zigong from '../utils/zigongshi.json'

四、使用地图

1、html初始化地图放入位置:

<div id="cityChart" ref="cityMap" :style="{width: '100%', height: '1000px'}"></div>

2、data创建变量

data() {
  return {
    cityChart: ''
  }
},

3、创建地图

// 地图
getCityMap() {
    this.cityChart = this.$echarts.init(this.$refs.cityMap);
    this.$echarts.registerMap("zigong", zigong);

    let option = {
        tooltip: {},
        textStyle: {
           color: '#fff', // 高亮时标签颜色变为 白色
           fontSize: 16, // 高亮时标签字体 变大
        },
        geo3D: {
           map: "zigong", //注册地图的名字
           roam: true, //开启鼠标缩放和平移漫游。默认不开启
           itemStyle: {
               color: "#4189f2", // 背景颜色
               opacity: 1, //透明度
               borderWidth: 0.4,
               borderColor: "#fff",
           },
           //地图单个板块标签样式
           label: {
               show: false,
               textStyle: { // 字体样式
                  color: '#ffffff',
                  opacity: 1,
               },
           },
           //鼠标放入高亮时地图板块的样式
           emphasis: {
               label: {
                  show: false //是否显示
               }
           },
           // 每个地图板块单独设置背景颜色
           regions: [
               {
                   name: '荣县',
                   itemStyle: {
                       color: '#5064F7'
                   }
               },
               {
                   name: '贡井区',
                   itemStyle: {
                       color: '#9E64F7'
                   }
               },
               {
                   name: '自流井区',
                   itemStyle: {
                       color: '#5A64F1'
                   }
               },
               {
                   name: '大安区',
                   itemStyle: {
                       color: '#3D9634'
                   }
               },
               {
                   name: '高新区',
                   itemStyle: {
                       color: '#DE0000'
                   }
               },
               {
                   name: '沿滩区',
                   itemStyle: {
                       color: '#F5C25F'
                   }
               },
               {
                   name: '富顺县',
                   itemStyle: {
                       color: '#228AA0'
                   }
               },
          ],
          //光照阴影
          shading: "lambert",
          light: {
               main: {
                   color: "#fff", //光照颜色
                   intensity: 1, //光照强度
                   shadow: true, //是否显示阴影
                   alpha: 60,
                   beta: 10,
               },
               ambient: {
                   intensity: 0.3,
               },
          },
          //鼠标控制地图旋转
          viewControl: {
               projection: "perspective", // 投影方式
               autoRotate: false, // 是否开启地图自动旋转
               autoRotateDirection: "cw", // 地图自动旋转的方向
               autoRotateSpeed: 5, // 地图自动旋转的速度
               autoRotateAfterStill: 3, // 鼠标离开后多少秒自动开启旋转
               damping: 0, // 鼠标进行旋转,缩放等操作时延迟时间
               rotateSensitivity: 10, // 旋转操作的灵敏度
               zoomSensitivity: 10, // 缩放操作的灵敏度
               panSensitivity: 10, // 平移操作的灵敏度
               panMouseButton: "left", // 平移操作使用的鼠标按键
               rotateMouseButton: "left", // 旋转操作使用的鼠标按键
               distance: 90, // 默认视角距离主体的距离
               minDistance: 40, // 视角通过鼠标控制能拉近到主体的最小距离
               maxDistance: 145, // 视角通过鼠标控制能拉远到主体的最大距离
               alpha: 40, // 视角绕 x 轴,即上下旋转的角度
               beta: 15, // 视角绕 y 轴,即左右旋转的角度
               minAlpha: -720, // 上下旋转的最小 alpha 值
               maxAlpha: 720, // 上下旋转的最大 alpha 值
               minBeta: -720, // 左右旋转的最小 beta 值
               maxBeta: 720, // 左右旋转的最大 beta 值
               center: [0, 0, 0], // 视角中心点
               animation: true, // 是否开启动画
               animationDurationUpdate: 1000, // 过渡动画的时长
               animationEasingUpdate: "cubicInOut", // 过渡动画的缓动效果
          },
          silent: false,
          regionHeight: 2, //修改整个地图的三维高度
      },
      // 3d柱状图实现
      series: [
          {
              name: 'bar3D',
              type: 'bar3D',
              coordinateSystem: 'geo3D',
              barSize: 1, //柱子粗细
              shading: 'lambert',
              opacity: .7, // 柱子透明度
              bevelSize: 0.1,
              // 柱子上标签样式
              label: {
                  show: true,
                  distance: 0, //文字离柱子的距离
                  formatter(param) {
                      let num = param.data.value[2]
                      return param.name + num;
                  },
                  // 文字样式
                  textStyle: {
                     color: '#fff',
                     fontSize: 16,
                  }
              },
              emphasis: {//柱子高亮状态的标签和样式配置。
                  label: {
                     show: false,
                     textStyle: {
                         fontSize: 20,
                     }
                  }
              },
              // 柱子样式
              itemStyle: {
                  color: '#fff',
                  opacity: 1
              },
              data: [
                  {
                      name: "荣县", //柱子的名字
                      value: [104.41, 29.45, 1] //柱子显示在地图的位置(经纬度),柱子的值
                  },
                  {
                      name: "贡井区",
                      value: [104.63, 29.34, 2]
                  },
                  {
                      name: "自流井区",
                      value: [104.69, 29.24, 3]
                  },
                  {
                      name: "大安区",
                      value: [104.88, 29.41, 4]
                  },
                  {
                      name: "沿滩区",
                      value: [104.87, 29.27, 5]
                  },
                  {
                      name: "富顺县",
                      value: [104.99, 29.18, 6]
                   },
                ]
            }
        ],
    }

    this.cityChart.setOption(option);
},

4、钩子函数渲染地图

mounted() {
    this.getCityMap()
},

5、渲染完成效果


 

总结

实现完成大概就这样,希望给小伙伴带来帮助!!

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue3中使用EChartsECharts-GL实现3D饼状的步骤如下: 1. 安装依赖 ``` npm install echarts echarts-gl --save ``` 2. 引入EChartsECharts-GLVue组件中引入EChartsECharts-GL: ```javascript import echarts from 'echarts' import 'echarts-gl' ``` 3. 准备数据 在Vue组件中准备数据,例如: ```javascript data() { return { chartData: [ { value: 335, name: 'Chrome' }, { value: 310, name: 'Firefox' }, { value: 234, name: 'Safari' }, { value: 135, name: 'IE' }, { value: 1548, name: '其他' } ] } } ``` 4. 创建ECharts实例 在Vue组件中创建ECharts实例: ```javascript mounted() { const chartDom = this.$refs.chart const myChart = echarts.init(chartDom, null, { renderer: 'canvas' }) ``` 这里指定了渲染器为canvas,因为ECharts-GL需要使用WebGL渲染器,而默认的渲染器为canvas。 5. 配置ECharts选项 在Vue组件中配置ECharts选项,包括饼状的类型、数据、标签等: ```javascript const option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, series: [ { type: 'pie', radius: [20, 80], label: { show: true, formatter: '{b}:{d}%' }, data: this.chartData } ] } ``` 这里指定了饼状的类型为pie,半径范围为[20, 80],显示标签,并使用之前准备的数据。 6. 使用ECharts-GLVue组件中使用ECharts-GL来将饼状转换为3D饼状: ```javascript myChart.setOption(option) myChart.getZr().painter.configLayer(0, { clearColor: null, clearDepth: 0, motionBlur: true, lastFrameIndex: -1 }) myChart.setOption({ series: [ { type: 'pie3D', shading: 'lambert', label: { show: true, formatter: '{b}:{d}%' }, data: this.chartData } ] }) ``` 这里使用`setOption`方法来设置饼状的选项,并使用`getZr()`方法获取渲染器实例,然后使用`configLayer`方法来设置WebGL渲染器的配置。最后使用`setOption`方法将饼状转换为3D饼状。 7. 渲染表 在Vue组件中渲染表: ```html <template> <div ref="chart" style="width: 100%; height: 500px;"></div> </template> ``` 这里使用`ref`属性来获取DOM元素,并设置宽度和高度。 完整代码如下: ```javascript <template> <div ref="chart" style="width: 100%; height: 500px;"></div> </template> <script> import echarts from 'echarts' import 'echarts-gl' export default { data() { return { chartData: [ { value: 335, name: 'Chrome' }, { value: 310, name: 'Firefox' }, { value: 234, name: 'Safari' }, { value: 135, name: 'IE' }, { value: 1548, name: '其他' } ] } }, mounted() { const chartDom = this.$refs.chart const myChart = echarts.init(chartDom, null, { renderer: 'canvas' }) const option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, series: [ { type: 'pie', radius: [20, 80], label: { show: true, formatter: '{b}:{d}%' }, data: this.chartData } ] } myChart.setOption(option) myChart.getZr().painter.configLayer(0, { clearColor: null, clearDepth: 0, motionBlur: true, lastFrameIndex: -1 }) myChart.setOption({ series: [ { type: 'pie3D', shading: 'lambert', label: { show: true, formatter: '{b}:{d}%' }, data: this.chartData } ] }) } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值