Echarts-3D路径图-Flights GL、VUE3最新引用方法(避免踩坑)

示例图(老版本)

示例图(新版本)

 

5个关键点避免踩坑

1.版本依赖问题

新版本是完全可以的(不可能不可以),不需要回退版本

npm i  echarts-gl

npm i echarts

这里最大的问题是map/world.js的引入问题。

所以查看echarts 范例源码,发现如下大坑

<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>Flights GL - Apache ECharts Demo</title>
</head>
<body>
  <div id="chart-container"></div>
  <script src="https://fastly.jsdelivr.net/npm/jquery"></script>
  <script src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script>
  <script src="https://fastly.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js"></script>
  <script src="https://fastly.jsdelivr.net/npm/echarts@4.9.0/map/js/world.js"></script>
</body>
</html>

echarts@4.9.0/map/js/world.js,问题就在这里。可以打开最后一个链接,将其中的js改成json,下载静态的json数据,如此链接:

https://fastly.jsdelivr.net/npm/echarts@4.9.0/map/json/world.json

然后正常将 地图数据 进行静态引入即可

或者下载对应的低版本 echarts@4.9.0,然后去node moudels 里面找到echarts/map 文件夹,拿到自己需要的js或者json地图数据格式,再重新下载最新版本echarts,将刚才拿到的地图数据进行静态引入,两种方法均可以(也可以去GitHub找4.9版本的包,里面也有地图数据,这是第三种方法)。

2.请求数据

都2023年了,谁TM还用JQ?不用下载JQ依赖,不需要完全按着如下官方的写法,可以自己用顺手的,比如axios啥的

$getJSON(url function(urldata){

})
// 不用这样写,可以用axios替换,或者干脆不要,改成静态的

3.接口问题

官方的范例接口,有问题的看这里

https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples/data-gl/asset/data/flights.json

var ROOT_PATH = 'https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples';
var uploadedDataURL = ROOT_PATH + '/data-gl/asset/data/flights.json';

4.数据问题

也可以下载下来作为静态数据使用,如下所示,localData就是请求的数据,可以下载下来然后引入,然后进行使用

import localData from "../assets/3dGragphData.json";


function getAirportCoord(idx) {
    return [localData.airports[idx][3], localData.airports[idx][4]];
  }
  var routes = localData.routes.map(function (airline) {
    return [getAirportCoord(airline[1]), getAirportCoord(airline[2])];
  });

5.直接上完整代码(本范例,使用 setup 语法糖)

<template>
  <div class="login_new">
    <div id="main" style="width: 100%; height: 1000px"></div>
  </div>
</template>

<script setup>
import { onMounted } from "vue";
import * as echarts from "echarts";
import "echarts-gl";
// import "echarts/map/js/world.js"; //必须引入世界地图  可以npm下载 echarts": "^4.6.0  因为5以后没有map了,然后拿到map里面的json文件再如下做静态引入
import world from "../assets/map/world.json";
import localData from "../assets/3dGragphData.json";

onMounted(() => {
  draw();
});
function draw() {
  console.log("localData", localData); // 静态文件也可以
  var myChart = echarts.init(document.getElementById("main"));
  myChart.showLoading();
  myChart.hideLoading();
  function getAirportCoord(idx) {
    return [localData.airports[idx][3], localData.airports[idx][4]];
  }
  var routes = localData.routes.map(function (airline) {
    return [getAirportCoord(airline[1]), getAirportCoord(airline[2])];
  });
  myChart.setOption({
    geo3D: {
      map: world,
      shading: "realistic",
      silent: true, //鼠标设置为不触发事件
      environment: "#333", //背景色
      realisticMaterial: {
        roughness: 0.8,
        metalness: 0,
      },
      postEffect: {
        enable: true,
      },
      groundPlane: {
        show: false,
      },
      light: {
        main: {
          intensity: 1,
          alpha: 30,
        },
        ambient: {
          intensity: 0,
        },
      },
      viewControl: {
        distance: 70, //地图缩放程度
        alpha: 89, //地图翻转程度
        panMouseButton: "left",
        rotateMouseButton: "right",

        rotateSensitivity: false, //地图是否能旋转
        zoomSensitivity: false, //地图是否能缩放
      },
      itemStyle: {
        color: "#000", //地图的颜色
      },
      regionHeight: 0.5, //地图高度
    },
    series: [
      {
        type: "lines3D",
        coordinateSystem: "geo3D",
        effect: {
          // 特效线的配置
          show: true,
          trailWidth: 1,
          trailOpacity: 0.5,
          trailLength: 0.2,
          constantSpeed: 5, //特效固定速度
        },
        blendMode: "lighter",
        lineStyle: {
          //特效线
          width: 0.2,
          opacity: 0.05,
        },
        data: routes,
      },
    ],
  });
  window.addEventListener("keydown", function () {
    myChart.dispatchAction({
      type: "lines3DToggleEffect",
      seriesIndex: 0,
    });
  });
}
</script>

<style scoped></style>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值