在学习这个案例之前,先花一点时间了解一下什么是CZML
CZML Structure · AnalyticalGraphicsInc/czml-writer Wiki (github.com)
Cesium Language (CZML) 入门1 — CZML Structure(CZML的结构) - laixiangran - 博客园
CZML是JSON得一个子集,这意味着有效得CZML文档也是JSON文档,CZML文档包含一个JSON数组,其中数组中得每一个对象都是一个CZML数据包。
然后创建一个项目:先看一下代码
这些代码已经可以加载出来一个运行得小车了。但是此时小车处于一个什么状态呢,就是处于地图上得一个点,距离我们得视觉感觉特别远,下面我们继续优化代码,将小车调整到我们得视觉课时范围内。
加上这一句代码之后,再次刷新界面,小车就直接出现在最前端了。
if (!viewer.trackedEntity) {viewer.trackedEntity = vehicleEntity = dataSource.entities.getById("Vehicle");}
因为我们使用得是多个part,我们做个提示显示当前用的是那个part。
//用来显示当前使用得是哪一个partfunction updateStatusDisplay() {let msg = "";//循环判断当前part是否加载成功,已经加载得显示为loaded 没有加载得显示为not needed yetpartsToLoad.forEach(function (part) {msg += `${part.url} - `;if (part.loaded) {msg += "Loaded.
";} else if (part.requested) {msg += "Loading now...
";} else {msg += "Not needed yet.
";}});//将字符串赋值给htmlstatusDisplay.innerHTML = msg;}
现在得代码我们已经实现加载一个part得方法,因为我们要加载多个part。下面我们就要使用Viewer里面时钟得ontrick事件
viewer.clock.onTick.addEventListener(function(clock){})
这个事件是一直被触发得,我们现在要给这个事件添加条件,当第一个part运行快结束得时候,加载出来第二个part
viewer.clock.onTick.addEventListener(function(clock){//计算提供的实例之间的时间差(以秒为单位)。const timeOffset = Cesium.JulianDate.secondsDifference(clock.currentTime,//当前时间clock.startTime //开始时间);//过滤掉使用过的part 然后加载新的part //过滤条件 //比如第一个part得时候,因为已经请求成功 part.requested=truepartsToLoad.filter(function (part) {return (!part.requested &&timeOffset >= part.range[0] - preloadTimeInSeconds &&timeOffset <= part.range[1]);}).forEach(function (part) {processPart(part);});if (vehicleEntity) {const fuel = vehicleEntity.properties.fuel_remaining.getValue(clock.currentTime);if (Cesium.defined(fuel)) {fuelDisplay.textContent = `Fuel: ${fuel.toFixed(2)} gal`;}}})
代码地址在:https://gitee.com/parrotfamily/cesium-study/tree/master/Multi-part%20CZML
上一篇:Html-背景属性
下一篇:Mvvm中的Lifecycle