You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无报错衔接不同时间区间的CZML多边形实时展示

解决CZML时间区间衔接报错的方案

问题根源

这个报错的本质是文档的clock时间区间和population_sampled属性的采样时间范围不匹配。当Cesium尝试在clock指定的区间内插值采样数据时,如果采样数据的时间范围完全落在clock区间之外,或者两者没有重叠,就会出现归一化结果为NaN的错误。

解决办法

1. 严格对齐时间范围

每次生成新CZML时,必须保证:

  • document.clock.interval的起止时间,和population_sampled.number里的时间戳范围完全一致
  • 比如切换到2:00-3:00的区间时,TotalDate2要设成对应区间的ISO格式字符串,同时date_re1和date_re2也要改成这个区间的起止时间,和采样值对应上

2. 切换CZML时手动重置时钟

加载新CZML前,先重置Cesium时钟,避免旧状态干扰:

// 假设viewer是你的Cesium实例
viewer.clock.stop();
viewer.clock.currentTime = Cesium.JulianDate.fromIso8601(newCZML[0].clock.currentTime);
viewer.clock.multiplier = newCZML[0].clock.multiplier;
viewer.clock.interval = Cesium.TimeInterval.fromIso8601(newCZML[0].clock.interval);
// 再加载新的CZML
viewer.dataSources.add(Cesium.CzmlDataSource.load(newCZML));

3. 给采样数据加边界点

如果没法保证时间完全对齐,可以在采样数据的首尾加上和clock区间一致的边界点,确保插值时有有效数据:
比如clock区间是2:00-3:00,population_sampled.number可以这么写:

number: [
  "202X-XX-XXT02:00:00Z", result6[0], // 区间起点
  "202X-XX-XXT02:30:00Z", result6[1], // 中间数据
  "202X-XX-XXT03:00:00Z", result6[2]  // 区间终点
]

这样就算时钟走到区间两端,也能拿到有效数值,不会出现NaN。

4. 统一时间格式

所有时间戳都用ISO 8601格式(比如YYYY-MM-DDTHH:mm:ssZ),避免Cesium解析时间出错,导致范围判断偏差。

验证方式

改完后切换CZML时,可以这么确认:

  • 在浏览器控制台打印viewer.clock.interval和采样数据的时间范围,检查是否重叠
  • 观察多边形高度是否正常变化,控制台有没有报错

内容的提问来源于stack exchange,提问作者chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:22:50