资源推荐
Gio.js - 用 Three.js 构建 3D 数据可视化地球

用 Gio.js 构建国家间数据流动的 3D 可视化地球

Gio.js 是一个基于 Three.js 的开源 3D 地球数据可视化库。它的核心目标是降低 3D 地球可视化的开发门槛,让开发者能够快速创建展示国家间数据流向的交互式地球。

项目主要解决的问题是:在 Web 端展示地理数据流向(如贸易往来、人口迁移、网络流量等)时,传统的 2D 地图难以直观表达数据的空间流动关系。Gio.js 提供了一种开箱即用的 3D 解决方案。

需要明确的是,Gio.js 专注于国家/地区级别的数据流可视化,不适用于城市级别的精细地理数据展示,也不是通用的 3D 地图引擎。

核心功能

声明式 API 设计

Gio.js 采用声明式 API,将复杂的 Three.js 场景管理封装在内部。开发者无需直接操作 WebGL 或理解 Three.js 的渲染机制,通过配置对象即可完成大部分定制需求。

数据流可视化

库的核心能力是展示国家间的数据流动。数据以"出口国-进口国-数值"的格式输入,Gio.js 会自动在 3D 地球上渲染出带有方向的弧线,弧线的粗细和颜色可以反映数据量级。

样式定制

提供 40 多个 API 用于调整视觉效果,包括:

  • 地球表面、海洋、光晕的颜色
  • 数据流入/流出线条的颜色
  • 被选中国家的高亮色
  • 亮度和对比度控制

使用方法

安装

npm 安装:

npm install giojs --save

yarn 安装:

yarn add giojs

CDN 引入:

<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/giojs/build/gio.min.js"></script>

基础使用

Gio.js 强调"四行代码"的快速上手体验:

步骤代码作用
1var container = document.getElementById("bindGlobeContainer")获取容器元素
2var controller = new GIO.Controller(container)创建控制器实例
3controller.addData(data)添加数据
4controller.init()初始化渲染

完整示例:

<!DOCTYPE html>
<html>
<head>
  <style>
    #bindGlobeContainer {
      width: 800px;
      height: 600px;
    }
  </style>
</head>
<body>
  <div id="bindGlobeContainer"></div>
 
  <script src="three.min.js"></script>
  <script src="gio.min.js"></script>
  <script>
    // 准备数据:从中国到美国和日本的数据流
    var data = [
      { e: "CN", i: "US", v: 3000 },
      { e: "CN", i: "JP", v: 2000 }
    ];
 
    // 四行核心代码
    var container = document.getElementById("bindGlobeContainer");
    var controller = new GIO.Controller(container);
    controller.addData(data);
    controller.init();
  </script>
</body>
</html>

数据格式说明:

  • e:出口国的 ISO 3166-1 alpha-2 国家代码
  • i:进口国的国家代码
  • v:数值大小

样式定制

var controller = new GIO.Controller(container, {
  color: {
    surface: 0x48C12,      // 地球表面颜色
    selected: 0xF26B5E,    // 选中国家颜色
    in: 0x154492,          // 流入线条颜色
    out: 0xDD380C          // 流出线条颜色
  },
  brightness: {
    ocean: 0.5,            // 海洋亮度
    mentioned: 0.8,        // 有数据国家亮度
    related: 0.5           // 相关国家亮度
  }
});

常用 API

API作用
controller.addData(data)添加数据
controller.clearData()清空数据
controller.switchDataSet(name)切换数据集
controller.setInitCountry("CN")设置初始选中国家
controller.enableAutoRotation()启用自动旋转
controller.disableAutoRotation()禁用自动旋转
controller.getScene()获取 Three.js 场景对象
controller.onCountryPicked(callback)国家点击回调

总结

Gio.js 在 3D 地球数据流可视化这个细分领域提供了一个实用的解决方案。它的价值在于将 Three.js 的复杂性封装起来,让前端开发者能够快速实现国家间数据流向的可视化效果。

对于需要在 Web 端展示全球数据流动的项目,Gio.js 可以显著减少开发工作量。但如果项目需要更精细的地理数据展示或复杂的 GIS 功能,则需要考虑 Cesium 或 Mapbox GL 等更专业的方案。

项目地址:https://github.com/syt123450/giojs (opens in a new tab)