Cesium快速入门到精通系列教程十九:Cesium 1.95 中地图模式
在 Cesium 1.95 中,可以通过 viewer.scene.mode 来获取当前的地图模式(即场景模式),并通过 viewer.scene.morphTo2D()、viewer.scene.morphTo3D()、viewer.scene.morphToColumbusView() 等方法来切换地图(场景)模式。
一、Cesium 中的场景模式(Scene Mode)
Cesium 支持以下三种主要的场景模式:
- 3D(三维球模式):viewer.scene.mode === Cesium.SceneMode.SCENE3D
- 2D(二维平面模式):viewer.scene.mode === Cesium.SceneMode.SCENE2D
- 哥伦布视图(CV,二维展开的地球,类似2.5D):viewer.scene.mode === Cesium.SceneMode.COLUMBUS_VIEW
这些模式定义在 Cesium.SceneMode枚举中。
二、获取当前地图(场景)模式
你可以通过访问 viewer.scene.mode来获取当前的场景模式,然后与 Cesium.SceneMode中的常量进行比较:
// 获取当前场景模式
const currentMode = viewer.scene.mode;if (currentMode === Cesium.SceneMode.SCENE3D) {console.log("当前是 3D 模式");
} else if (currentMode === Cesium.SceneMode.SCENE2D) {console.log("当前是 2D 模式");
} else if (currentMode === Cesium.SceneMode.COLUMBUS_VIEW) {console.log("当前是哥伦布视图(CV)模式");
}
或者你也可以打印出 currentMode的值看看(它是一个数字枚举值,例如 0、1、2,但不建议直接依赖数值):
console.log(viewer.scene.mode); // 输出如:2 (代表 SCENE3D)
提示:
Cesium.SceneMode.SCENE3D的值为 2
Cesium.SceneMode.COLUMBUS_VIEW的值为 1
Cesium.SceneMode.SCENE2D的值为 0
但为了代码可读性和维护性,推荐使用常量名称进行比较,而不是直接使用数字。
三、通过代码设置(切换)地图模式
Cesium 提供了以下几个方法用于切换场景模式:
1. 切换到 3D 模式(球形地球)
viewer.scene.morphTo3D();
2. 切换到 2D 模式(平面地图)
viewer.scene.morphTo2D();
3. 切换到哥伦布视图(CV,2.5D,可缩放的平面投影)
viewer.scene.morphToColumbusView();
注意:
这些 morph 方法(如 morphTo3D)是异步的,它们会触发场景的平滑过渡动画。如果你不想要动画,可以传入参数 {duration: 0},例如:
viewer.scene.morphTo3D({ duration: 0 }); // 立即切换,无动画
如果你只是想“设置”模式而不关心过渡动画,使用这些 morph 方法是最标准的方式。
四、完整示例代码
下面是一个完整的示例,展示如何获取当前模式并根据需要切换模式:
// 假设你已经创建了 viewer
const viewer = new Cesium.Viewer('cesiumContainer');// 获取当前模式
function getCurrentMode() {const mode = viewer.scene.mode;let modeName;if (mode === Cesium.SceneMode.SCENE3D) {modeName = '3D';} else if (mode === Cesium.SceneMode.SCENE2D) {modeName = '2D';} else if (mode === Cesium.SceneMode.COLUMBUS_VIEW) {modeName = 'Columbus View (CV)';}console.log('当前模式是:' + modeName);return mode;
}// 切换到 3D
function switchTo3D() {viewer.scene.morphTo3D({ duration: 1.0 }); // 1秒动画过渡到3D
}// 切换到 2D
function switchTo2D() {viewer.scene.morphTo2D({ duration: 1.0 });
}// 切换到 CV
function switchToCV() {viewer.scene.morphToColumbusView({ duration: 1.0 });
}// 示例:点击按钮或初始化后调用
getCurrentMode(); // 打印当前模式// 你可以根据需要调用切换函数,比如绑定到 UI 按钮
// switchTo3D(); // 切换到3D
// switchTo2D(); // 切换到2D
// switchToCV(); // 切换到CV
五、总结
功能 | 方法/属性 | 说明 |
---|---|---|
获取当前地图模式 |
| 返回当前是 |
判断当前模式 | 与 | 如 |
切换到 3D 模式 |
| 可传入 |
切换到 2D 模式 |
| 同上 |
切换到 CV 模式 |
|