3D飞线地球

随着前端技术的飞速发展与日渐成熟,web3d应用已渗透到生活的方方面面,与传统的web应用相比,3D应用在页面的展示效果、可操作性上亦或是视觉体验上都有着不可比拟的优点。对于前端开发者来说,在网页上实现一个3D应用,需要掌握的技术不胜枚举,如图形学、web-gl基础知识、Threejs等。好在echarts官方基于web-gl技术,提供了echarts-gl开源js库,大大简化了web3d图表的开发方式,本文基于echarts和echarts-gl实现一个3D飞线地球,简单讲解一下具体的实现方法。

实现效果如下:

页面布局如下:

备注:这里有一个注意事项,echarts与echarts-gl的版本务必保持一致,这里分别采用了5.1.2和2.0.5的版本

<div id="earth" style="width: 100%; height: 100%"></div>
<!-- "echarts": "5.1.2" -->
<!-- "echarts-gl": "2.0.5" -->
<script src="./js/echarts.min.js"></script>
<script src="./js/echarts-gl.min.js"></script>

样式如下: 

* {
  margin: 0;
  padding: 0;
}

html,
body {
  height: 100%;
  width: 100%;
}

具体实现逻辑: 

var dom = document.getElementById("earth")
var myChart = echarts.init(dom);
var baseTexture = null
var option = null
var geoJson = null

// 加载世界地图
function getGeoJsonData() {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', './js/world.json', false);
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status == 200 || xhr.status == 304) {
        geoJson = JSON.parse(xhr.responseText)
        getBaseTexture()
      }
    }
  }
  xhr.send();
}

// 使用echarts生成贴图,用于创建球体表面纹理
function getBaseTexture() {
  echarts.registerMap("world", geoJson);
  let canvas = document.createElement("canvas");
  baseTexture = echarts.init(canvas, null, {
    width: 4096,
    height: 2048
  });
  baseTexture.setOption({
    backgroundColor: "rgb(3,28,72)",
    geo: {
      type: "map",
      map: "world",
      left: 0,
      top: 0,
      right: 0,
      bottom: 0,
      boundingCoords: [
        [-180, 90],
        [180, -90],
      ],
      zoom: 0,
      roam: false,
      itemStyle: {
        borderColor: "#000d2d",
        normal: {
          areaColor: "#2455ad",
          borderColor: "#000c2d",
        },
        emphasis: {
          areaColor: "#357cf8",
        },
      },
      label: {
        normal: {
          fontSize: 20,
          show: true,
          textStyle: {
            color: "#fff",
          },
        },
        emphasis: {
          fontSize: 30,
          show: true,
          textStyle: {
            color: "yellow",
          },
        },
      },
    },
  });
  drawEarth()
}

// 绘制球体
function drawEarth() {
  option = {
    backgroundColor: "#013954",
    tooltip: {
      trigger: "item",
    },
    globe: {
      baseTexture: baseTexture,
      globeRadius: 150,
      environment: "#000",
      //shading: "lambert",
      shading: "color",
      light: {
        // 光照阴影
        main: {
          color: "#fff", // 光照颜色
          intensity: 1, // 光照强度
          //shadowQuality: "high", //阴影亮度
          //shadow: true, // 是否显示阴影
          alpha: 40,
          beta: -30,
        },
        ambient: {
          color: "#fff",
          intensity: 1,
        },
      },
      viewControl: {
        alpha: 30,
        beta: 160,
        // targetCoord: [116.46, 39.92],
        autoRotate: true,
        autoRotateAfterStill: 10,
        distance: 240,
      },
    },
    series: [
      {
        name: "lines3D",
        type: "lines3D",
        coordinateSystem: "globe",
        effect: {
          show: true,
        },
        blendMode: "lighter",
        lineStyle: {
          width: 2,
        },
        data: [],
        silent: false,
      },
    ],
  };
  // 随机数据 i控制线数量
  for (let i = 0; i < 100; i++) {
    option.series[0].data = option.series[0].data.concat(randomData());
  }
  myChart.setOption(option, true);
}

// 随机生成起始及终点经纬度坐标
function randomData() {
  let name = "随机点" + Math.random().toFixed(5) * 100000;
  // 起点经纬度-北京
  let longitude = 116.2, latitude = 39.56;
  // 随机终点经纬度
  let longitude2 = Math.random() * 360 - 180;
  let latitude2 = Math.random() * 180 - 90;
  return {
    coords: [
      [longitude, latitude],
      [longitude2, latitude2],
    ],
    value: (Math.random() * 3000).toFixed(2),
  };
}

// 初始化入口
getGeoJsonData()

是不是非常简单,短短的150行代码即可实现一个3D图表,如果小伙伴们有其它的实现方式,可以在评论区里面探讨一下😊

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 要在Echarts中设置3D线,需要使用Geo3D组件和Line3D组件。首先,您需要准备好您的地理数据和线数据。然后按照以下步骤进行操作: 1. 在Echarts中使用Geo3D组件创建地理坐标系。 ```javascript option = { geo3D: { map: 'world', roam: true, label: { show: true, textStyle: { color: '#fff' } }, itemStyle: { borderWidth: 0.2, borderColor: '#333' }, viewControl: { autoRotate: true }, light: { main: { intensity: 1, shadow: true, alpha: 55 }, ambient: { intensity: 0.3 } } }, series: [] }; ``` 2. 创建Line3D系列并将其添加到系列数组中。 ```javascript option.series.push({ type: 'lines3D', coordinateSystem: 'geo3D', effect: { show: true, trailWidth: 2, trailLength: 0.5, trailOpacity: 1, trailColor: 'rgb(0, 255, 255)' }, blendMode: 'lighter', lineStyle: { width: 1, color: 'rgb(50, 255, 255)', opacity: 1 }, data: your_line_data }); ``` 3. 在Line3D系列中设置起点和终点的经纬度坐标。 ```javascript data: [ { coords: [ [from_longitude, from_latitude], [to_longitude, to_latitude] ] } ] ``` 这样,您就可以在Echarts中设置3D线了。您可以根据需要自定义效果和样式。 ### 回答2: Echarts Geo3D 是一种数据可视化库,基于地理数据进行可视化展示。要设置3D线,我们需要使用 Geo3D 中的 line3D 组件。 首先,我们需要准备相关的地理数据,包括起始点和结束点的经纬度坐标。假设我们有一组线数据,起始点的经纬度坐标分别为 (lng1, lat1),结束点的经纬度坐标为 (lng2, lat2)。接下来,我们可以使用 line3D 组件来设置3D线。 在 Echarts 中使用 line3D 组件的示例代码如下: 1、引入相关的库和样式文件 <script src="echarts.js"></script> <link rel="stylesheet" href="echarts-gl.css"> 2、创建一个画布容器 <div id="chart" style="width: 800px;height: 600px;"></div> 3、编写 JavaScript 代码 var chart = echarts.init(document.getElementById('chart')); // 初始化画布 var option = { geo3D: { // 设置地球的半径,可以自定义大小 radius: 100, shading: 'lambert', itemStyle: { color: 'rgba(0, 128, 255, 0.8)' }, light: { main: { intensity: 1.2, shadow: true }, ambient: { intensity: 0.3 } } }, series: [ { type: 'line3D', effect: { show: true, trailWidth: 3, trailOpacity: 1, trailLength: 0.6, constantSpeed: 10 }, // 设置起始点坐标 data: [ { coords: [ [lng1, lat1, 0], [lng2, lat2, 0] ] }, ] } ] }; chart.setOption(option); // 将配置项应用到画布中 这样,我们就可以在页面上看到一个3D线的效果。可以根据需求自定义线的参数,例如线的颜色、宽度、长度、速度等。 ### 回答3: echarts是一款基于JavaScript的可视化库,通过其geo3D组件可以实现地理数据的3D可视化展示。要设置3D线,可以按照以下步骤进行: 1. 准备数据:首先需要准备表示线路径的数据,通常为一组经纬度坐标点。可以根据实际需求,选择合适的数据来源,例如从数据库中读取或手动编写。 2. 引入echarts库:在HTML文件中引入echarts库的JavaScript文件,确保能够使用echarts相关的功能。 3. 创建echarts实例:使用echarts提供的API创建一个echarts实例,通过指定要渲染的DOM元素的ID进行关联。 4. 设置地理坐标系:创建geo3D组件,并设置其参数,包括地图类型、地图的样式等。通过指定地理坐标系的中心点坐标和缩放比例,可以控制地图的初始展示。 5. 设置3D线的路径和样式:使用echarts提供的series配置项,设置系列中的数据内容和样式属性。在线的系列类型中,需指定其起点和终点的经纬度坐标。 6. 渲染地图:将配置好的echarts实例进行渲染,即可在页面中显示地理数据的3D线效果。 使用echarts geo3D组件设置3D线,能够直观地展示地理数据的分布和关系,提供更加生动的数据可视化效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值