点击查看:最新Cesium可视化系统实战视频课程

202502061850445c3f3a4bb090f72fbad1c68ac9818e50652在Cesium中,CZML(Cesium Markup Language)是一种基于JSON格式的标准,用于描述3D地球上动态和静态实体的各种属性。它被广泛用于表示和传输时间变化的数据,如物体的运动轨迹、位置变化、旋转状态等。通过CZML,用户可以轻松地在Cesium中加载复杂的时间动态场景。

本篇文章将详细讲解CZML数据格式,通过分析示例代码来帮助读者更好地理解其组成部分及使用方法。


1. CZML的基本结构

CZML文件的基本结构是一个由多个对象(对象是字典或键值对)组成的数组。每个对象都代表了一个实体或文档元素。最顶层的对象是一个文档对象,包含了整个数据集的配置信息。其他对象则可以表示不同的实体或图层。

例如,示例中的CZML数据由三个主要对象组成:

  1. 文档对象(Document):包含文档的元数据以及全局设置。
  2. 实体对象(CesiumMilkTruck):描述了一个动态模型,包含了模型的几何体、位置和旋转等属性。
  3. 路径对象(Polyline):描述了一个由一系列位置点组成的路径。

2. 文档对象(Document)

文档对象通常是CZML文件的根对象,包含了整个数据的配置项。它通常包含文档的版本信息和一些全局设置(如时钟设置)。

示例分析:


{
  "id": "document",
  "version": "1.0",
  "clock": {
    "interval": "2018-07-19T15:18:00Z/2018-07-19T15:18:30Z",
    "currentTime": "2018-07-19T15:18:00Z",
    "multiplier": 2,
    "range": "LOOP_STOP",
    "step": "SYSTEM_CLOCK_MULTIPLIER"
  }
}


  • id: 标识符,通常设置为document,表示这是文档对象。
  • version: 版本信息,表示CZML文件的版本号。
  • clock: 时钟配置,决定了时间的流动方式及速度。
    • interval: 表示时间的范围,指示数据变化的时间段。
    • currentTime: 当前时间,时钟在这个时刻开始。
    • multiplier: 时间加速因子,这里设置为2,表示时间以2倍速播放。
    • range: 时间范围的循环方式,这里使用的是LOOP_STOP,意味着时间范围循环播放直到停止。
    • step: 时间的步进方式,SYSTEM_CLOCK_MULTIPLIER表示时间步长按照系统时钟的倍数调整。

通过clock对象的配置,可以控制数据的时间动画,例如如何播放、暂停、循环等。


3. 实体对象(CesiumMilkTruck)

实体对象代表一个具体的3D实体(如模型、点、线等),并包括其在空间中的位置、朝向、时间上的动态变化等信息。

示例分析:


{
  "id": "CesiumMilkTruck",
  "model": {
    "gltf": "SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb"
  },
  "position": {
    "interpolationAlgorithm": "LINEAR",
    "forwardExtrapolationType": "HOLD",
    "cartesian": [
      "2018-07-19T15:18:00Z", 
      1216327.3893347275,
      -4736164.778028102,
      4081507.5209477833,
      "2018-07-19T15:18:10Z", 
      1216369.543258349,
      -4736201.237448179,
      4081447.3732212726,
      "2018-07-19T15:18:20Z", 
      1216434.7507773656,
      -4736241.372142024,
      4081386.1802605274,
      "2018-07-19T15:18:30Z",
      1216525.7792628652,
      -4736271.927759278,
      4081319.744558958
    ]
  },
  "orientation": {
    "unitQuaternion": [
      0.3084011337938999,
      0.3210181022701266,
      -0.45850421987074924,
      0.7686388857813198
    ]
  }
}


  • id: 标识符,用于标识实体,这里为CesiumMilkTruck
  • model: 表示模型信息,这里是一个GLTF模型文件CesiumMilkTruck.glb
  • position: 表示实体的位置数据,包括位置的时间动态变化。
    • interpolationAlgorithm: 位置插值算法,LINEAR表示线性插值,实体位置按恒定速度平滑过渡。
    • forwardExtrapolationType: 如果时间超出指定范围,实体将保持在最后位置,这里使用HOLD模式。
    • cartesian: 以笛卡尔坐标表示的位置数据,并结合时间轴表示位置随时间的变化。每一对坐标点对应着一个时间点。
      • 每个位置由时间戳和对应的坐标(X, Y, Z)组成。坐标是3D笛卡尔坐标系中的位置。
  • orientation: 表示实体的朝向信息。
    • unitQuaternion: 以单位四元数表示的旋转状态,定义了实体的空间旋转。

4. 路径对象(Polyline)

路径对象用于表示一条由多个坐标点组成的路径。例如,使用一条路径来展示一个物体的运动轨迹。

示例分析:

json
{
  "id": "Polyline",
  "polyline": {
    "positions": {
      "cartesian": [
        1216327.3893347275,
        -4736164.778028102,
        4081507.5209477833,
        1216369.543258349,
        -4736201.237448179,
        4081447.3732212726,
        1216434.7507773656,
        -4736241.372142024,
        4081386.1802605274,
        1216525.7792628652,
        -4736271.927759278,
        4081319.744558958
      ]
    },
    "material": {
      "polylineOutline": {
        "color": {
          "rgba": [100, 149, 237, 140]
        },
        "outlineWidth": 0
      }
    },
    "width": 12,
    "clampToGround": true
  }
}

json
  • id: 标识符,用于标识路径对象,这里为Polyline
  • polyline: 定义路径的属性。
    • positions: 路径上的位置点,以笛卡尔坐标表示。
    • material: 路径的外观样式,这里使用了带轮廓的折线(polylineOutline),颜色设置为蓝色(RGB: 100, 149, 237)。
    • width: 设置路径的宽度,这里设置为12像素。
    • clampToGround: 设置路径是否贴地,true表示路径将被固定到地面上。

5. 在Cesium中加载CZML数据


const dataSourcePromise = viewer.dataSources.add(
  Cesium.CzmlDataSource.load(czml)
);

dataSourcePromise.then((dataSource) => {
  viewer.trackedEntity = dataSource.entities.getById("CesiumMilkTruck");
});

以上代码展示了如何在Cesium中加载CZML数据。viewer.dataSources.add方法将CZML数据添加到Cesium的视图中,dataSource.entities.getById("CesiumMilkTruck")则用于获取特定的实体对象(在这里是CesiumMilkTruck),并将其设为当前视角追踪的实体。通过此方式,用户可以在Cesium中查看并交互操作动态变化的实体。


6. 总结

CZML格式是Cesium中强大的数据描述工具,能够处理时间动态数据、物体位置、旋转、路径等信息。通过灵活的配置和时间控制功能,CZML为3D地球和空间应用的开发提供了强大的支持。无论是单一实体的运动,还是多个实体之间的复杂交互,CZML都能提供精确而灵活的控制。在实际应用中,通过对CZML的解析与使用,开发者可以实现富有表现力和互动性的3D可视化场景。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注