GMT、UTC 时间标准
GMT(格林威治标准时间)曾经是世界标准时,但随着时间的推移,UTC(协调世界时)取代了GMT成为现在的世界标准时。UTC比GMT更加精准,因为它基于原子时,并通过闰秒来确保与天文时间的同步。在不需要精确到秒的应用中,GMT和UTC通常可以视为等同。
Cesium 中的时间处理
Cesium 使用 JulianDate
来表示时间,它基于儒略历,并精确到秒。在Cesium中,JulianDate
默认使用UTC时间标准。
JavaScript 中的时间处理
在JavaScript中,Date
对象通常表示本地时间,但也可以用于表示UTC时间。默认情况下,当使用 new Date()
创建日期对象时,它使用本地时区。然而,JavaScript也提供了方法来处理UTC时间,例如 Date.UTC()
和日期对象的 getUTCHours()
、getUTCMinutes()
等方法。
时间格式转换
当需要将北京时间(或其他时区的时间)转换为UTC时间以在Cesium中使用时,可以这样做:
javascriptlet bj_time = new Date("2024/4/15 10:00:00"); // 假设这是北京时间
// 转换为UTC时间(如果bj_time是本地时间)
let utc_offset = bj_time.getTimezoneOffset() * 60000; // 获取时区偏移量(以毫秒为单位)
let utc_time = new Date(bj_time.getTime() - utc_offset);
// 将UTC时间转换为Cesium的JulianDate
let cesium_utc_time = Cesium.JulianDate.fromDate(utc_time);
viewer.clock.currentTime = cesium_utc_time; // 设置Cesium的当前时间
JulianDate 的使用
JulianDate
是Cesium中用于表示时间的类,它有两个主要属性:dayNumber
和 secondsOfDay
。可以使用 JulianDate.addSeconds()
方法在给定的 JulianDate
上增加秒数。
javascriptlet currentTime = Cesium.JulianDate.addSeconds(Cesium.JulianDate.now(), 500, new Cesium.JulianDate());
// currentTime 现在表示当前时间增加500秒后的时间
SampledPositionProperty 用于动画
SampledPositionProperty
类允许你为Cesium中的模型定义随时间变化的位置。你可以通过添加样本点来定义模型在不同时间的位置。
javascriptvar property = new Cesium.SampledPositionProperty();
for (var z = 0; z < moveData.length; z++) {
var item = moveData[z];
var thisTime = Cesium.JulianDate.fromDate(new Date(item.time)); // 假设item.time是字符串格式的日期
var position = Cesium.Cartesian3.fromDegrees(item.position.longitude, item.position.latitude, item.position.height); // 假设position包含经纬度和高度
property.addSample(thisTime, position);
}
Cesium 时钟事件监听
你可以使用 viewer.clock.onTick
事件来监听Cesium时钟的“滴答”事件,并在每帧中执行自定义逻辑。同样,你可以使用 removeEventListener
来移除之前添加的事件监听器。
javascriptfunction checkIfAnimationEnded() {
// 你的逻辑代码
}
viewer.clock.onTick.addEventListener(checkIfAnimationEnded); // 添加监听器
// ...
viewer.clock.onTick.removeEventListener(checkIfAnimationEnded); // 移除监听器
viewer.clock.shouldAnimate = true; // 启用时钟动画
viewer.clock.shouldAnimate = false; // 暂停时间