• Vue + ECharts4.9实现基本飞行图(涟漪特效动画)


    Vue + ECharts4.9实现基本飞行图(涟漪特效动画)

    <template>
      <div>
        <h3>Vue + echarts4.9 基本地图</h3>
        <div id="daFeiMap" ref="daFeiMap" />
      </div>
    </template>
    <script>
    
    /*
    *  main.js 全局注册
    *   import echarts from 'echarts'
    *   Vue.prototype.$echarts = echarts
    *   import 'echarts/map/js/china';
    *
    * 使用 this.$echarts.init()
    * */
    import echarts from 'echarts'
    import 'echarts/map/js/china'; // 这个主要执行了 echarts.registerMap('china', " china.json 数据 ");
    
    const planePath =
        'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.' +
        '662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,' +
        '121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,' +
        '241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,' +
        '42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';
    
    
    export default {
      data () {
        return {
          msg: '涟漪特效动画 effectScatter',
          geoCoordMapChina: { // 出发地  -------------------------地区坐标自行找坐标资料
            '新疆': [87.36, 43.45],
            '北京': [116.413554, 39.911013],
            '杭州': [120.161693, 30.280059],
            '广东': [113.14, 23.08],
          },
          destinationMsg: { // 目的地
            name: "北京", value: [116.413554, 39.911013, ""]
          },
          planePath: planePath
        }
      },
      mounted() {
        this.drawMap();
      },
      methods: {
        drawMap() {
          let planePath = this.planePath; // fei_tip: 见下面
          // 接口给的数据格式---可以考虑用这种格式
          let seriesData = [ // todo: 接口数据
            {"name": "杭州", "value": ""},
            {"name": "广东", "value": ""},
            {"name": "新疆", "value": ""}
          ];
    
          let resData = this.convertData(seriesData)
    
          const myChart = echarts.init(this.$refs.daFeiMap)
          const mapBoxOption = {
            geo: { // 地理坐标系
              show: true,
              map: 'china',
            },
            series: [
              { // 基本地图
                type: 'map',
                mapType: 'china',
              },
              { // fei_tip:线路---航线
                type: 'lines',
                symbolSize: 10,
                effect: { // 航线动态
                  show: true,
                  period: 6,
                  trailLength: 0,
                  symbol: planePath,
                  symbolSize: 15
                },
                lineStyle: {
                  color: '#2d9df1',   //航线的颜色
                   1,
                  opacity: 0.6,
                  curveness: 0.2 //  弯曲程度
                },
                // data: [
                //   {
                //     "fromName": "杭州",
                //     "toName": "北京",
                //     "coords": [[120.161693, 30.280059], [116.413554, 39.911013, ""]],
                //     "value": [116.413554, 39.911013, ""]
                //   },
                //   {
                //     "fromName": "广东",
                //     "toName": "北京",
                //     "coords": [[113.14, 23.08], [116.413554, 39.911013, ""]],
                //     "value": [116.413554, 39.911013, ""]
                //   },
                //   {
                //     "fromName": "新疆",
                //     "toName": "北京",
                //     "coords": [[87.36, 43.45], [116.413554, 39.911013, ""]],
                //     "value": [116.413554, 39.911013, ""]
                //   }
                // ],
                data: resData.resResult
              },
              { // fei_tip: 出发地
                type: 'effectScatter',
                coordinateSystem: 'geo',  // fei_tip: 使用地理坐标系
                rippleEffect: { //涟漪特效
                  period: 4, //动画时间,值越小速度越快
                  brushType: 'stroke', //波纹绘制方式 stroke, fill
                  scale: 4 //波纹圆环最大限制,值越大波纹越大
                },
                label: {
                  show: true,
                  position: 'right', //显示位置
                  offset: [5, -10], //偏移设置
                  formatter: function (params) { // 圆环显示文字
                    return params.data.name;
                  },
                  fontSize: 13,
                  color: '#ff6b81',
                },
                symbol: 'circle',
                symbolSize: function (val) {
                  return 6; //圆环大小
                },
                itemStyle: {
                  show: true,
                  color: '#90a5dc'  // 圆环颜色
                },
                // data: [
                //   {name: '杭州', value: [120.161693, 30.280059, ""]},
                //   {name: '广东', value: [113.14, 23.08, ""]},
                //   {name: '新疆', value: [87.36, 43.45, ""]},
                // ]
                data: resData.resFromResult
              },
              { // 目的地样式---北京
                type: 'effectScatter',
                coordinateSystem: 'geo',
                label: {
                  show: true,
                  position: 'right',
                  formatter: '{b}',
                  color: '#ff6b81'
                },
                symbolSize: function (val) {
                  return 8
                },
                itemStyle: {
                  color: '#fe4272',
                },
                data: [
                  // {name: "北京", value: [116.413554, 39.911013, ""]},
                  this.destinationMsg
                ]
              }
            ],
          }
    
          myChart.setOption(mapBoxOption)
        },
    
        /**
         * 数据处理
         * @param resData
         * @returns {{resFromResult: *[], resResult: *[]}}
         *
         *
         * resResult 数据格式
         * [
         *   {
         *     "fromName": "杭州",
         *     "toName": "北京",
         *     "coords": [[120.161693, 30.280059], [116.413554, 39.911013, ""]],
         *     "value": [116.413554, 39.911013, ""]
         *   }
         * ]
         *
         * resFromResult 数据格式
         * [
         *   {
         *     "name": "杭州",
         *     "value": [120.161693, 30.280059]
         *   }
         * ]
         *
         */
        convertData(resData) {
          let resResult = []; // 航线覆盖地址
          let resFromResult = []; // 飞行来源地址
    
          for (let i = 0; i < resData.length; i++) {
            let fromCoord = this.geoCoordMapChina[resData[i].name];
            resResult.push({
              fromName: resData[i].name,
              toName: this.destinationMsg.name,
              coords: [fromCoord, this.destinationMsg.value],
              value: this.destinationMsg.value
            })
    
            resFromResult.push({
              name: resData[i].name,
              value: fromCoord
            });
          }
    
          return {resResult, resFromResult};
        },
      },
    };
    </script>
    
    <style scoped>
    #daFeiMap {
      width: 500px;
      height: 480px;
    }
    </style>
    View Code

  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/dafei4/p/15787290.html
Copyright © 2020-2023  润新知