点击查看:最新Cesium可视化系统实战视频课程
Cesium 是一个强大的开源 JavaScript 库,用于创建3D地图和可视化。它广泛应用于航天、地理信息系统(GIS)、遥感等领域。CZML(Cesium’s JSON Modeling Language)是Cesium用来描述时空数据的格式,常用于表示物体的运动轨迹、属性和模型。通过CZML,用户能够便捷地控制对象在三维空间中的运动和展示。
本文将介绍如何使用CZML格式在Cesium中实现飞鸟模型沿着轨迹飞行的效果,具体涉及飞鸟模型的创建、轨迹的定义以及模型的动画控制。
一、CZML格式介绍
CZML 是一种基于JSON的格式,专门设计用于描述动态的地理信息数据。它可以包含位置、姿态、材质、标注等多种属性,并支持动态数据的展示和动画效果。CZML通过时间戳来驱动数据的变化,从而实现时空动画的效果。
在Cesium中,CZML是非常强大的数据格式,可以用来定义物体的运动路径、颜色、模型和更多信息。通过CZML,您可以在虚拟地球上模拟复杂的运动、路径和时间序列数据。
二、创建飞鸟模型的CZML数据
在这段示例代码中,我们使用CZML来定义一个飞鸟模型,并让它沿着指定的轨迹飞行。以下是关键的数据结构和设置:
1. CZML的结构
我们定义了一个包含飞鸟模型和路径的CZML数组。这个数组中的每个对象都表示一个实体(如飞鸟模型、轨迹等)。
const czml = [
{
id: "document",
name: "CZML Model",
version: "1.0"
},
{
id: "bird model", // 飞鸟模型的唯一标识符
name: "fly bird", // 飞鸟的名字
availability: "2025-01-01T00:00:00Z/2025-01-01T00:04:00Z", // 飞鸟的时间范围
position: { // 定义飞鸟的位置
epoch: "2025-01-01T00:00:00Z", // 起始时间
cartographicDegrees: [ // 飞鸟路径的经纬度和高度数据
0, 120, 32, 5000,
60, 120, 45, 5000,
120, 130, 45, 5000,
180, 130, 32, 5000,
240, 120, 32, 5000
]
},
model: { // 飞鸟的3D模型设置
gltf: "./model/phoenix_bird.glb", // 3D模型路径
scale: 2.0, // 模型缩放
minimumPixelSize: 128 // 最小像素大小,防止模型缩小消失
},
orientation: { // 飞鸟的朝向设置(注:未启用,可以基于位置更新)
epoch: "2025-01-01T00:00:00Z",
velocityReference: "#position" // 使飞鸟朝向随位置变化
}
},
{
id: "redline",
name: "redline",
polyline: { // 定义轨迹线条
positions: {
cartographicDegrees: [ // 定义轨迹的经纬度和高度
120, 32, 5000,
120, 45, 5000,
130, 45, 5000,
130, 32, 5000,
120, 32, 5000
]
},
width: 5, // 轨迹线的宽度
material: { // 轨迹线的颜色
solidColor: {
color: {
rgba: [255, 0, 0, 255] // 红色
}
}
}
}
}
];
2. 飞鸟模型定义
飞鸟模型的数据包括以下几个关键部分:
- 位置(Position):使用
cartographicDegrees
数组来定义飞鸟沿着轨迹飞行的经纬度和高度。每个点包含经度、纬度、高度和时间点,飞鸟将在这些点之间飞行。 - 模型(Model):模型路径使用
gltf
格式定义。这里我们使用一个名为phoenix_bird.glb
的飞鸟3D模型,并对其进行缩放和像素大小限制。 - 姿态(Orientation):飞鸟的姿态(即飞行方向)与位置相关联,并通过
velocityReference
进行动态控制。在此代码中,飞鸟的朝向随其位置变化而变化。
3. 轨迹(Polyline)
飞鸟的轨迹是通过 polyline
来表示的。轨迹的形状是由一系列的经纬度点构成的,并且使用红色的线条展示。
三、在Cesium中加载CZML数据
在Cesium的场景中加载CZML数据并使飞鸟沿轨迹飞行非常简单。我们通过 Cesium.CzmlDataSource.load()
方法加载CZML数据,并将其添加到视图中。
const dataSourcePromise = viewer.dataSources.add(
Cesium.CzmlDataSource.load(czml)
);
dataSourcePromise.then((dataSource) => {
// 设置视角跟踪飞鸟模型
viewer.trackedEntity = dataSource.entities.getById("bird model");
});
在这段代码中:
viewer.dataSources.add()
方法用于将CZML数据源加载到Cesium的视图中。viewer.trackedEntity
用来指定视角跟随的实体,这里我们指定跟踪bird model
,使得摄像机视角始终跟随飞鸟。
四、效果展示
加载完CZML数据后,飞鸟模型将在给定的轨迹上运动,按照预设的时间段进行飞行。Cesium会根据 availability
属性(飞鸟的起始和结束时间)来控制飞鸟的显示和运动,并根据飞鸟的路径逐帧更新其位置。
五、总结
通过CZML格式,我们可以在Cesium中轻松实现动态模型的轨迹控制和时空动画。本文展示了如何通过CZML定义飞鸟沿着轨迹飞行的效果,并通过Cesium的API将其加载到3D场景中进行展示。除了飞行轨迹,CZML还可以用于控制其他属性如模型颜色、尺寸、旋转等,帮助开发者实现更复杂的时空可视化需求。