当前位置: 首页 > news >正文

Cesium快速入门到精通系列教程八:时间系统

Cesium 1.93 的时间系统是其实现动态数据可视化的关键组成部分,通过该系统可在三维场景基础上增加时间维信息,生成 “四维” 场景。

一、时间表示核心:JulianDate类

Cesium使用​​儒略日期(Julian Date)​​ 作为时间基准,通过JulianDate类实现高精度天文计时。其结构包含两个关键属性:

  • dayNumber​​:从公元前4713年1月1日(儒略日起点)起算的总天数。
  • secondsOfDay​​:当前日内已流逝的秒数(从午夜0点计算)。

示例代码​​:

const currentTime = Cesium.JulianDate.now(); // 获取当前时间(UTC)
const isoTime = Cesium.JulianDate.toIso8601(currentTime); // 转为ISO 8601格式字符串

优势:避免公历(Gregorian)的闰年/时区问题,适用于全球空间数据同步。

二、时间推进机制:Clock系统

Clock对象控制场景时间流速与范围,通过tick()方法驱动帧更新:

  • multiplier​​:时间流速乘数(默认1.0)。

        例:viewer.clock.multiplier = 3600; 表示每帧推进1小时(模拟加速)。

  • shouldAnimate​​:布尔值,控制是否自动播放时间动画。
  • ​​clockRange​​:设置时间循环行为(如LOOP_STOP到达终点后重置)。

​​时间更新流程​​:

三、时间轴控制:TimeLine组件

可视化交互组件,需在Viewer初始化时启用:

const viewer = new Cesium.Viewer('container', {timeline: true,  // 显示时间轴animation: true  // 显示播放控件
});

关键操作​​:

  • viewer.timeline.zoomTo(start, end):缩放到指定时间区间。
  • 与Clock联动:拖动时间轴触发currentTime更新,驱动场景动态渲染(如卫星轨道移动)。

四、应用场景与开发实践

1​​、动态数据可视化​​

  • 气象/交通等时序数据:通过SampledPositionProperty绑定实体位置随时间变化。
  • 示例:卫星轨道根据预设时间路径运动:
const positionProperty = new Cesium.SampledPositionProperty();
positionProperty.addSample(time, cartesian3); // 添加时间-位置关键帧
entity.position = positionProperty; // 实体绑定时间属性

2、​​光照与昼夜模拟​​

启用地球光照并关联时钟,实现自动昼夜交替:

viewer.scene.globe.enableLighting = true; // 光照随太阳角度变化[2](@ref)

3、性能优化建议​​

  • 减少高频时间更新:对静态实体禁用shouldAnimate。
  • 使用ClockStep.SYSTEM_CLOCK_MULTIPLIER避免帧率波动导致时间失真。

五、完整实例

<template><div id="cesiumContainer"></div><input type="range" id="speedSlider" min="1" max="100" value="36">
</template><script setup>
Cesium.Ion.defaultAccessToken = '默认defaultAccessToken'
import { onMounted } from "vue";
import * as Cesium from "cesium";
import "./Widgets/widgets.css";window.CESIUM_BASE_URL = "/"; // 设置Cesium静态资源路径(public目录)onMounted(async () => {const viewer = new Cesium.Viewer("cesiumContainer", {timeline: true,  // 显示时间轴animation: true  // 显示播放控件[1,3](@ref)});// 设置时间范围(UTC时间)const startTime = Cesium.JulianDate.fromIso8601('2025-01-01T00:00:00Z');const endTime = Cesium.JulianDate.addDays(startTime, 1, new Cesium.JulianDate()); // 增加1天// 配置时钟参数viewer.clock.startTime = startTime.clone();viewer.clock.stopTime = endTime.clone();viewer.clock.currentTime = startTime.clone();viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; // 循环播放至结束时间后重置[1,3](@ref)viewer.timeline.zoomTo(startTime, endTime); // 时间轴缩放至指定范围// 设置时间流速:每帧推进1小时(3600秒/帧)viewer.clock.multiplier = 3600;viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; // 基于系统时钟步进[1,6](@ref)// 动态调整流速(例如通过滑块交互)document.getElementById('speedSlider').addEventListener('input', (e) => {viewer.clock.multiplier = e.target.value * 1000; // 根据滑块值调整倍率[2](@ref)});// 创建实体(红色点)const entity = viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(116.4, 39.9),point: { pixelSize: 50, color: Cesium.Color.RED }});// 绑定时间变化事件:颜色随进度渐变viewer.clock.onTick.addEventListener(clock => {const elapsed = Cesium.JulianDate.secondsDifference(clock.currentTime, startTime);const total = Cesium.JulianDate.secondsDifference(endTime, startTime);const hue = (elapsed / total) * 360; // 计算色相值entity.point.color = Cesium.Color.fromHsl(hue / 360, 1.0, 0.5); // 更新颜色[3](@ref)});viewer.flyTo(entity);
})</script><style scoped>
* {margin: 0;padding: 0;
}#cesiumContainer {width: 100wh;height: 100vh;
}#speedSlider{position: fixed;top: 20px;left: 20px;
}
</style>

时间轴交互​​:显示从2025-01-01开始的时间轴,支持拖动查看不同时间点
​​加速模拟​​:通过滑块调整时间流速(值越大动画越快)
​​动态实体​​:点的颜色从红色渐变至青色,反映时间进度
​​循环播放​​:时间到达结束点后自动重置到起点

总结

Cesium 1.93的时间系统以JulianDate为基石,通过Clock驱动场景动态变化,结合TimeLine提供用户交互能力,完美支撑了地球科学可视化、实时模拟等复杂需求。开发者需掌握时间属性绑定与流速控制,以实现流畅的时空动态效果。 

相关文章:

  • Razor编程RenderXXX相关方法大全
  • ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载
  • Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
  • 异步跟栈 webpack
  • 【Elasticsearch】映射:fielddata 详解
  • Linux云原生架构:从内核到分布式系统的进化之路
  • 深入解析 Qwen3-Embedding 的模型融合技术:球面线性插值(Slerp)的应用
  • 信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
  • 第1课、LangChain 介绍
  • 风控系统中常用的概念和架构学习
  • uni-app学习笔记三十三--触底加载更多和下拉刷新的实现
  • Linux性能调优:从内核到应用的极致优化
  • <3>-MySQL表的操作
  • unity ngui button按钮点击时部分区域响应,部分区域不响应
  • unity实现自定义粒子系统
  • 【无人机】地面站crazyfile-cfclient免安装方法,Python3.10的整体环境配置打包
  • 支付系统架构图
  • 【设计模式】1.简单工厂、工厂、抽象工厂模式
  • jmeter聚合报告中参数详解
  • 重新定义 AI 协同:三款开源 MCP 工具开启智能体从“聊天”到“操控”
  • 西安市规划建设局网站/爱站网关键词挖掘查询
  • 电脑自带的做网站叫什么软件/怎样自己制作网站
  • 太原医疗网站建设/软文的概念是什么
  • 设计与制作/seo团队
  • 小说网站 做百度联盟/深圳网站设计知名乐云seo
  • 提供企业网站建设公司/建网站需要什么条件