在 Web 开发中,构建 3D 地球应用的需求日益增长,例如地理信息系统 (GIS)、虚拟现实 (VR) 和游戏开发等。Cesium 是一个强大的开源 JavaScript 库,专门用于创建 3D 地球和地图应用。本教程将带你从零开始,一步步掌握 Cesium.js 的基本用法。
什么是 Cesium.js?
Cesium.js 是一个基于 WebGL 的 JavaScript 库,用于在浏览器中渲染 3D 地球、地图和模型。它由 Cesium 团队开发并维护,遵循 Apache 2.0 许可协议,可以免费用于商业和非商业用途。Cesium.js 支持多种数据格式,包括 GeoJSON、KML、CZML 等,可以轻松地将各种地理数据集成到 3D 地球场景中。
搭建 Cesium.js 开发环境
下载 Cesium.js:
- 访问 Cesium 官网:https://cesium.com/
- 下载最新版本的 Cesium.js。
创建 HTML 文件:
创建一个 HTML 文件(例如
index.html),并引入 Cesium.js 文件:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Cesium 3D 地球</title> <script src="Cesium/Cesium.js"></script> <style> body { margin: 0; } #cesiumContainer { width: 100%; height: 100%; } </style> </head> <body> <div id="cesiumContainer"></div> <script> // Cesium 代码将在这里编写 </script> </body> </html>注意:确保
Cesium/Cesium.js路径正确,指向你下载的 Cesium.js 文件。初始化 Cesium Viewer:
在
<script>标签中,添加以下代码来初始化 Cesium Viewer:Cesium.Ion.defaultAccessToken = 'YOUR_CESIUM_ION_ACCESS_TOKEN'; // 替换为你的 Cesium Ion Access Token const viewer = new Cesium.Viewer('cesiumContainer'); // 创建 Viewer 实例,绑定到 ID 为 cesiumContainer 的 div 元素- Cesium Ion Access Token:Cesium Ion 提供地形、影像等在线资源。你需要注册 Cesium Ion 账号,并获取 Access Token 才能使用这些资源。访问 https://cesium.com/ion/ 注册并获取 Access Token。
- Viewer 实例:
Cesium.Viewer是 Cesium.js 中最重要的组件,它负责管理 3D 地球场景、相机、控件等。'cesiumContainer'是 HTML 中<div>元素的 ID,Viewer 将渲染到该元素中。
运行 HTML 文件:

使用浏览器打开
index.html文件,你应该能看到一个简单的 3D 地球场景。
Cesium 常用 API 介绍
相机控制 (Camera)
Cesium 提供了 Camera 对象来控制相机的视角、位置和方向。例如,可以使用
camera.flyTo()方法飞到指定的位置:viewer.camera.flyTo({ destination : Cesium.Cartesian3.fromDegrees(-74.018817, 40.691169, 1000), // 纽约坐标和高度 orientation : { heading : Cesium.Math.toRadians(0.0), pitch : Cesium.Math.toRadians(-90.0), roll : 0.0 } });这段代码将相机移动到纽约,并从上方俯视。

实体 (Entity)
Cesium 使用 Entity 对象来表示 3D 地球上的各种对象,例如点、线、多边形、模型等。可以使用
viewer.entities.add()方法添加 Entity 到场景中:const redSphere = viewer.entities.add({ name : 'Red sphere', position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 1000), // 位置坐标 ellipsoid : { radii : new Cesium.Cartesian3(300.0, 300.0, 300.0), // 球体半径 material : Cesium.Color.RED // 材质颜色 } });这段代码将在指定位置添加一个红色的球体。
地形 (Terrain)

Cesium 可以加载各种地形数据,使 3D 地球场景更加真实。可以使用
Cesium.createWorldTerrain()方法创建世界地形:viewer.terrainProvider = Cesium.createWorldTerrain({ requestWaterMask : true, // 请求水面遮罩 requestVertexNormals : true // 请求顶点法线 });影像 (Imagery)
Cesium 可以加载各种影像数据,作为 3D 地球的纹理。可以使用
Cesium.createTileMapServiceImageryProvider()方法加载 TMS 影像:viewer.imageryLayers.addImageryProvider(new Cesium.TileMapServiceImageryProvider({ url : 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer' // ArcGIS Online 世界影像 }));
实战避坑经验总结
- 性能优化:Cesium 应用的性能取决于场景的复杂度。尽量减少 Entity 的数量,使用 LOD (Level of Detail) 技术,优化模型和纹理,可以提高性能。另外,注意WebGL的上下文丢失问题,妥善处理。
- 坐标转换:Cesium 使用 WGS84 坐标系。如果需要使用其他坐标系的数据,需要进行坐标转换。国内常用的坐标系是 GCJ02 (火星坐标系) 和 BD09 (百度坐标系),需要使用专门的坐标转换库进行转换。
- 跨域问题:如果加载来自不同域名的资源,可能会遇到跨域问题。需要在服务器端配置 CORS (Cross-Origin Resource Sharing) 策略。
- 内存泄漏:长时间运行的 Cesium 应用可能会出现内存泄漏。及时释放不再使用的资源,例如 Entity、Texture 等,可以避免内存泄漏。
结语
本教程介绍了 Cesium.js 的基本概念和用法。通过学习本教程,你已经掌握了 Cesium.js 的入门知识,可以开始构建自己的 3D 地球应用了。深入学习 Cesium.js 的官方文档和示例,可以掌握更多高级特性,创建更复杂和炫酷的应用。
冠军资讯
代码搬运工