Cesium实战(一):环境安装
Cesium 是一个开源的 JavaScript 3D 地理信息可视化引擎,专门用于在 Web 浏览器中创建高性能的 3D 地球和 2D 地图应用。它基于 WebGL 技术,无需插件即可在浏览器中渲染复杂的 3D 地理场景。
一、安装环境
1、安装node.js
Cesium 的开发环境需要 Node.js。从 Node.js 官网 下载并安装最新 LTS 版本。
安装成功后,查看版本 。
node --version # 应显示 v18.x 或更高 npm --version # 应显示 9.x 或更高
如下所示,表示安装成功。
2、安装vue
在learn目录命令行模式下,运行安装命令。
npm install -g @vue/cli
查看vue版本,如下所示,表示vue安装成功。
3、创建vue3项目
在learn文件夹下运行如下命令新建cesium-first项目,提示选择,回车默认选项,生成vue3项目。
vue create cesium-first
4、安装cesium插件
cd learn\cesium-first,在项目根目录下,安装cesium插件。
npm install cesium
5、拷贝cesium库
将node_modules/cesuim/Build/Cesium下四个文件夹Assets、ThirdParty、Widgets、Workers,拷贝到public下;
将node_modules/cesuim/Build/Cesium/Widgets文件夹拷贝到src下,如下图所示,图为
已经拷贝完成的文件夹结构。
二、开发cesium项目
1、修改App.vue
修改app.vue,导入cesium库,在生命周期函数onMounted中,新建地球视图。
<template>
<div id="cesiumContainer"></div>
</template>
<script setup>
//导入Cesium核心库,Cesium是一个用于创建3D地球和2D地图的JavaScript库 - 提供地球、相机、实体、地形、影像等核心功能
import * as Cesium from 'cesium'
//导入Cesium控件样式,widgets.css是Cesium的默认样式文件,包含时间轴、图层选择器、缩放控件等UI元素的样式
import "./Widgets/widgets.css"
//导入Vue生命周期钩子:
// onMounted:组件挂载到DOM后执行的函数
// onUnmounted:组件从DOM卸载前执行的函数
// 用于管理Cesium Viewer的生命周期,确保DOM就绪后再初始化
import { onMounted, onUnmounted } from 'vue';
//配置Cesium静态资源路径,CESIUM_BASE_URL是Cesium的全局配置变量,告诉Cesium从哪个URL加载WebWorker、图片等静态资源
window.CESIUM_BASE_URL = "/";
//声明Viewer变量:
// viewer用于保存Cesium Viewer实例的引用
// 初始化为null,在onMounted中实例化
// 需要在多个地方使用,所以声明为模块级变量
let viewer = null
onMounted(()=>{
// 创建一个3D地球视图
viewer= new Cesium.Viewer("cesiumContainer");
})
onUnmounted(() => {
if (viewer) {
// 销毁Viewer实例,释放内存
viewer.destroy()
viewer = null
}
})
</script>
<style>
html, body {
width: 100%;
height: 100%;
overflow: hidden; /* 防止页面滚动 */
}
/* 确保Cesium地球能够充满整个容器
- margin: 0; 移除所有元素的外边距(元素与元素之间的距离)
- padding: 0; 移除所有元素的内边距(元素内容与边框之间的距离)
*/
*{
margin: 0;
padding: 0;
}
</style>
2、运行项目
项目根目录下运行npm run serve命令.
npm run serve
界面如图。
三、常用功能
1、创建一个纯净地球
new Cesium.Viewer('cesiumContainer', {
animation: false, // 隐藏动画控件
baseLayerPicker: false, // 隐藏图层选择器
fullscreenButton: false, // 隐藏全屏按钮
geocoder: false, // 隐藏搜索框
homeButton: false, // 隐藏主页按钮
infoBox: false, // 隐藏信息框
sceneModePicker: false, // 隐藏2D/3D切换
selectionIndicator: false, // 隐藏选择指示器
timeline: false, // 隐藏时间轴
navigationHelpButton: false // 隐藏帮助按钮
});
如下图所示,去掉右上角搜索、主页等功能的地球。
2、设置相机默认矩形区域
Cesium.Camera.DEFAULT_VIEW_RECTANGLE=
Cesium.Rectangle.fromDegrees(
105, // 西边经度(West longitude)
21, // 南边纬度(South latitude)
110, // 东边经度(East longitude)
63 // 北边纬度(North latitude)
)
设置默认区域后,当用户点击"Home"按钮时,相机会飞到指定的区域,自动调整相机高度以显示整个区域。
注意:设置后,需要调用viewer.camera.flyHome() 函数,相机才会飞往此默认区域。
效果如下图:
3、设置相机位置
1)立即移动
立即将相机移动到指定位置
// 1. 创建三维空间坐标点
// Cesium.Cartesian3.fromDegrees() 将经纬度和高度转换为Cesium使用的三维笛卡尔坐标
// 参数:经度, 纬度, 高度(单位:米)
var position = Cesium.Cartesian3.fromDegrees(
116.391275, // 东经116.391275度
39.906217, // 北纬39.906217度
100 // 高度100米(距离地面的垂直高度)
);
// 2. 设置相机视图
// viewer.camera.setView() 立即将相机移动到指定位置(无动画效果)
viewer.camera.setView({
destination: position // 设置相机的目标位置
// 注意:这里没有设置 orientation(相机朝向),
// 所以相机会保持默认朝向(看向正下方)
});
如下图,照相机视觉为天安门。
如果采用相机朝向、俯仰角,翻滚角度,代码如下:
// 1. 创建三维空间坐标点
// Cesium.Cartesian3.fromDegrees() 将经纬度和高度转换为Cesium使用的三维笛卡尔坐标
// 参数:经度, 纬度, 高度(单位:米)
var position = Cesium.Cartesian3.fromDegrees(
116.391275, // 东经116.391275度
39.906217, // 北纬39.906217度 )
2000 // 高度100米(距离地面的垂直高度)
);
// 2. 设置相机视图
// viewer.camera.setView() 立即将相机移动到指定位置(无动画效果)
viewer.camera.setView({
destination: position
, // 设置相机的目标位置
// 注意:这里没有设置 orientation(相机朝向),
// 所以相机会保持默认朝向(看向正下方)
orientation: {
// 航向角:0=北,90=东,180=南,270=西
heading: Cesium.Math.toRadians(45), // 朝向东北方向(45度)
// 俯仰角:-90=垂直向下,0=水平,90=垂直向上
pitch: Cesium.Math.toRadians(-30), // 向下倾斜30度(俯瞰视角)
// 翻滚角:0=水平,正数=顺时针倾斜
roll: 0.0 // 保持水平,不倾斜
}
})
为了更清晰区分,用 “人体头部动作 + 旋转轴线” 双重维度总结,核心差异在于旋转围绕的轴线不同:
| 角度属性 | 通俗动作 | 旋转轴线 | 核心效果 |
|---|---|---|---|
| heading(航向角) | 摆头(左右转) | 垂直于地面的天顶轴线(上下方向) | 改变相机的 “朝向”(比如从朝东转到朝北) |
| pitch(俯仰角) | 点头(上下低) | 垂直于视线的水平横向轴线(左右方向) | 改变相机的 “俯视 / 仰视角度”(比如水平看→向下俯瞰 30°) |
| roll(翻滚角) | 歪头 / 侧倾 | 相机自身视线轴线(前后方向,正前方) | 改变相机的 "倾斜状" |
2)让相机飞往某个地方,有延时
var position = Cesium.Cartesian3.fromDegrees(
116.391275, // 东经116.391275度(天安门经度)
39.906217, // 北纬39.906217度(天安门纬度)
2000 // 高度100米(距离地面的垂直高度)
);
viewer.camera.flyTo({
destination: position, // 目标位置(上面定义的三维坐标)
orientation: { // 相机朝向(角度设置)
heading: Cesium.Math.toRadians(0), // 朝向正北
pitch: Cesium.Math.toRadians(-90), // 垂直向下俯瞰
roll: 0 // 无翻滚(水平)
},
duration: 4.5, // 飞行时间 4.5 秒
maximumHeight: 2000 // 飞行过程中的最大高度限制
});
3)移动相机
前后左右上下移动时,不会改变朝向\俯仰角\翻滚角。
// 1. moveForward - 沿相机朝向移动
viewer.camera.moveForward(10);
// 2. moveBackward - 沿相机朝向反向移动
viewer.camera.moveBackward(10);
// 3. moveLeft - 沿相机左方向移动
viewer.camera.moveLeft(10);
// 4. moveRight - 沿相机右方向移动
viewer.camera.moveRight(10);
// 5. moveUp - 沿相机上方向移动
viewer.camera.moveUp(10);
// 6. moveDown - 沿相机下方向移动
viewer.camera.moveDown(10);
// 7. lookUp-相机向上转动 ,类似于抬头看天空
viewer.camera.lookUp(Cesium.Math.toRadians(5));
// 8. lookDown-相机向下转动,类似于低头看地面
viewer.camera.lookDown(Cesium.Math.toRadians(5));
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)