Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CesiumJS 学习 #52

Open
Marinerer opened this issue Mar 27, 2024 · 3 comments
Open

CesiumJS 学习 #52

Marinerer opened this issue Mar 27, 2024 · 3 comments

Comments

@Marinerer
Copy link
Owner

Marinerer commented Mar 27, 2024

大纲

@Marinerer
Copy link
Owner Author

.

@Marinerer
Copy link
Owner Author

Marinerer commented Mar 27, 2024

CesiumJS 文档

Cesium 是什么

Cesium 是一个跨平台、跨浏览器的展示三维地球和地图的 JavaScript 库,它使用 WebGL 来进行硬件加速图形,在使用时不需要任何插件支持(但是浏览器必须支持 WebGL),它提供了基于 JavaScript 语言的开发包,方便用户快速搭建一款零插件的虚拟地球 Web 应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。

它支持 3D, 2.5D, 2D 形式的地图展示,可以用来显示海量 三维模型数据、影像数据、地形高程数据、矢量数据等等。同时也可以自行 绘制图形高亮区域等,且支持绝大多数的浏览器和移动端。

Cesium是基于Apache2.0许可的开源程序,它可以免费的用于商业和非商业用途。

Cesium 能做什么

  • 支持 2D2.5D3D 形式的地理(地图)数据展示
  • 可以绘制各种几何图形、高亮区域,支持导入图片,甚至 3D 模型等多种数据可视化展示
  • 支持矢量、海量模型数据(倾斜,BIM,点云等)
  • 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和移动端浏览器
  • 支持基于时间轴的动态流式数据展示

Cesium 支持的数据格式

  • 影像数据 - Bing、天地图、ArcGISOSMWMTSWMS
  • 地形数据 - ArcGIS、谷歌、STK
  • 矢量数据 - KMLKMZGeoJSONTopoJSONCZML
  • 三维模型 - GLTFGLB(二进制 glTF 文件)
  • 三维瓦片 - 3D Tiles(倾斜摄影、人工模型、 三维建筑物、CADBIM,点云数据等)

常见功能

1. 场景创建

  1. 创建基本场景

创建基本场景及设置地球的初始位置、相机的视角和环境光照等参数。

new Cesium.Viewer(container, options)
  1. 加载地形数据

Cesium支持加载高程数据以呈现真实的地形效果。

new Cesium.CesiumTerrainProvider(options)

2. 地理信息展示

  1. 添加3D模型

Cesium支持添加各种格式的3D模型,如Collada、glTF等。

  1. 显示矢量数据

Cesium支持加载和显示矢量数据,如点、线、面等。比如加载 GeoJSON格式数据:

Cesium.GeoJsonDataSource.load('./data.geojson)

3. 相机控制

  1. 相机飞行

Cesium提供了相机飞行的功能,可以平滑过渡到指定的位置和视角。

  1. 添加相机标注

Cesium支持在场景中添加相机标注,用于标记特定位置的相机视角。

4. 图层叠加

  1. 加载影像数据

Cesium支持加载各种类型的影像数据,如WMS服务、TMS服务、ArcGIS MapServer等。

new Cesium.WebMapServiceImageryProvider(options)
  1. 叠加地形数据

除了加载影像数据外,Cesium还支持叠加地形数据,以增强地理信息展示效果。

new Cesium.CesiumTerrainProvider(options)

5. 交互操作

  1. 鼠标交互

Cesium支持鼠标交互操作,如平移、缩放、旋转等。

new Cesium.ScreenSpaceEventHandler(element);
  1. 键盘交互

Cesium还支持键盘交互操作,你可以通过监听键盘事件来实现自定义的交互功能。

概念

Viewer 视图

Viewer是Cesium的主窗口,它封装了创建和管理三维场景所需的大部分底层功能。Viewer为开发者提供了一个高级API,使得开发人员可以非常方便地加载和渲染各种格式的地理数据,如影像、三维模型、地形等。同时,Viewer还提供了一些预置的用户界面元素,如导航控件、时间轴控件等,这些控件可以帮助用户与三维场景进行交互。

Viewer对象主要包括如下属性:

  • camera:相机属性,主要用于控制视角;
  • imageryLayers:影像图层集合;
  • terrainProvider:地形提供者;
  • entities:实体集合;
  • dataSources:矢量数据集合;
  • scene:场景,sceneViewer对象的属性,但它也是 Cesium 中的一个关键的对象,用于添加图形(primitive)、添加场景特效和添加场景事件
  • Event(非属性):Event并非Viewer对象的属性,在这里特指所有事件:
    • screenSpaceEventHandler:屏幕操作事件;
    • selectedEntityChanged:选取实体事件;
    • trackedEntityChanged:追踪实体事件。
  • widgets(非属性):widgets并非Viewer对象的属性,在这里特指所有控件:
    • animation:动画控件;
    • baseLayerPicker:影像图层选择器;
    • fullscreenButton:全屏按钮;
    • geocoder:查找位置;
    • homeButton:返回视角到初始位置;
    • navigationHelpButton:帮助按钮;
    • timeline:时间轴;
    • vrButton:VR 按钮。

Scene 场景

Scene是Cesium中表示三维虚拟世界的核心对象。它维护了场景的整个状态,包括相机、光源、地形、primitives(基本图形)、billboards(广告牌)等。Scene对象负责组织和渲染这些对象,并对它们应用相关的变换、材质和渲染状态。

Cesium 开发大多基于 Scene 类,其主要包含四部分内容:

  • 基础地理环境设置 :如地球参数(globe)、光照(light)、(fog)、大气(skyAtmosphere)
  • 基础图层设置 :包含地图图层地形图层
  • 场景数据Cesium 底层空间数据绘制方式是依赖 Primitive3D Tiles是 Primitive 的非常重要部分,可以实现大数据量加载
  • 场景交互 :如pick(鼠标事件)、camera(相机事件)

ViewerScene是Cesium中构建三维地球场景的两个核心类。Viewer类负责创建和管理Scene对象,并提供一些用于控制场景的工具和控件。Scene类则负责渲染场景中的所有元素和状态管理。

Camera 相机

Cesium 通过 Camera 定义视点和视角,是三维场景观察的关键要素。它可以控制观察者在场景中的位置、方向、以及视野范围。使用相机Camera操作场景分为如下几类:

  • 飞行 fly:flyHomeflyToflyToBoundingSphere,与 fly 有关的方法的特点就是在改变相机视角时会伴随飞行动画;这类方法一定会改变相机的位置,但是不一定会改变相机的朝向;
  • 缩放 zoom:zoomInzoomOut,与 zoom 有关的方法类似于使用鼠标滚轮来操作场景进行缩小或放大;这类方法不会改变相机的朝向,只会改变相机的位置;
  • 移动 move :moveBackwardmoveDownmoveForwardmoveLeftmoveRightmoveUp,与 move 有关的方法就是在前后左右上下这六个方向上移动相机,这类方法不会改变相机的朝向,只会改变相机的位置;
  • 视角 look :lookDownlookLeftlookRightlookUp,与 look 有关的方法就是在相机位置不变的情况下,调整相机镜头的上下左右四个方向朝向,这类方法不会改变相机的位置,只会改变相机的朝向;
  • 扭转 twist :twistLefttwistRight,与 twist 有关的方法就是在相机位置不变的情况下,调整相机视角向左(逆时针)或向右(顺时针)扭转,这类方法不会改变相机的位置,只会改变相机的朝向;
  • 旋转 rotate :rotateDownrotateLeftrotateRightrotateUp,与 rotate 有关的方法会根据提供的角度参数旋转相机视角,这类方法会改变相机的位置,也会改变相机的朝向;
  • 其他操作相机的方法:
    • setView直接将相机视角定位到某个位置;
    • lookAt直接将相机视角定位到某个位置,但是会锁定相机视角。

其他

  • Scene : 场景,负责渲染和管理所有三维对象。它包含光源、相机、地形、建筑物模型等可视化元素。
  • Camera : 相机,控制场景的视角和视野,提供了移动、缩放、旋转等功能。
  • Entity : 实体,用于表示地理空数据的基本对象,如点、线、多边形、3D模型等。每个实体都包含几何信息、样式和属性数据。
  • Primitive : 几何体, 构建基本几何形状的对象
  • DataSources : 数据源,用于管理和加载各种格式的地理空间数据,如GeoJSONKMLCZML等。它们提供了高效的数据流和内存管理。它的 clock 属性是用来控制数据源中时间相关信息的。
  • imageryLayers: 影像图层集合
  • ImageryProvider : 图像提供程序,图像提供程序用于加载和显示不同来源的影像数据,如在线地图瓦片服务、本地影像等。
  • TerrainProvider : 地形提供程序,地形提供程序负责加载和渲染地形高程数据,如高程图层、3DTiles等。
  • Widgets : 提供了一系列可视化的工具和控件,用于增强用户与三维场景的交互。如导航控件、图层管理器、信息显示等。
  • Clock : 时钟,用于控制场景中的动画和时间相关数据的展示。它允许开发者创建基于时间的动态场景。
  • Property : 属性,用于存储和管理3D对象的属性值。
  • Material : 材质,它定义了3D对象的表面外观,如颜色、纹理、光照效果等。
  • Animation : 动画对象,用于控制场景中的动画效果
  • baseLayerPicker : 底图选择器,用于选择不同的底图
  • geocoder : 地理编码器,用于将地理位置转换为经纬度坐标
  • homeButton : 首页按钮,用于将视角重置为默认视角
  • globe : 地球对象,代表地球表面
  • skyBox : 天空盒,用于渲染天空
  • CZML(Cesium Language) : Cesium专有的JSON格式,用于描述时间动态的地理空间数据。
  • 3D Tiles : 一种用于高效流式传输和渲染大规模三维数据的开放规范,Cesium提供了对它的原生支持

CesiumJS API

坐标系及坐标变换

在GIS中,我们遇到的坐标系一般有两种:

  • 地理坐标系(Geographic Coordinate System)
  • 投影坐标系(Projected Coordinate System)

地理坐标系经过投影后变成投影坐标系,投影坐标系因此由地理坐标系和投影组成,投影坐标系必然包括有一个地理坐标系

在 Cesium 中共有 4 种坐标表示方法:

  • 2D 笛卡尔平面直角坐标系:Cartesian2,使用较少;
  • 3D 笛卡尔空间直角坐标系:Cartesian3,常用;
  • 4D 笛卡尔空间直角坐标系:Cartesian4,使用较少,下文不做介绍;
  • WGS84 经纬度坐标弧度制:Cartographic,常用。

常用坐标系

坐标系是用来确定物体在地球上位置的参考系统。它定义了经度、纬度和高程等地理位置的测量方法。不同的坐标系使用不同的参考点和测量方法,因此会导致同一个地物的坐标值不同。

坐标系 简介 使用范围
WGS84 世界大地坐标系1984,是目前国际上通用的全球卫星定位系统(GPS)使用的坐标系。 GPS、谷歌地图、高德地图、腾讯地图
CGCS2000 中国大地坐标系2000,是由中国国家测绘局制定的国家标准坐标系。 国家天地图
GCJ-02 火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。 高德地图、腾讯地图
BD-09 百度坐标系,是在GCJ-02基础上再一次加密的坐标系,用来保护用户隐私。 百度地图
  1. WGS84CGCS2000是地球坐标系,它们之间相差很小(经度相同,纬度上存有0.11mm上下的区别),可以近似认为是同一个坐标系。GCJ-02WGS84经过加密后的坐标系,与WGS84CGCS2000存在一定的偏移。
  2. BD-09GCJ-02经过二次加密后的坐标系,与GCJ-02存在一定的偏移。

坐标系拾取

Entity和Primitive

EntityPrimitive 是Cesium中用于绘制三维对象的两个重要类。

Entity 实体

Entity是Cesium中用于表示具有特定位置、方向、大小和样式的地理或非地理对象的抽象概念。Entity通常用于表示地图上的点、线、面、模型等,它们可以包含多个属性(Property),这些属性可以是静态的,也可以是动态随时间变化的。Entity的属性包括位置(position)、方向(orientation)、缩放(scale)、颜色(color)等。

Entity的一个重要特点是它们可以包含多个子Entity,形成一个层次结构。这种结构使得Entity非常适合表示复杂的地理信息和构建复杂的场景。例如,一个Entity可以代表一个城市,它的子Entity可以代表城市中的建筑物、道路、公园等。

Primitive 原始对象 (几何体)

Primitive是Cesium中用于构建基本几何形状的对象,如点、线、多边形等。它们是构建更复杂Entity的基础。Primitive不包含位置信息,它们的位置是由包含它们的Entity决定的。Primitive可以有材质(Material),这使得它们可以显示不同的纹理和颜色。

Primitive通常用于创建地图上的简单几何图形,如在地图上绘制一个矩形区域(RectanglePrimitive)、一条线(PolylinePrimitive)或一个点(PointPrimitive)。它们也可以用于创建更复杂的结构,如通过组合多个Primitive来构建三维模型(ModelPrimitive)。

总结 :

  • Primitive 是面向图形开发人员的底层API。该API暴露最小限度的抽象,使用图形学术语,具有很大的灵活性,需要具有图形学编程的知识;
  • Entity 是高级别的数据驱动的API。该API使用一致性设计的、高级别的对象来管理一组相关性的可视化对象,其底层使用Primitive API;

总结来说,Entity是构建复杂场景的基本单元,它们可以包含位置、属性和子对象。而Primitive是构建Entity的基础,它们是基本的几何形状,通常用于创建简单的视觉效果。

事件

Cesium中的事件包含 鼠标事件相机事件键盘事件场景触发事件 以及其他一些事件,例如实体事件、动画事件、时间线事件等。

根据使用情况,可以把Cesium中的事件大体分为三种,即

  1. 屏幕空间事件处理程序 Cesium.ScreenSpaceEventHandler
  2. 屏幕空间相机控制器 viewer.scene.screenSpaceCameraController
  3. 场景触发事件

1. 屏幕空间事件处理程序

屏幕空间事件处理程序,对应API中的 Cesium.ScreenSpaceEventHandler 。官方解释是,处理用户输入事件,可以添加自定义函数,以便在用户输入时执行。可以理解为我们常说的鼠标事件(或键盘事件),是与鼠标和键盘输入相关的事件处理程序。
使用时,我们需要先对 ScreenSpaceEventHandler 类进行实例化,再注册事件或注销事件。

const handler = new Cesium.ScreenSpaceEventHandler(HTMLCanvasElement);

//绑定屏幕空间事件
handler.setInputAction(action, type, modifier)

//移除屏幕空间事件
handler.removeInputAction(type, modifier)

//返回要在输入事件上执行的函数。
handler.getInputAction(type, modifier)

屏幕空间事件类型

屏幕空间事件类型(ScreenSpaceEventType), 此 枚举类型 用于对鼠标事件进行分类:向下、向上、单击、双击、移动和按住按钮时移动。

名称 类型 描述
LEFT_DOWN number 表示鼠标左键按下事件。
LEFT_UP number 表示鼠标左键向上事件。
LEFT_CLICK number 表示鼠标左键单击事件。
LEFT_DOUBLE_CLICK number 表示鼠标左键双击事件。
RIGHT_DOWN number 表示鼠标左键按下事件。
RIGHT_UP number 表示鼠标右键向上事件。
RIGHT_CLICK number 表示鼠标右键单击事件。
MIDDLE_DOWN number 表示鼠标中键按下事件。
MIDDLE_UP number 表示鼠标中键向上事件。
MIDDLE_CLICK number 表示鼠标中键单击事件。
MOUSE_MOVE number 表示鼠标移动事件。
WHEEL number 表示鼠标滚轮事件。
PINCH_START number 表示触摸表面上的两指事件的开始。
PINCH_END number 表示触摸表面上的两指事件的结束。
PINCH_MOVE number 表示触摸表面上两指事件的变化。

示例

Cesium.ScreenSpaceEventType.LEFT_CLICK

键盘修饰符类型

键盘修饰符类型(KeyboardEventModifier),此枚举类型用于表示键盘修饰符。除了其他事件类型之外,还按住这些键。

名称 类型 描述
SHIFT number 表示shift键被按下。
CTRL number 表示ctrl键被按下。
ALT number 表示alt键被按下。

示例

Cesium.ScreenSpaceEventType.LEFT_CLICK

键盘修饰符 不可以单独使用,需要配合鼠标输入事件使用。

示例代码

// 绑定屏幕空间事件 (设置鼠标左键点击事件)
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(event){
    console.log('shift + 左键单击', event.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK, Cesium.KeyboardEventModifier.SHIFT);

// 移除屏幕空间事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK, Cesium.KeyboardEventModifier.SHIFT);

2. 屏幕空间相机控制器

根据在画布上的鼠标输入修改摄像机的位置和方向。可以理解为我们常说的相机事件,是与相机控制相关的事件处理程序。
Cesium在 Viewer 类的实例化过程中,也实例化了其他很多类,其中就包括 ScreenSpaceCameraController 类,并把实例化结果赋给了 viewer.scene.screenSpaceCameraController ,所以我们在使用时可以直接操作 viewer.scene.screenSpaceCameraController
另外,我们可以更改默认操作模式。

相机事件类型

相机事件类型(CameraEventType),此枚举用于与相机交互的可用输入。(查看文档

名称 类型 描述
LEFT_DRAG number 按下鼠标左键,然后移动鼠标并松开按钮。
RIGHT_DRAG number 按下鼠标右键,然后移动鼠标并松开按钮。
MIDDLE_DRAG number 按下鼠标中键,然后移动鼠标并松开按钮。
WHEEL number 滚动鼠标中键滚轮。
PINCH number 双指触控屏幕。

默认操作模式

操作 3D视图 2.5D视图 2D视图
LEFT_DRAG 绕地球旋转 地图上平移 地图上平移
RIGHT_DRAG 地图缩放 地图缩放 地图缩放
MIDDLE_DRAG 倾斜地球 倾斜地图
WHEEL 地图缩放 地图缩放 地图缩放
PINCH 倾斜地球 倾斜地图
CTRL + LEFT_DRAG 倾斜地球 倾斜地图
CTRL + RIGHT_DRAG 倾斜地球 倾斜地图

修改默认操作模式

如果需要改变默认操作模式,可以在初始化地球之后,通过改变 ScreenSpaceCameraController 的几个属性来实现。

属性名 类型 描述
lookEventTypes `CameraEventType Array
rotateEventTypes `CameraEventType Array
tiltEventTypes `CameraEventType Array
translateEventTypes `CameraEventType Array
zoomEventTypes `CameraEventType Array

示例:

// 1. 将默认`倾斜视图操作`修改为仅鼠标右键触发
viewer.scene.screenSpaceCameraController.tiltEventTypes = [Cesium.CameraEventType.RIGHT_DRAG];
// 2. 将`倾斜视图操作`修改为以下4种触发方式
viewer.scene.screenSpaceCameraController.tiltEventTypes = [
    Cesium.CameraEventType.RIGHT_DRAG, //使用鼠标右键拖拽来倾斜相机
    Cesium.CameraEventType.PINCH, //使用双指缩放来倾斜相机
    //按住 Ctrl 键的同时使用鼠标左键拖拽来倾斜相机。
    {
        eventType: Cesium.CameraEventType.LEFT_DRAG,
        modifier: Cesium.KeyboardEventModifier.CTRL,
    },
    //按住 Ctrl 键的同时使用鼠标右键拖拽来倾斜相机。
    {
        eventType: Cesium.CameraEventType.RIGHT_DRAG,
        modifier: Cesium.KeyboardEventModifier.CTRL,
    },
];

// 1. 将默认`视图缩放操作`修改为仅鼠标滚轮滚动
viewer.scene.screenSpaceCameraController.zoomEventTypes = [Cesium.CameraEventType.WHEEL];
// 2. 将`视图缩放操作`修改为以下3种触发方式
viewer.scene.screenSpaceCameraController.zoomEventTypes = [
    Cesium.CameraEventType.MIDDLE_DRAG,
    Cesium.CameraEventType.WHEEL,
    Cesium.CameraEventType.PINCH,
];

开启默认事件处理程序

屏幕空间相机控制器(ScreenSpaceCameraController)提供了多个用于控制该类所提供的功能是否启用的属性成员,这些属性可以帮助开发者灵活地定制视点控制行为。

名称 类型 描述
enableInputs boolean 用户有条件地允许使用标志 enableTranslateenableZoomenableRotateenableTiltenableLook 进行输入。如果为 false,则禁用所有输入。(注意:此设置适用于临时用例,例如相机飞行时可禁用用户拖动或缩放,结束时设置为True)
enableLook boolean 允许用户改变相机观察方向。如果为 false,则只能通过平移或旋转来更改相机视图方向。此标志仅适用于 3D 和哥伦布视图(2.5D)模式。
enableRotate boolean 是否允许用户通过鼠标或键盘旋转视点。
enableTilt boolean 是否允许用户通过鼠标或键盘倾斜视点。
enableTranslate boolean 是否允许用户通过鼠标拖拽平移视点。
enableZoom boolean 是否允许用户通过鼠标滚轮或键盘缩放视点。

示例:

//禁止用户平移
viewer.scene.screenSpaceCameraController.enableTranslate = false;

//禁止用户缩放
viewer.scene.screenSpaceCameraController.enableZoom = false;

3. 场景触发事件

场景中一些变化触发的监听事件,随着Cesium中一些对象实例化而产生的事件。

常用的场景触发事件有:

  • Camera.changed:相机发生变化时触发
  • Camera.moveEnd:相机停止移动时触发
  • Camera.moveStart:相机开始移动时触发
  • Scene.preUpdate:场景更新之前触发
  • Scene.postUpdate:场景更新之后立即触发
  • Scene.preRender:场景更新之后渲染之前触发
  • Scene.postRender:场景渲染之后触发
  • Scene.terrainProviderChanged:地形提供器发生变化时触发
  • Viewer.trackedEntityChanged:entity的属性发生变化时触发
  • Cesium3DTileset.allTilesLoaded:所有3dtiles数据加载完成以后触发
  • Cesium3DTileset.loadProgress:3dtiles初始化加载过程中触发
  • Cesium3DTileset.tileFailed:3dtiles瓦片加载失败时触发
  • Globe.imageryLayersUpdatedEvent:地球加载图层更新时触发

示例:

// 需要回调的函数 
function callbackFunc(event){
    cosnole.log(event)
}
// 渲染之前执行
viewer.scene.preRender.addEventListener(callbackFunc);
viewer.scene.preRender.removeEventListener(callbackFunc);

// 更新之前执行
viewer.scene.preUpdate.addEventListener(callbackFunc);
viewer.scene.preUpdate.removeEventListener(callbackFunc);

// 实时渲染执行
viewer.scene.postRender.addEventListener(callbackFunc);
viewer.scene.postRender.removeEventListener(callbackFunc);

// 实时更新执行
viewer.scene.postUpdate.addEventListener(callbackFunc);
viewer.scene.postUpdate.removeEventListener(callbackFunc);

Refs

工具类

Cesium

Cesium 项目

Github源码

教程

@Marinerer
Copy link
Owner Author

Marinerer commented Mar 29, 2024

CesiumJS API

API 大纲

常用的 CesiumJS API

1. 场景管理

  • Viewer:CesiumJS 的核心类,用于创建和管理场景。

    • camera:相机属性,用于控制视角和观察场景;
    • imageryLayers:影像图层集合;
    • terrainProvider:地形提供者;
    • entities:实体集合,用于空间数据可视化;
    • dataSources:管理矢量数据源;
    • clock: 时钟对象,控制时间动态。
    • scene:场景,sceneViewer对象的属性,但它也是 Cesium 中的一个关键的对象,用于添加图形(primitive)、场景特效和场景事件
    • Event(非属性):Event并非Viewer对象的属性,在这里特指所有事件:
      • screenSpaceEventHandler:屏幕操作事件;
      • selectedEntityChanged:选取实体事件;
      • trackedEntityChanged:追踪实体事件。
    • widgets(非属性):Viewer初始化界面上的组件集合。widgets并非Viewer对象的属性,在这里特指所有控件:
      • animation:动画控件;
      • baseLayerPicker:影像图层选择器;
      • fullscreenButton:全屏按钮;
      • geocoder:查找位置;
      • homeButton:返回视角到初始位置;
      • navigationHelpButton:帮助按钮;
      • timeline:时间轴;
      • vrButton:VR 按钮。
  • Scene:场景对象,包含所有 3D 对象和数据。

    • primitives:获取场景中的图元集合,包括几何体和外观
    • terrainProvider:获取地形提供者
    • imageryLayers:获取图层集合
    • postProcessStages: 场景后期处理环境对象,如大气圈、天空盒、太阳、月亮等。
    • pick: 根据屏幕坐标拾取场景中的对象。
    • pickPosition: 拾取场景中的位置并返回对应的世界坐标。
  • Camera:相机对象,用于控制视点。

  • Globe:地球对象,用于渲染地形和影像。

    • terrainProvider: 地球的地形提供者。
    • imageryLayers: 地球的影像图层。
  • ImageryLayer:影像图层,用于显示卫星、航空影像等数据。

  • TerrainProvider:地形提供程序,用于提供地形数据。

2. 实体管理

  • Entity:实体对象,代表场景中的 3D 对象。
    • position: 实体的位置。
    • orientation: 实体的方向。
    • model: 实体的模型。
    • polygon: 实体的多边形。
    • point: 实体的点。
    • label: 实体的标签。
    • description: 实体的描述信息。
  • Primitive:几何图形对象,用于创建简单 3D 形状。
  • Model:模型对象,用于加载和渲染 3D 模型。
  • Billboard:广告牌对象,用于显示文本或图像。
  • Label:标签对象,用于显示文本。
  • Polyline:折线对象,用于显示线段。
  • Polygon:多边形对象,用于显示封闭区域。

3. 事件处理

  • Event: 通用的事件管理类。它通常在容器类中实例化,并作为属性暴露给其他类订阅。

    • 订阅事件: addEventListener
    • 触发事件: raiseEvent
    • 取消订阅事件: removeEventListener
  • ScreenSpaceEventHandler: 处理鼠标、触摸等输入事件

4. 动画和时间

  • Clock:时钟对象,用于控制时间流逝。
  • Timeline:时间线对象,用于管理动画。
  • Animation:动画对象,用于创建动画效果。

5. 其他

  • Math:数学库,提供各种数学函数。
  • Cartesian3:笛卡尔三维坐标对象。表示相对于地球中心的位置
  • Cartographic:地理坐标对象。由WGS84经度、纬度(弧度)和椭球面高度确定的位置。
  • HeadingPitchRoll:相机方向、俯仰和滚转角对象。
    • fromDegrees: 通过度数创建方向。
    • pitch: 方向的俯仰角度。
    • heading: 方向的航向角度。
    • roll: 方向的翻滚角度。
  • Transforms:坐标变换函数。
  • Quaternion:四元数,用于表示3D旋转。
    • identity: 单位四元数,表示无旋转。
    • fromAxisAngle: 通过轴和角度创建四元数。
    • conjugate: 四元数的共轭。
    • multiply: 两个四元数相乘。
  • Matrix4:四维矩阵。
  1. 场景控制和相机操作
    • Viewer: 创建和管理虚拟地球场景的主要入口
    • Camera: 控制相机视角,包括相机位置、方向、投影矩阵等
    • Scene: 管理渲染场景,包括光源、雾、天空盒等
    • SceneMode: 控制场景模式(2D、3D或是2D+3D组合模式)
  2. 图元绘制
    • Entity: 渲染点、线、标注、3D模型等图元
    • EntityCollection: 管理一组实体对象
    • Primitive: 渲染底层图元,如平面、立方体、球体等基本形状
    • PrimitiveCollection: 管理一组基本图元对象
  3. 几何体数据
    • PolygonGeometry: 生成多边形几何体数据
    • EllipseGeometry: 生成椭圆几何体数据
    • BoxGeometry: 生成立方体几何体数据
    • SphereGeometry: 生成球体几何体数据
  4. 贴地渲染
    • GeoJsonDataSource: 加载GeoJSON数据
    • GeoJsonDataSource.load: 加载本地或远程GeoJSON数据
    • GroundPrimitive: 渲染贴地几何体
  5. 三维模型
    • Model: 加载和渲染3D格式模型(glTF)
    • ModelAnimation: 控制3D模型动画
  6. 地形
    • CesiumTerrainProvider: 加载离线地形数据
    • TerrainSource: 提供在线地形服务
  7. 地图投影
    • Scene.mapProjection: 设置地图投影方式
    • SceneTransforms: 提供地球参考几何计算
  8. 时间和动画
    • Clock: 管理动画模拟时钟
    • Animation: 创建并播放动画
  9. 事件响应
    • ScreenSpaceEventHandler: 处理鼠标、触摸等输入事件
  10. ImageProvider
    • createWorldImagery: 加载影像
    • createOpenStreetMapImageryProvider: 加载OpenStreetMap地图服务
  11. 材质和样式
    • ColorMaterialProperty: 设置实体颜色材质
    • PolylineGlowMaterialProperty: 设置线材质发光效果
    • Cesium3DTileStyle: 设置3D瓦片样式

Billboard:由一个二维图像或一组图像组成,以单个点定位,并总是对准摄像机。

CesiumWidget:一个较小的 viewer,用于在没有 timeline 或 navigation widgets 的情况下进行场景渲染。

imageryProvider:提供加载图像的方法。

DataSource:为了在 viewer 中加载数据,DataSource API 提供了加载和显示各种标准格式的方法,包括 CZML、GeoJSON、KML 和 TopoJSON。

  • Clock:提供时间信息。
  • Globe:地球对象。
  • DataSource:数据源,用于加载各种数据格式。
  • CesiumWidget:Cesium 视图容器。

1. Cesium.Viewer

Cesium.Viewer 文档

options

基本配置:

  • container: Element | string - 指定包含视图器小部件的 DOM 元素或 ID。
  • options: Viewer.ConstructorOptions - 描述初始化选项的对象。

小部件配置:

这些选项用于控制视图器中包含的小部件的创建和行为。

  • animation: boolean - 是否创建动画小部件。
  • baseLayerPicker: boolean - 是否创建图层选择器小部件。
  • fullscreenButton: boolean - 是否创建全屏按钮小部件。
  • vrButton: boolean - 是否创建 VR 按钮小部件。
  • geocoder: boolean | Array. - 是否创建地理编码器小部件。
  • homeButton: boolean - 是否创建回家按钮小部件。
  • infoBox: boolean - 是否创建信息框小部件。
  • sceneModePicker: boolean - 是否创建场景模式选择器小部件。
  • selectionIndicator: boolean - 是否创建选择指示器小部件。
  • timeline: boolean - 是否创建时间线小部件。
  • navigationHelpButton: boolean - 是否创建导航帮助按钮小部件。
  • navigationInstructionsInitiallyVisible: boolean - 导航指示是否初始可见。
  • scene3DOnly: boolean - 是否仅在 3D 模式下渲染几何体。
  • shouldAnimate: boolean - 时钟是否尝试默认推进模拟时间。
  • clockViewModel: ClockViewModel - 用于控制当前时间的时钟视图模型。

图层配置:

这些选项用于配置视图器中的图层,包括地形和影像图层。

  • selectedImageryProviderViewModel: ProviderViewModel - 当前基础影像图层的视图模型。

  • imageryProviderViewModels: Array. - 可从图层选择器中选择的 ProviderViewModel 数组。

  • selectedTerrainProviderViewModel: ProviderViewModel - 当前基础地形图层的视图模型。

  • terrainProviderViewModels: Array. - 可从图层选择器中选择的地形提供者视图模型数组。

  • baseLayer: ImageryLayer | false - 地球最底层影像图层。若为false 则禁用默认的全球影像图层。(同 imageryProvider: false)

    • 仅当“baseLayerPicker”设置为 false 时,此值才有效。
  • terrainProvider: TerrainProvider - 地形提供者。

  • terrain: Terrain - 处理异步地形提供者的对象。

  • skyBox: SkyBox | false - 用于渲染星空的SkyBox对象。

  • skyAtmosphere: SkyAtmosphere | false - 蓝天和地球边缘的光晕。

渲染配置:

这些选项用于控制视图器的渲染行为和性能。

  • useDefaultRenderLoop: boolean - 是否使用默认的渲染循环。
  • targetFrameRate: number - 使用默认渲染循环时的目标帧率。
  • showRenderLoopErrors: boolean - 是否在发生渲染循环错误时自动显示错误信息。
  • useBrowserRecommendedResolution: boolean - 是否使用浏览器推荐的分辨率。
  • automaticallyTrackDataSourceClocks: boolean - 是否自动跟踪新添加的数据源的时钟设置。
  • contextOptions: ContextOptions - 传递给 Scene 的上下文和 WebGL 创建属性。
  • sceneMode: SceneMode - 初始场景模式。
  • mapProjection: MapProjection - 在 2D 和 Columbus View 模式中使用的地图投影。
  • globe: Globe | false - 场景中使用的地球。
  • orderIndependentTranslucency: boolean - 是否使用独立于顺序的半透明。
  • creditContainer: Element | string - 包含 CreditDisplay 的 DOM 元素或 ID。
  • creditViewport: Element | string - 包含 CreditDisplay 弹出的 DOM 元素或 ID。
  • dataSources: DataSourceCollection - 由小部件可视化的数据源集合。
  • shadows: boolean - 是否由光源投射阴影。
  • terrainShadows: ShadowMode - 地形是否投射或接收光源的阴影。
  • mapMode2D: MapMode2D - 2D 地图是否可旋转或可以无限滚动。
  • projectionPicker: boolean - 是否创建投影选择器小部件。
  • blurActiveElementOnCanvasFocus: boolean - 点击视图器画布时,活动元素是否应该失焦。
  • requestRenderMode: boolean - 是否启用按需渲染模式。
  • maximumRenderTimeChange: number - 在请求渲染之前允许的最大模拟时间变化。
  • depthPlaneEllipsoidOffset: number - 调整 DepthPlane 以解决低于椭球体零高度的渲染问题。
  • msaaSamples: number - 控制多重采样抗锯齿的速率。

Members

场景控制:

  • camera: 控制视角的相机对象
  • scene: 3D 场景本身
  • sceneModePicker: 场景模式选择器 (2D/3D/剖面)
  • clock: 控制场景中时间流逝的时钟对象
  • clockTrackedDataSource: 与时钟关联的数据源
  • clockViewModel: 时钟的视图模型,用于显示时间信息
  • animation: 场景中的动画对象
  • targetFrameRate: 期望的帧率
  • useDefaultRenderLoop: 是否使用默认的渲染循环

图像和地形:

  • imageryLayers: 图像图层集合
  • terrainProvider: 地形提供者
  • terrainShadows: 地形阴影模式
  • resolutionScale: 分辨率缩放比例
  • projectionPicker: 投影选择器

用户交互:

  • container: 容纳 Viewer 的 HTML 元素
  • screenSpaceEventHandler: 处理屏幕空间事件的对象 (点击、拖拽等)
  • selectedEntity: 当前选中的实体对象
  • selectedEntityChanged: 选中实体发生变化时的事件
  • selectionIndicator: 选中实体的可视化指示器
  • navigationHelpButton: 导航帮助按钮
  • fullscreenButton: 全屏按钮
  • vrButton: VR 模式按钮
  • allowDataSourcesToSuspendAnimation: 控制数据源是否可以暂停动画。

可视化元素:

  • baseLayerPicker: 底图选择器
  • entities: 实体集合 (例如标记、模型等)
  • dataSources: 数据源集合
  • dataSourceDisplay: 数据源信息显示
  • infoBox: 信息框,用于显示选中实体的信息
  • creditDisplay: 版权信息显示
  • postProcessStages: 后处理阶段集合,用于实现特殊视觉效果

其他:

  • canvas: Cesium 用于渲染的画布元素
  • container: 容纳 Viewer 的容器元素
  • cesiumWidget: 创建和管理 Viewer 的小部件
  • ready: 表示 Viewer 是否初始化完成
  • resolutionScale: 缩放比例
  • useBrowserRecommendedResolution: 是否使用浏览器推荐的分辨率
  • useDefaultRenderLoop: 是否使用默认的渲染循环
  • postProcessStages: 后处理阶段 (用于实现特效)
  • shadows: 是否启用阴影
    • geocoder: 地理编码器 (将地址转换为地理坐标)

注意:

  • provider 属性已经废弃,请使用 terrainProvider 代替。

Methods

  • destroy(): 销毁小部件。
  • extend(mixin, options): 使用提供的混入扩展基础查看器功能。
  • flyTo(target, options) → Promise<boolean>: 异步将相机飞到提供的实体、实体或数据源。
  • forceResize(): 强制小部件重新考虑其布局。
  • isDestroyed: 返回对象是否已被销毁。
  • render(): 渲染场景。
  • resize(): 调整小部件以匹配容器大小。
  • zoomTo(target, offset) → Promise<boolean>: 异步设置相机以查看提供的实体、实体或数据源。

2. Cesium.Scene

Cesium.Scene 文档

options

Cesium.Scene(options) 的 options 参数:

  • canvas: (HTMLCanvasElement) 用于创建场景的 HTML 画布元素。

  • contextOptions: (ContextOptions) 可选的上下文和 WebGL 创建属性。

  • creditContainer: (Element) 用于显示信用信息的 HTML 元素。

  • creditViewport: (Element) 用于显示信用信息弹出窗口的 HTML 元素。如果不指定,视口将作为画布的兄弟元素添加。

  • mapProjection: (MapProjection) 用于 2D 和 Columbus View 模式的地图投影,默认为 new GeographicProjection()

  • scene3DOnly: (boolean) 如果设置为 true,则优化内存使用和性能以仅适用于 3D 模式,但禁用使用 2D 或 Columbus View 的能力。

  • orderIndependentTranslucency: (boolean) 如果为 true 并且配置支持,则使用独立于顺序的半透明。

  • shadows: (boolean) 可选的,确定光源是否投射阴影。

  • mapMode2D: (MapMode2D) 可选的,确定 2D 地图是否可旋转或是否可以在水平方向无限滚动,默认为 MapMode2D.INFINITE_SCROLL

  • requestRenderMode: (boolean) 可选的,如果为 true,则仅在场景内的变化决定需要时渲染帧。启用此选项可以提高应用程序的性能,但需要使用 Scene#requestRender 显式地在这个模式下渲染新帧。

  • maximumRenderTimeChange: (number) 可选的,如果 requestRenderMode 为 true,此值定义在请求渲染之前允许的最大模拟时间变化。

  • depthPlaneEllipsoidOffset: (number) 可选的,调整 DepthPlane 以解决低于椭球体零高程的渲染伪影。

  • msaaSamples: (number) 可选的,如果提供,此值控制多重采样抗锯齿(MSAA)的速率。典型的多重采样率是每个像素 2、4,有时是 8 个样本。更高的 MSAA 采样率可能会以性能为代价提高视觉质量。此值仅适用于支持多重采样渲染目标的 WebGL2 上下文。

Members

场景控制:

  • camera: 相机 (Camera) - 控制场景的视角和位置。
  • sceneMode: 场景模式 (SceneMode) - 2D/3D/哥伦布视图等
  • mapProjection: 地图投影 (MapProjection) - 地图投影方式
  • screenSpaceCameraController: 屏幕空间相机控制器 (ScreenSpaceCameraController) - 操控相机移动
  • eyeSeparation: 数字 (number) - 双眼模式下两眼之间的距离
  • farToNearRatio: 数字 (number) - 视锥体的远近平面比例
  • focalLength: 数字 (number) - 相机的焦距
  • cameraUnderground: 布尔值 (boolean) - 是否将相机放置在地下
  • requestRenderMode: 布尔值 (boolean) - 是否在相机移动时请求重绘场景

渲染设置:

  • backgroundColor: 颜色 (Color) - 背景色
  • fog: 雾效 (Fog) - 雾效设置
  • globe: 地形 (Globe) - 地形对象,控制场景中地球的显示。
  • terrainProvider: 地形提供者 (TerrainProvider) - 地形数据
  • highDynamicRange: 布尔值 (boolean) - 高动态范围渲染
  • msaaSamples: 数字 (number) - 多重采样抗锯齿采样数量
  • postProcessStages: 后处理阶段集合 (PostProcessStageCollection) - 渲染后特效
  • logarithmicDepthBuffer: 布尔值 (boolean) - 使用对数深度缓冲区
  • maximumAliasedLineWidth: 数字 (number) - 最大允许的别名线宽
  • maximumCubeMapSize: 数字 (number) - 最大立方体贴图尺寸
  • sampleHeightSupported: 布尔值 (boolean) - 支持采样高度
  • scene3DOnly: 布尔值 (boolean) - 只显示 3D 场景

图层:

  • imageryLayers: 影像图层集合 (ImageryLayerCollection) - 影像图层
  • groundPrimitives: 地面几何体集合 (PrimitiveCollection) - 地面几何体
  • primitives: 几何体集合 (PrimitiveCollection) - 所有几何体

环境:

  • atmosphere: 大气 (Atmosphere) - 大气层
  • skyAtmosphere: 天空大气 (SkyAtmosphere) - 天空大气渲染
  • skyBox: 天空盒子 (SkyBox) - 天空背景纹理
  • sun: 太阳 (Sun) - 太阳光源
  • moon: 月球 (Moon) - 月球光源
  • sunBloom: (boolean) - 启用太阳晕环效果
  • verticalExaggeration: (number) - 垂直夸大系数
  • specularEnvironmentMaps: (string) - 镜面环境贴图的 URL

拾取 & 交互:

  • pickPositionSupported: (boolean) - 支持拾取位置
  • pickTranslucentDepth: (boolean) - 拾取时是否考虑半透明物体
  • useDepthPicking: (boolean) - 使用深度拾取

事件:

  • morphComplete: (Event) - 几何体变形完成事件
  • morphStart: (Event) - 几何体变形开始事件
  • preUpdate: (Event) - 更新前周期事件
  • postUpdate: (Event) - 更新后周期事件
  • postRender: (Event) - 渲染后事件
  • preRender: (Event) - 渲染前事件
  • terrainProviderChanged: (Event) - 地形提供者变化事件
  • renderError: (Event) - 渲染过程中发生错误时触发的事件

其他:

  • id: 字符串 (string) - 场景唯一标识符
  • canvas: 元素 (HTMLCanvasElement) - 渲染画布
  • morphComplete: (Event) - 几何体变形完成
  • morphStart: (Event) - 几何体变形开始
  • lastRenderTime: 儒略日期 (JulianDate) - 上次渲染时间
  • useDepthPicking: 布尔值 (boolean) - 是否启用深度拾取
  • clampToHeightSupported: 布尔值 (boolean) - 支持地形高度限制
  • completeMorphOnUserInput: 布尔值 (boolean) - 用户输入时是否完成几何体变形
  • debugCommandFilter: 函数 (function) - 过滤调试命令的函数
  • debugFrustumStatistics: 对象 (object) - 显示视锥体统计信息的调试对象
  • debugShowCommands: 布尔值 (boolean) - 显示调试命令
  • debugShowDepthFrustum: 数字 (number) - 显示深度视锥体信息的调试级别
  • debugShowFramesPerSecond: 布尔值 (boolean) - 显示帧率信息
  • debugShowFrustumPlanes: 布尔值 (boolean) - 显示视锥体

Methods

场景控制:

  • morphTo2D(duration): 将场景变形为 2D 模式 (可选持续时间)
  • morphTo3D(duration): 将场景变形为 3D 模式 (可选持续时间)
  • morphToColumbusView(duration): 将场景变形为哥伦布视图 (可选持续时间)
  • completeMorph(): 立即完成正在进行的场景变形

拾取:

  • pick(windowPosition, width, height): 拾取场景中的物体 (返回包含 picked object 信息的对象)
  • pickPosition(windowPosition, result): 拾取场景中的位置 (返回拾取到的三维笛卡尔坐标)
  • pickVoxel(windowPosition, width, height): 拾取场景中的体素 (返回拾取到的体素单元格,三维地理坐标,或者 undefined)
  • drillPick(windowPosition, limit, width, height): 深度拾取场景中的多个物体 (返回包含多个拾取到的对象信息的数组)

地形:

  • clampToHeight(cartesian, objectsToExclude, width, result): 将三维笛卡尔坐标限制到地形高度 (考虑排除对象)
  • clampToHeightMostDetailed(cartesians, objectsToExclude, width): 将多个三维笛卡尔坐标限制到地形高度 (考虑排除对象,返回 Promise)
  • sampleHeight(position, objectsToExclude, width): 获取指定位置的地形高度 (考虑排除对象)
  • sampleHeightMostDetailed(positions, objectsToExclude, width): 获取多个位置的地形高度 (考虑排除对象,返回 Promise)
  • setTerrain(terrain): 设置场景的地形对象

渲染:

  • render(time): 渲染场景 (可选提供时间参数)
  • requestRender(): 请求重绘场景

其他:

  • destroy(): 销毁场景
  • isDestroyed(): 判断场景是否已销毁
  • getCompressedTextureFormatSupported(format): 检查是否支持特定的压缩纹理格式
  1. viewer.scene.camera === viewer.scene

3. Cesium.Camera

Merbers

1. 相机属性 (位置和方向):

  • position: 相机的位置 (Cartesian3)

  • direction: 相机指向的单位向量 (Cartesian3)

  • directionWC: 世界坐标系中的相机指向的单位向量 (Cartesian3)

  • frustum: 包含视锥体的各种参数,如视野角度(fov)、近裁剪面(near)和远裁剪面(far

  • positionCartographic: 相机的地理坐标 (Cartographic)

  • positionWC: 世界坐标系中的相机位置 (Cartesian3)

  • up: 相机上方的单位向量 (Cartesian3)

  • upWC: 世界坐标系中的相机上方的单位向量 (Cartesian3)

  • right: 相机右侧的单位向量 (Cartesian3)

  • rightWC: 世界坐标系中的相机右侧的单位向量 (Cartesian3)

  • heading: 相机的水平方向角,左右旋转 (弧度) ⭐

  • pitch: 相机的俯仰角,上下旋转 (弧度) ⭐

  • roll: 相机的翻转角,左右摇晃 (弧度) ⭐

2. 视图矩阵:

  • inverseTransform: 相机变换矩阵的逆矩阵 (Matrix4)
  • inverseViewMatrix: 视图矩阵的逆矩阵 (Matrix4)
  • transform: 相机变换矩阵 (Matrix4)
  • viewMatrix: 视图矩阵 (Matrix4)

3. 事件:

  • changed: 相机属性改变时触发的事件 (Event)
  • moveEnd: 相机移动结束后触发的事件 (Event)
  • moveStart: 相机移动开始时触发的事件 (Event)

4. 其他:

  • constrainedAxis: 约束相机移动的轴 (Cartesian3,可选)
  • defaultLookAmount: 默认环视移动量
  • defaultMoveAmount: 默认平移移动量
  • defaultRotateAmount: 默认旋转量
  • defaultZoomAmount: 默认缩放量
  • maximumZoomFactor: 最大缩放因子
  • percentageChanged: 视锥体属性改变的百分比

默认值:

  • Cesium.Camera.DEFAULT_OFFSET : 当相机飞到包含边界球体的位置时使用的默认航向/间距/范围
  • Cesium.Camera.DEFAULT_VIEW_FACTOR: 当相机飞向包含边界球体的位置时使用的默认缩放因子。
  • Cesium.Camera.DEFAULT_VIEW_RECTANGLE: 相机创建时默认查看的矩形区域。

Methods

1. 视图控制:

  • setView(options): 设置相机的位置、方向和变换矩阵。 (即时) ⭐⭐⭐

    • options.destination: Cartesian3 | Rectangle 相机在WGS84坐标中的位置
    • options.orientation: HeadingPitchRollValues | DirectionUp 相机的方向 , 参数说明见底部 HeadingPitchRollValues
    • options.endTransform: Matrix4 相机参考帧的变换矩阵
    • options.convert: Boolean 是否将目标从世界坐标转换为场景坐标
  • flyHome(duration): 飞回初始视角 (飞行动画)

  • flyTo(options): 飞到指定位置 (飞行动画) ⭐⭐⭐

  • flyToBoundingSphere(boundingSphere, options): 飞到包围球的视图 (飞行动画)

  • lookAt(target, offset): 设置相机位置和方向,使其指向特定目标点。 (即时) ⭐⭐⭐

  • lookAtTransform(transform, offset): 将相机看向指定变换矩阵 (即时)

  • look(axis, angle): 绕指定轴旋转相机 (即时)

    • lookDown, lookUp, lookLeft, lookRight
  • move(direction, amount):沿着指定方向移动相机 (即时)

    • moveBackward, moveForward, moveLeft, moveRight, moveDown, moveUp
  • rotate(axis, angle): 绕指定轴旋转相机 (即时)

    • rotateDown, rotateUp, rotateLeft, rotateRight
  • switchToOrthographicFrustum() : 切换为正交视锥体

  • switchToPerspectiveFrustum() : 切换为透视视锥体

  • twistLeft(amount): 按量逆时针旋转相机,以弧度为单位。 (即时)

  • twistRight(amount): 按量顺时针旋转相机 (即时)

  • viewBoundingSphere(boundingSphere, offset): 将相机定位到查看包围球 (即时)

  • zoomIn(amount): 放大相机,通过改变相机与视锥体的关系来缩放视图 (即时) ⭐⭐⭐

  • zoomOut(amount): 缩小相机 (即时)

2. 拾取和测量:

  • getPickRay(windowPosition, result): 获取窗口位置对应的拾取射线
  • pickEllipsoid(windowPosition, ellipsoid, result): 拾取椭球体上的点
  • distanceToBoundingSphere(boundingSphere): 计算相机到包围球的距离
  • getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight): 获取包围球在屏幕上占据的像素尺寸
  • getRectangleCameraCoordinates(rectangle, result): 获取矩形在相机坐标系中的坐标

3. 坐标转换:

  • cameraToWorldCoordinates(cartesian, result): 将相机坐标转换为世界坐标
  • cameraToWorldCoordinatesPoint(cartesian, result): 将相机坐标点转换为世界坐标点
  • cameraToWorldCoordinatesVector(cartesian, result): 将相机坐标向量转换为世界坐标向量
  • worldToCameraCoordinates(cartesian, result): 将世界坐标转换为相机坐标
  • worldToCameraCoordinatesPoint(cartesian, result): 将世界坐标点转换为相机坐标点
  • worldToCameraCoordinatesVector(cartesian, result): 将世界坐标向量转换为相机坐标向量

4. 其他:

  • cancelFlight(): 取消飞行动画
  • completeFlight(): 完成飞行动画
  • computeViewRectangle(ellipsoid, result): 计算可视范围矩形 (可选)
  • getMagnitude(): 获取相机位置的大小 (长度)

Examples

viewer.camera.setView({
    destination : cartesianPosition, //相机在WGS84坐标中的位置
    orientation: { //相机的方向
        heading : Cesium.Math.toRadians(90.0), // 朝向 左右旋转
        pitch : Cesium.Math.toRadians(-90),    // 仰角 上下旋转
        roll : 0.0                             // 翻转 左右摇晃
    }
});

4. Cesium.Entity

options

身份标识

  • id:实体的唯一标识符。如果未提供,则会生成一个 GUID
  • name:实体的名称。

可见性

  • availability:实体的可用时间范围。
  • show:是否显示实体。

位置和姿态

  • position:实体的位置。
  • orientation:实体的姿态。
  • viewFrom:实体的视角。

父级关系

  • parent:实体的父级实体。

可视化对象

  • billboard:广告牌可视化对象。
  • box:盒子可视化对象。
  • corridor:走廊可视化对象。
  • cylinder:圆柱体可视化对象。
  • ellipse:椭圆可视化对象。
  • ellipsoid:椭球体可视化对象。
  • label:标签可视化对象。
  • model:模型可视化对象。
  • tileset:瓦片集可视化对象。
  • path:路径可视化对象。
  • plane:平面可视化对象。
  • point:点可视化对象。
  • polygon:多边形可视化对象。
  • polyline:折线可视化对象。
  • polylineVolume:折线体可视化对象。
  • rectangle:矩形可视化对象。
  • wall:墙体可视化对象。

其他属性

  • description:实体的描述。
  • properties:实体的自定义属性。

注意:

  • 并非所有可视化对象都支持所有属性。
  • 某些属性可能需要其他属性才能正常工作。

Members

标识和可见性

  • id:实体的唯一标识符。
  • name:实体的名称 (可选)。
  • isShowing:实体是否当前正在显示。
  • show:控制实体的可见性 (可通过 setter 修改)。

数据存储

  • properties:存储实体自定义属性的 PropertyBag 对象。
  • propertyNames:包含所有自定义属性名称的数组。

位置和姿态

  • position:实体的位置 (PositionProperty)。
  • orientation:实体的姿态 (Property)。
  • viewFrom:实体的视角 (Property)。

父级关系

  • parent:实体的父级实体 (Entity)。

可视化对象

  • billboard:广告牌可视化对象 (BillboardGraphics)。
  • box:盒子可视化对象 (BoxGraphics)。
  • corridor:走廊可视化对象 (CorridorGraphics)。
  • cylinder:圆柱体可视化对象 (CylinderGraphics).
  • ellipse:椭圆可视化对象 (EllipseGraphics).
  • ellipsoid:椭球体可视化对象 (EllipsoidGraphics).
  • label:标签可视化对象 (LabelGraphics).
  • model:模型可视化对象 (ModelGraphics).
  • tileset:瓦片集可视化对象 (Cesium3DTilesetGraphics).
  • path:路径可视化对象 (PathGraphics).
  • plane:平面可视化对象 (PlaneGraphics).
  • point:点可视化对象 (PointGraphics).
  • polygon:多边形可视化对象 (PolygonGraphics).
  • polyline:折线可视化对象 (PolylineGraphics).
  • polylineVolume:折线体可视化对象 (PolylineVolumeGraphics).
  • rectangle:矩形可视化对象 (RectangleGraphics).
  • wall:墙体可视化对象 (WallGraphics).

属性

  • description:实体的描述 (Property)。
  • properties:实体的自定义属性集合 (PropertyBag)。
  • propertyNames:实体所有属性的名称列表 (Array).

事件

  • definitionChanged:实体的定义发生变化时触发的事件 (Event)。

集合

  • entityCollection:实体所属的集合 (EntityCollection)。

注意:

  • 除了 id 为字符串类型,isShowing 为布尔型以外,其余属性大多为 Cesium 提供的用于可视化和属性管理的类。
  • 这些成员变量有些是只读的,有些可以通过对应的 setter 方法进行修改。

Methods

静态方法:

  • Cesium.Entity.supportsMaterialsforEntitiesOnTerrain(scene): 判断场景是否支持地形上的实体材质。如果场景支持地形上的实体材质,则可以为位于地形的实体设置不同的材质。
  • Cesium.Entity.supportsPolylinesOnTerrain(scene): 判断场景是否支持地形上的线形要素。如果场景支持地形上的线形要素,则可以在地形上绘制线、面等形状。

实例方法:

  • addProperty(propertyName): 添加一个属性。

  • removeProperty(propertyName): 移除一个属性。

  • isAvailable(time): 判断实体在指定时间是否可用。

  • computeModelMatrix(time, result): 计算实体在指定时间下的模型矩阵。

  • merge(source): 合并另一个实体的属性。

5. Cesium.Clock

6. Event

ScreenSpaceEventHandler

屏幕空间事件处理程序。处理用户输入事件,可以添加自定义函数,以便在用户输入时执行。可以理解为我们常说的鼠标事件(或键盘事件),是与鼠标和键盘输入相关的事件处理程序。

1. setInputAction ⭐

设置要在输入事件上执行的函数。

setInputAction(action, type, modifier)
  • action: (function),当输入事件发生时要执行的函数。
  • type: (Number),输入事件的屏幕空间事件类型(ScreenSpaceEventType)。
  • modifier:(?Number),当 type 中的事件发生时按住的键盘修饰符(KeyboardEventModifier)。

2. removeInputAction ⭐

移除要在输入事件上执行的函数。

removeInputAction(type, modifier)
  • type: (Number),输入事件的屏幕空间事件类型(ScreenSpaceEventType)。
  • modifier: (?Number),当 type 中的事件发生时按住的键盘修饰符(KeyboardEventModifier)。

3. getInputAction

返回要在输入事件上执行的函数。

getInputAction(type, modifier)  ScreenSpaceEventHandler.PositionedEventCallback|ScreenSpaceEventHandler.MotionEventCallback|ScreenSpaceEventHandler.WheelEventCallback|ScreenSpaceEventHandler.TwoPointEventCallback|ScreenSpaceEventHandler.TwoPointMotionEventCallback
  • type: (Number),输入事件的屏幕空间事件类型(ScreenSpaceEventType)。
  • modifier: ?Number),类型:Number,当 type 中的事件发生时按住的键盘修饰符(KeyboardEventModifier)。
  • @return: (function),要在输入事件上执行的函数。

ScreenSpaceCameraController

屏幕空间事件类型

属性名 类型 描述
lookEventTypes `CameraEventType Array
rotateEventTypes `CameraEventType Array
tiltEventTypes `CameraEventType Array
translateEventTypes `CameraEventType Array
zoomEventTypes `CameraEventType Array

EventHelper

Cesium.EventHelper 是一个辅助类,用于简化在多个事件上附加事件监听器的常见模式,并允许在之后的某个时刻(例如在销毁方法中)一次性移除所有这些监听器。

const helper = new Cesium.EventHelper();

// 实例方法 add, removeAll

//add: 向指定的事件添加一个监听器
helper.add(event: Event, listener: function, scope?: object)  EventHelper.RemoveCallback
//  event: Event - 要附加到的事件。
//  listener: function - 当事件被触发时执行的函数。
//  scope: object (可选) - 一个可选的对象,用作监听器函数执行时的 this 指针。

//removeAll: 用于注销所有之前添加的监听器
helper.removeAll()

在实际应用中,Cesium.EventHelper 类可以极大地简化事件管理,特别是在需要清理资源的情况下。通过使用 add 方法添加监听器,并在适当的时候使用 removeAll 方法移除它们,可以防止内存泄漏和其他潜在的事件处理问题。这种方式也使得代码更加清晰和易于维护。

示例:

// 地球初次加载完成调用
const helper = new Cesium.EventHelper();
const RemoveCallback = helper.add(viewer.scene.globe.tileLoadProgressEvent, (e) => {
    if (e == 0) {
        console.log('onload');
        // 初次加载完成后,删除事件监听
        RemoveCallback();
    }
});

场景触发事件 API

Camera.changed ⭐

readonly changed : Event
获取当相机(camera)被 percentageChanged 改变时触发的事件。简言之,就是当相机发生变化时触发的事件。

示例:

// 监听摄像机属性的变化
viewer.camera.changed.addEventListener(() => {
  // 获取当前地图的缩放级别(zoom 层级)
  const height = viewer.camera.positionCartographic.height;
  console.log('zoom 视图中心位置的高度:', height);
});

Camera.moveStart ⭐

readonly moveStart : Event
获取当相机(camera)开始移动时被触发的事件。

Camera.moveEnd ⭐

readonly moveEnd : Event
获取当相机(camera)停止移动时被触发的事件。

Cesium3DTileset.allTilesLoaded ⭐

allTilesLoaded : Event
此事件触发以指示此帧的所有满足屏幕空间误差的瓦片已加载完毕。此视图的瓦片集(tileset)已完全加载。
此事件在场景渲染后的帧末尾触发。

示例:

tileset.allTilesLoaded.addEventListener(function() {
  console.log('All tiles are loaded');
});

Cesium3DTileset.initialTilesLoaded ⭐

initialTilesLoaded : Event
此事件触发以指示此帧的所有满足屏幕空间误差的瓦片已加载完毕。一旦初始视图加载完成,此事件就被触发。
此事件在场景渲染后的帧末尾触发。

Cesium3DTileset.loadProgress ⭐

loadProgress : Event
此事件触发以指示加载新瓦片(tiles)的进度。此事件在请求新瓦片时,请求的瓦片结束下载时,下载好的瓦片处理完成时和瓦片准备好要渲染时触发。
挂起的瓦片请求数量(numberOfPendingRequests)和处理中的瓦片数量(numberOfTilesProcessing)被传递给事件监听器。
此事件在场景渲染后的帧末尾触发。

示例:

tileset.loadProgress.addEventListener(function(numberOfPendingRequests, numberOfTilesProcessing) {
    if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) {
        console.log('Stopped loading');
        return;
    }

    console.log(`Loading: requests: ${numberOfPendingRequests}, processing: ${numberOfTilesProcessing}`);
});

Cesium3DTileset.tileFailed ⭐

tileFailed : Event
此事件触发以指示一个瓦片内容加载失败。如果没有事件监听器,控制台会打印错误消息。传递给事件监听器的错误对象包含两个属性:

  • url:加载失败的瓦片的url链接地址。
  • message:错误消息。
    如果使用3DTILES_multiple_contents扩展名,则每个内部报错的内容都会触发此事件。

示例:

tileset.tileFailed.addEventListener(function(error) {
    console.log(`An error occurred loading tile: ${error.url}`);
    console.log(`Error: ${error.message}`);
});

Cesium3DTileset.tileLoad ⭐

tileLoad : Event
此事件触发以指示一个瓦片内容已加载。
已加载的Cesium3D瓦片传递给了事件监听器。
在渲染帧时,此事件在遍历瓦片集(tileset)期间被触发,以便对瓦片的更新在同一帧生效。不要在事件监听器期间创建或修改Cesium实体(entity)或原始对象(primitives)。

Cesium3DTileset.tileUnload ⭐

tileUnload : Event
此事件触发以指示一个瓦片内容已卸载。
已卸载的Cesium3D瓦片传递给了事件监听器。
在渲染帧时,此事件在瓦片内容被卸载前立即触发,以便事件监听器能够访问瓦片内容(tile’s content)。不要在事件监听器期间创建或修改Cesium实体(entity)或原始对象(primitives)。

Cesium3DTileset.tileVisible ⭐

tileVisible : Event
此事件为帧中的每一个可见瓦片都触发一次。这可以用于手动设置瓦片集(tileset)的样式。
可见Cesium3D瓦片传递给了事件监听器。
在渲染帧时,此事件在遍历瓦片集(tileset)期间被触发,以便对瓦片的更新在同一帧生效。不要在事件监听器期间创建或修改Cesium实体(entity)或原始对象(primitives)。

示例:

tileset.tileVisible.addEventListener(function(tile) {
    const content = tile.content;
    const featuresLength = content.featuresLength;
    for (let i = 0; i < featuresLength; i+=2) {
        content.getFeature(i).color = Cesium.Color.fromRandom();
    }
});

Clock.onStop

当时间到达 Clock#stopTime 时触发的事件。

Clock.onTick

Clock#tick 函数被调用时触发的事件。Viewer初始化时会绑定clock.onTick事件,确保每一帧都会调用。

DataSource.changedEvent

获取在底层数据更改时触发的事件。

DataSource.errorEvent

获取在处理过程中遇到错误时触发的事件。

DataSource.loadingEvent

获取在数据源开始或停止加载时 (isLoading值发生变化时) 触发的事件。

DataSourceClock.definitionChanged

readonly definitionChanged : Event
获取每当分配新属性时触发的事件。

DataSourceCollection.dataSourceAdded

readonly dataSourceAdded : Event
获取当添加一个数据源(data source)到集合中时触发的事件。被添加的数据源传递给里事件处理程序。

DataSourceCollection.dataSourceMoved

readonly dataSourceMoved : Event
获取当改变一个数据源(data source)的位置时触发的事件。被移动的数据源,移动后的新索引(index)和移动前的旧索引传递给里事件处理程序。

DataSourceCollection.dataSourceRemoved

readonly dataSourceRemoved : Event
获取当移除一个数据源(data source)到集合中时触发的事件。被移除的数据源传递给里事件处理程序。

Entity.definitionChanged ⭐

readonly definitionChanged : Event
获取每当更改或修改属性或子属性时触发的事件。

EntityCluster.clusterEvent

clusterEvent : Event.<EntityCluster.newClusterCallback>
获取当一个新的集群要显示时触发的事件。事件监听器的签名是 EntityCluster.newClusterCallback

EntityCollection.collectionChanged

readonly collectionChanged : Event.<EntityCollection.CollectionChangedEventCallback>
获取在从集合中添加或删除实体时触发的事件。生成的事件是一个 EntityCollection.collectionChangedEventCallback

FrameRateMonitor.lowFrameRate

获取检测到低帧速率时触发的事件。函数接收到的第一个参数是场景实例(Scene instance),第二个参数是采样窗口每秒帧数的平均值。

FrameRateMonitor.nominalFrameRate

获取当帧率在降低后返回到正常水平时引发的事件。函数接收到的第一个参数是场景实例(Scene instance),第二个参数是采样窗口每秒帧数的平均值。

Globe.imageryLayersUpdatedEvent

readonly imageryLayersUpdatedEvent : Event
获取在添加、显示、隐藏、移动或删除影像图层(imagery layer)时触发的事件。

Globe.terrainProviderChanged

readonly terrainProviderChanged : Event
获取在地形提供者发生变化时触发的事件。

ImageryProvider.errorEvent

readonly errorEvent : Event
获取当影像提供者(imagery provider)遇到异步错误时触发的事件。通过订阅此事件,您将收到错误通知,并有可能从中恢复。一个瓦片提供者错误(TileProviderError)实例传递给了事件监听器。

ModelAnimation.start

获取在动画开始时触发的事件。比如说,可以用在动画开始时需要播放声音或启动粒子系统。此事件在帧末尾场景(scene)渲染之后触发。

示例:

animation.start.addEventListener(function(model, animation) {
  console.log(`Animation started: ${animation.name}`);
});

ModelAnimation.stop

获取在动画结束时触发的事件。比如说,可以用在动画结束时需要播放声音或启动粒子系统。此事件在帧末尾场景(scene)渲染之后触发。

ModelAnimation.update

获取在每一帧当动画更新时触发的事件。动画的当前时间(相对于glTF动画时间范围)传递给了事件。例如,我们可以在相对于动画播放的特定时间启动新的动画。

示例:

animation.update.addEventListener(function(model, animation, time) {
  console.log(`Animation updated: ${animation.name}. glTF animation time: ${time}`);
});

ModelAnimationCollection.animationAdded

获取在将动画添加到集合时触发的事件。比如说,可以用在保持UI的同步。

示例:

model.activeAnimations.animationAdded.addEventListener(function(model, animation) {
  console.log(`Animation added: ${animation.name}`);
});

ModelAnimationCollection.animationRemoved

获取在将动画从集合中移除时触发的事件。比如说,可以用在保持UI的同步。

ParticleSystem.complete

获取在粒子系统到达它的生命周期结束时触发的事件。

Property.definitionChanged

readonly definitionChanged : Event
获取当此属性定义发生变化时触发的事件。如果对 getValue 的调用将在同一时间返回不同的结果,则认为定义已更改。

PropertyArray.definitionChanged

readonly definitionChanged : Event
获取当此属性定义发生变化时触发的事件。每当调用 setValue 函数时,如果调用的数据与当前值不同,或者数组中的一个属性也发生了变化,则定义就会发生变化。

PropertyBag.definitionChanged

readonly definitionChanged : Event
获取当此对象中包含的属性集更改或其中一个属性本身发生变化时触发的事件。

Scene.morphStart ⭐

事件发生在一个场景过渡的开始。

Scene.morphComplete ⭐

事件发生在一个场景过渡完成后。

Scene.preUpdate ⭐

readonly preUpdate : Event
获取在场景(scene)更新和场景渲染之前触发的事件。事件的订阅者接收到的第一个参数为场景(Scene)实例,第二个参数为当前时间作。

Scene.postUpdate ⭐

readonly postUpdate : Event
获取在场景(scene)更新后和场景渲染之前立即触发的事件。事件的订阅者接收到的第一个参数为场景(Scene)实例,第二个参数为当前时间作。

Scene.preRender ⭐

readonly preRender : Event
获取在场景(scene)更新后和场景渲染之前触发的事件。事件的订阅者接收到的第一个参数为场景(Scene)实例,第二个参数为当前时间作。

Scene.postRender ⭐

readonly postRender : Event
获取在场景(scene)渲染后立即引发的事件。事件的订阅者接收到的第一个参数为场景(Scene)实例,第二个参数为当前时间作。

Scene.renderError ⭐

readonly renderError : Event
获取当 render 函数中报错时触发的事件。场景实例(scene instance)和抛出的错误是传递给事件处理程序的仅有的两个参数。默认情况下,事件触发后错误会再次抛出,我们也可以通过设置 Scene#rethrowRenderErrors 属性来改变。

Scene.terrainProviderChanged ⭐

readonly terrainProviderChanged : Event
获取当地形提供者(terrain provider)变化时触发的事件。

TerrainProvider.errorEvent

readonly errorEvent : Event.<TerrainProvider.ErrorEvent>
获取当地形提供者(terrain provider)遇到异步错误时触发的事件。通过订阅此事件,您将收到错误通知,并有可能从中恢复。一个瓦片提供者错误(TileProviderError)实例传递给了事件监听器。

Viewer.selectedEntityChanged ⭐

readonly selectedEntityChanged : Event
获取当选择的实体(entity)发生变化时触发的事件。

Viewer.trackedEntityChanged ⭐

readonly trackedEntityChanged : Event
获取当追踪的实体(entity)发生变化时触发的事件。

其他

HeadingPitchRollValues

HeadingPitchRollValues 类表示一个三维旋转,由航向角、俯仰角和滚转角组成。

属性说明

属性名 类型 默认值 描述
heading number 0 航向角,以弧度为单位,范围为[0, 2π]0表示正北,π/2表示正东,π表示正南,3π/2表示正西。
pitch number 0 俯仰角,以弧度为单位,范围为[-π/2, π/2]0表示水平,π/2表示垂直向上,-π/2表示垂直向下。
roll number 0 滚转角,以弧度为单位,范围为[-π, π]0表示没有滚转,π/2表示逆时针旋转90度,-π/2表示顺时针旋转90度。
// 创建一个HeadingPitchRollValues对象
const headingPitchRoll = new Cesium.HeadingPitchRollValues(
  Cesium.Math.toRadians(90), // 航向角,90度
  Cesium.Math.toRadians(30), // 俯仰角,30度
  Cesium.Math.toRadians(45) // 滚转角,45度
);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant