Three.js 地形可视化库 three-geo 深度解析
在很多 3D 可视化项目中,我们希望能在网页中展示真实的山脉、地形和卫星影像。
然而,原生 Three.js 并没有针对地理数据做特别的支持。
three-geo 正是为此而生的一个扩展库。
它基于 Three.js,可以通过 经纬度坐标、高程数据(DEM)和卫星贴图,在浏览器中生成具有真实起伏的三维地形。

一、为什么需要 three-geo
Three.js 提供了非常灵活的 3D 渲染能力,但它本身并不具备“地球意识”——
经纬度、地形高度、卫星纹理这些数据,都需要开发者自己处理。
在涉及地理可视化的项目中,比如城市地貌展示、环境模拟或数字孪生系统,
这些基础能力往往是重复性的、工程性很强的工作。
three-geo 的出现,正是为了让这一步更简单。
它把地理数据的获取、解析和坐标投影封装在一起,让开发者能更快地进入业务逻辑阶段。
二、核心能力概览
three-geo 的核心能力可以概括为三点:
-
地形生成:
根据指定的经纬度中心点、半径和瓦片缩放级别,自动请求 Mapbox 的高程数据(DEM),生成带高度的地形网格。 -
纹理叠加:
可选用卫星影像或地图瓦片作为纹理,提升视觉真实感。 -
坐标投影:
内置从经纬度到 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 与地理数据之间的桥梁。
在很多情况下,它能帮助我们更快地把注意力从底层数据转移到真正的业务逻辑上。