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

20250206184823493e813f5b827d37f349ac4a9ff77ad8991Cesium 是一个强大的开源 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还可以用于控制其他属性如模型颜色、尺寸、旋转等,帮助开发者实现更复杂的时空可视化需求。

发表回复

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