资源推荐
Threegeo

Three.js 地形可视化库 three-geo 深度解析

在很多 3D 可视化项目中,我们希望能在网页中展示真实的山脉、地形和卫星影像。
然而,原生 Three.js 并没有针对地理数据做特别的支持。

three-geo 正是为此而生的一个扩展库。
它基于 Three.js,可以通过 经纬度坐标、高程数据(DEM)和卫星贴图,在浏览器中生成具有真实起伏的三维地形。

一、为什么需要 three-geo

Three.js 提供了非常灵活的 3D 渲染能力,但它本身并不具备“地球意识”——
经纬度、地形高度、卫星纹理这些数据,都需要开发者自己处理。

在涉及地理可视化的项目中,比如城市地貌展示、环境模拟或数字孪生系统,
这些基础能力往往是重复性的、工程性很强的工作。

three-geo 的出现,正是为了让这一步更简单。
它把地理数据的获取、解析和坐标投影封装在一起,让开发者能更快地进入业务逻辑阶段。

二、核心能力概览

three-geo 的核心能力可以概括为三点:

  1. 地形生成
    根据指定的经纬度中心点、半径和瓦片缩放级别,自动请求 Mapbox 的高程数据(DEM),生成带高度的地形网格。

  2. 纹理叠加
    可选用卫星影像或地图瓦片作为纹理,提升视觉真实感。

  3. 坐标投影
    内置从经纬度到 WebGL 坐标的转换函数,方便在地形上叠加模型、标记或路径。

通过这些功能,你可以快速在浏览器中还原任意区域的地表地形。

三、快速上手示例

下面的示例展示了如何加载一块地形并在场景中渲染:

const tgeo = new ThreeGeo({
    tokenMapbox: '********', // <---- set your Mapbox API token here
});
 
const terrain = await tgeo.getTerrainRgb(
    [46.5763, 7.9904], // [lat, lng]
    5.0,               // radius of bounding circle (km)
    12);               // zoom resolution
 
const scene = new THREE.Scene();
scene.add(terrain);
 
const renderer = new THREE.WebGLRenderer({ canvas });
renderer.render(scene, camera);

四、适用场景

three-geo 适用于多种前端可视化项目:

应用方向示例
🌍 地理可视化地形展示、生态监测、气象模拟
🏙 数字孪生城市地形、建筑群落、道路规划
🛰 教育与科研地貌教学、地理数据可视化
🚁 仿真系统无人机航线、雷达态势、地面路径推演

对于中小规模的地理场景渲染,它是一个轻量、易扩展的方案。

五、总结

three-geo 让前端开发者能够以较低的成本,在网页中重建真实地形。
它不是一个复杂的 GIS 引擎,而是一种简单高效的工具,
适合用于小到中型可视化项目,或者作为 Three.js 与地理数据之间的桥梁。

在很多情况下,它能帮助我们更快地把注意力从底层数据转移到真正的业务逻辑上。

🔗 项目地址:github.com/w3reality/three-geo (opens in a new tab)