echarts 3d地图加动画效果

直接上代码

<telement>

 <div id="myChart" ref="ele" v-model="city"></div>

</telement>

js部分

import china from '../../../node_modules/echarts/map/js/china'

import './map.js'//该文件导入34个省份数据,在下不会导入整个文件夹下所有文件,试过好多次,总是报错,内容格式如下:

require('../../../node_modules/echarts/map/js/province/anhui')

require('../../../node_modules/echarts/map/js/province/aomen')

等等

然后是重点,data中

 city: '',//用于地图下钻

 iscity:true,//判断师傅为省级地图

然后是省份数据

      geoCoordMap: {

        黑龙江: [127.9688, 45.368],

        内蒙古: [110.3467, 41.4899],

        吉林: [125.8154, 44.2584],

        北京市: [116.4551, 40.2539],

        辽宁: [123.1238, 42.1216],

        河北: [114.4995, 38.1006],

        天津: [117.4219, 39.4189],

        山西: [112.3352, 37.9413],

        陕西: [109.1162, 34.2004],

        甘肃: [103.5901, 36.3043],

        宁夏: [106.3586, 38.1775],

        青海: [101.4038, 36.8207],

        新疆: [87.9236, 43.5883],

        西藏: [91.11, 29.97],

        四川: [103.9526, 30.7617],

        重庆: [108.384366, 30.439702],

        山东: [117.1582, 36.8701],

        河南: [113.4668, 34.6234],

        江苏: [118.8062, 31.9208],

        安徽: [117.29, 32.0581],

        湖北: [114.3896, 30.6628],

        浙江: [119.5313, 29.8773],

        福建: [119.4543, 25.9222],

        江西: [116.0046, 28.6633],

        湖南: [113.0823, 28.2568],

        贵州: [106.6992, 26.7682],

        云南: [102.9199, 25.4663],

        广东: [113.12244, 23.009505],

        广西: [108.479, 23.1152],

        海南: [110.3893, 19.8516],

        上海: [121.4648, 31.2891],

      },

      chinaDatas: [

        [{ name: '河北', value: 300 }],

        [{ name: '天津', value: 300 }],

        [{ name: '山西', value: 300 }],

        [{ name: '陕西', value: 300 }],

        [{ name: '甘肃', value: 300 }],

        [{ name: '宁夏', value: 300 }],

        [{ name: '青海', value: 300 }],

        [{ name: '新疆', value: 300 }],

        [{ name: '西藏', value: 300 }],

        [{ name: '四川', value: 300 }],

        [{ name: '重庆', value: 300 }],

        [{ name: '山东', value: 300 }],

        [{ name: '河南', value: 300 }],

        [{ name: '上海', value: 1300 }],

      ],//懂得都懂

 shanxidatas: [[{ name: '太原', value: [112.3352, 37.9413, 20] }]],//省份内数据,没调用封装的方法

然后就是monted里面:

 this.mapinit()

this.drawChart()

然后就是写js方法了 

 convertData(data) {

      var res = []

      for (var i = 0; i < data.length; i++) {

        var geoCoord = this.geoCoordMap[data[i][0].name]

        if (geoCoord) {

          res.push({

            name: data[i][0].name,

            value: geoCoord.concat(data[i][0].value),

          })

        }

      }

      return res

    },//这个方法就是对省份数据进行处理,应该都能看懂吧,不解释了

    LoadMapping(name, data) {

      var chartOption = {

        geo: {

          show: true,

          map: name,

          width: 1024,

          top: 0,

          label: {

            position: 'top',

            distance: 5,

            normal: {

              show: true,

              textStyle: {

                color: '#fff',

              },

            },

            emphasis: {

              textStyle: {

                color: '#fff',

              },

            },

          },

          itemStyle: {

            normal: {

              areaColor: {

                type: 'radial',

                x: 0.5,

                y: 0.5,

                r: 0.8,

                colorStops: [

                  {

                    offset: 0,

                    color: '#26579F', // 0% 处的颜色

                  },

                  {

                    offset: 1,

                    color: '#46B5C7', // 100% 处的颜色

                  },

                ],

              },

            },

          },

          emphasis: {

            label: {

              show: true,

              textStyle: {

                color: '#fff',

                fontSize: 13,

                backgroundColor: 'rgba(0,23,11,1)',

              },

            },

            itemStyle: {

              areaColor: '#f00', // 高亮时地图板块颜色改变

            },

          },

        },

        series: [

          {

            type: `effectScatter`,

            coordinateSystem: `geo`,

            showEffectOn: 'render',

            zlevel: 1,

            rippleEffect: {

              period: 5,

              scale: 4,

              brushType: 'fill',

            },

            hoverAnimation: true,

            // label: {

            //   normal: {

            //     formatter: '{b}',

            //     position: 'bottom',

            //     offset: [15, 0],

            //     color: '#fff',

            //     show: true,

            //     fontSize: 16,

            //   },

            // },

            itemStyle: {

              normal: {

                color: '#1DE9B6',

                shadowBlur: 10,

                shadowColor: '#333',

              },

            },

            symbolSize: 16,

            data: this.convertData(this.chinaDatas),

          },

          {

            type: 'scatter',

            geoIndex: 0,

            coordinateSystem: 'geo',

            hoverAnimation: false,

            symbolSize: 78,

            symbol: 'image://' + require('../../assets/homepage/hdpi/yu.png'), // require引入图片路径

            label: {

              show: true,

              color: '#00e5ff',

              offset: [0, 0],

              fontSize: 15,

            },

            data: [

              {

                name: '阳泉',

                value: [113.57, 37.85],

              },

              {

                name: '湖州',

                value: [120.1, 30.86],

              },

            ],

            zlevel: 3,

          },

        ],

      }

      return chartOption

    },//该方法为二维地图封装,作为3d地图的纹理贴图使用,不是原创,参考某位大佬

    LoadMapping3d(name, data) {

      const canvas = document.createElement(`canvas`)

      var mapBg = echarts.init(canvas, null, {

        width: 1024,

        height: 1024,

      })

      const chartOption = this.LoadMapping(name, data)

      mapBg.setOption(chartOption)

      var option = {

        geo3D: {

          data: data,

          map: name,

          zlevel:1,

          shading: 'color',

          colorMaterial: {

            detailTexture: mapBg, // 纹理贴图

            textureTiling: 1, // 默认为1,也就是拉伸填满。大于 1 的时候,数字表示纹理平铺重复的次数

          },

          top: -50,

          tooltip: 'axis', //提示框设置

          emphasis: {

            //当鼠标放上去  地区区域是否显示名称

            label: {

              show: true,

              formatter: (params) => {

                this.city = params.name

                return this.city

              },

            },

          },

        },

      }

      return option

    },//三维地图封装,其中二维地图作为纹理贴图使用

    mapinit() {

      var data = this.convertData(this.chinaDatas)  //数据处理

      let myChart3 = echarts.init(document.getElementById('myChart'))//获取节点

      const chartOption3d = this.LoadMapping3d('china', data)

      myChart3.setOption(chartOption3d)   //绘制中国地图

      myChart3.getZr().on('click', (params) => {

        if (this.$refs.ele.childNodes[0].style.cursor == 'pointer') {

          if (this.city && this.iscity==true) {

            console.log(this.city);

            this.iscity=false;

            const chartOption3d = this.LoadMapping3d(this.city, this.shanxidatas)

            myChart3.setOption(chartOption3d)

          }else{

            this.iscity=true;

            const chartOption3d = this.LoadMapping3d('china', data)

            myChart3.setOption(chartOption3d)

          }

        }

      })

    },//后面为省份地图下钻,其中点击事件不好用,获取不到,然后查阅资料,用getZr()方法,但只能获取到横纵坐标,起码可以点击了,然后就是获取省份名称,实现下钻,获取方法为在鼠标划过时,return出省份名称,然后绑定ref,通过判断是否点击到ref节点,然后判断是否获取到城市,然后看是否可以下钻,也就是状态,下钻后改变状态,改变option中城市传值,然后重新渲染地图, 再次点击时,不可继续下钻,绘制中国地图,

地图加动画的话涟漪效果,加图片用到了自定义scatter,格式一定要对,

    symbol: 'image://' + require('../../assets/homepage/hdpi/yu.png'),否则不生效,

总之,在echartsgl中加动画没想到好的办法,就在三位地图上加二维地图,这也是参考别人的,第一次发文章,不会使用,附上参考文章地址吧,使用echartgl构建3D中国地图_zhuantou000的博客-CSDN博客_echarts-gl地图

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: echarts3d地图飞线效果指的是通过使用echarts3d插件来实现地图上的飞线动画效果echarts3d是一款基于JavaScript的可视化图表库,能够帮助用户轻松创建各种动态、交互性的图表。 要实现地图飞线效果,首先需要引入echarts3d插件,并载相关的地图数据。然后,在echarts3d提供的配置中,设置多个起点和终点坐标,根据坐标信息绘制出对应的连线。 接下来,可以通过设置图表的样式和动画效果来实现飞线的效果。可以设置连线的颜色、粗细,以及起点和终点的标记形状和颜色等。为了实现动画效果,可以设置连线的透明度、延迟和持续时间等属性,使连线在地图上呈现出移动的效果。 此外,可以通过设置图表的交互功能,使用户可以通过鼠标移动和缩放来浏览地图,并与飞线进行交互。通过添鼠标事件和回调函数,可以实现鼠标悬停时的高亮效果,点击时的弹出信息窗口等交互操作。 总之,echarts3d地图飞线效果通过使用echarts3d插件,绘制地图和连线,并通过配置样式和动画效果,以及添交互功能来实现。这种飞线效果可以使地图生动和有趣,帮助用户更好地理解和分析地理数据。 ### 回答2: Echarts3D地图飞线效果Echarts库中的一种可视化效果,可以展示地理关系的动态连接。该效果利用地理坐标,将各个地点通过曲线飞线的方式连接起来,形成动态的数据流动效果。 要实现Echarts3D地图飞线效果,首先需要准备好数据,包括地点的经纬度和数据的数值。然后在Echarts图表中添地理坐标系,配置好相关参数,并引入Echarts3D插件。 通过设置地图的初始视角、地点的标记和数值,以及曲线的配置,可以使得地图上的数据点按照指定的路径飞线连接。你可以设置曲线的颜色、粗细、动画效果等参数,以使得飞线效果醒目动态。 此外,你还可以通过配置相关参数,使得飞线的路径和数值能够适应不同的数据需求,例如配置线条的颜色渐变、设置曲线的弯曲度、更改飞线的速度等等。这些配置参数都可以根据你的实际需求进行调整。 总之,Echarts3D地图飞线效果提供了一种直观而动态的数据展示方式,帮助我们更好地理解地理关系和数据之间的联系。通过合理配置参数和数据,我们可以创造出各种各样的地图飞线效果,将数据可视化呈现,提升数据分析和展示的效果。 ### 回答3: ECharts 是一款基于JavaScript的可视化库,提供了丰富的图表类型以及交互功能。其中 ECharts 3D 地图飞线效果是该库的一个独特的功能,可以用于展示地理数据之间的关联关系。 ECharts 3D 地图飞线效果主要包括两个部分:折线地图和飞线动画。首先,我们可以使用 ECharts地图类型(如 scatter3D 或 lines3D)来绘制一个折线地图,将地理数据可视化展现出来。通过设置相应的经纬度坐标以及其他数据属性,可以在地图上绘制出各个地点的标记点。 接下来,通过配置飞线动画特效参数,可以实现地理数据之间的飞线效果。通过定义起点和终点的经纬度坐标,以及飞线的属性(如颜色、宽度、透明度等),ECharts 可以自动生成一条飞线路径,并在地图上进行动画展示。 在飞线动画中,可以通过设置飞行时间、延迟等参数来控制效果的展示和流畅度。此外,可以通过配置文本标签等样式属性,将飞线上的数据信息以文字形式展示出来,增强了地理数据之间的可视化效果和交互性。 综上所述,ECharts 3D 地图飞线效果通过折线地图和飞线动画的结合,能够直观地展示地理数据之间的关联关系。用户可以通过设置经纬度、属性参数以及动画特效等自定义地理数据的可视化呈现方式,从而实现丰富多样的数据展示效果

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值