日照分析功能是基于模型展示的。从业务逻辑来,日照分析是建设单位为了确定拟建高层建筑对自身或相邻建筑可能产生的光照影响进行分析,从代码来看,日照分析是利用Cesium自带的时间轴进行动画播放
准备
let stopTime = null
// 关闭地图左键双击事件
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
开始分析
function startAnalyze (Cesium, viewer, stopTime) {
if (viewer.clock.shouldAnimate = !0, stopTime) {
viewer.clock.currenTime = stopTime
} else {
let e = '2022-3-16',
t = new Date(e),
i = '10',
a = '18',
r = new Date(new Date(t).setHours(Number(i))),
o = new Date(new Date(t).setHours(Number(a)))
// 开启日照阴影
viewer.scene.globe.enableLighting = true
viewer.shadows = true
// viewer.clock 获取时间轴
viewer.clock.startTime = Cesium.JulianDate.fromDate(r) // 开始时间
viewer.clock.currenTime = Cesium.JulianDate.fromDate(r) // 当前时间
viewer.clock.stopTime = Cesium.JulianDate.fromDate(o) // 停止时间
viewer.clock.clockRANGE = Cesium.ClockRange.LOOP_STOP // 停止行为
viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER
viewer.clock.multiplier = 1600 // 时钟时要经过的时间,可以为负值
}
}
结束分析
function stopAnalyze (Cesium, viewer, stopTime) {
stopTime = viewer.clock.currenTime // 重置当前时间
viewer.clock.shouldAnimate = !1 // 暂停旋转
// 关闭日照阴影
viewer.scene.globe.enableLighting = false
viewer.shadows = false
}
viewer.clock.currenTime 当前时间
viewer.clock.shouldAnimate 是否开始播放动画