cesium-examples/map/3d/code/roaming.js

160 lines
4.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 路径漫游封装
* roaming.js
*/
/***
* 示例
*
let roaming=new Roaming(this.viewer,{
'modeluri':'model3D/CesiumAir/CesiumAir.gltf',
'time':360,
'Lines':Lines,
'isPathShow':true
})
*
*/
export default class Roaming {
/**
*Creates an instance of Roaming.
* @param {*} viewer 需要传入
* @param {*} options.modeluri 模型的uri 需要传入
* @param {*} options.time 漫游时间 需要传入
* @param {*} options.start 开始节点 不需要传入
* @param {*} options.stop 结束节点 不需要传入
* @param {*} options.Lines 点集合 需要传入
* @param {*} options.isPathShow 路径是否显示 需要传入
* @memberof Roaming
*/
constructor (viewer, options) {
this.viewer = viewer
this.entity = undefined
this.url = options.modeluri
this.time = options.time
this.start = undefined
this.stop = undefined
this.Lines = options.Lines
this.isPathShow = options.isPathShow
this.property = this.ComputeRoamingLineProperty(options.Lines, options.time, options.start)
this.InitRoaming(this.property, this.start, this.stop, this.isPathShow)
}
/**
*
*
* @param {*} Lines 点集合
* @param {*} time 漫游时间
* @param {*} start 开始时间节点
* @returns
* @memberof Roaming
*/
ComputeRoamingLineProperty (Lines, time) {
let property = new Cesium.SampledPositionProperty()
let lineLength = Lines.length
let tempTime = time - time % lineLength
let increment = tempTime / lineLength
let start = Cesium.JulianDate.now()
this.start = start
let stop = Cesium.JulianDate.addSeconds(start, tempTime, new Cesium.JulianDate())
this.stop = stop
this.viewer.clock.startTime = start.clone()
this.viewer.clock.stopTime = stop.clone()
this.viewer.clock.currentTime = start.clone()
this.viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP // Loop at the end
this.viewer.clock.multiplier = 10
for (let i = 0; i < lineLength; i++) {
let time = Cesium.JulianDate.addSeconds(start, i * increment, new Cesium.JulianDate())
let position = Lines[i]
property.addSample(time, position)
}
return property
}
/**
*
*
* @param {*} position computeRoamingLineProperty计算的属性
* @param {*} start 开始时间节点
* @param {*} stop 结束时间节点
* @param {*} isPathShow path路径是否显示
* @memberof Roaming
*/
InitRoaming (position, start, stop, isPathShow) {
this.entity = this.viewer.entities.add({
availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start: start,
stop: stop
})]),
// 位置
position: position,
// 计算朝向
orientation: new Cesium.VelocityOrientationProperty(position),
// 加载模型
model: {
// 模型路径
uri: this.url,
// 模型最小刻度
minimumPixelSize: 64,
maximumSize: 128,
// 设置模型最大放大大小
maximumScale: 200,
// 模型是否可见
show: true,
// 模型轮廓颜色
silhouetteColor: Cesium.Color.WHITE,
// 模型颜色 ,这里可以设置颜色的变化
// color: color,
// 仅用于调试,显示魔仙绘制时的线框
debugWireframe: false,
// 仅用于调试。显示模型绘制时的边界球。
debugShowBoundingVolume: false,
scale: 20,
runAnimations: true // 是否运行模型中的动画效果
},
path: {
resolution: 1,
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.1,
color: Cesium.Color.YELLOW
}),
width: 10,
show: isPathShow
}
})
this.entity.position.setInterpolationOptions({// 点插值
interpolationDegree: 5,
interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
})
this.viewer.trackedEntity = this.entity
}
/**
*漫游的暂停和继续
*
* @param {*} state bool类型 false为暂停ture为继续
* @memberof Roaming
*/
PauseOrContinue (state) {
this.viewer.clock.shouldAnimate = state
}
/**
*改变飞行的速度
*
* @param {*} value 整数类型
* @memberof Roaming
*/
ChangeRoamingSpeed (value) {
this.viewer.clock.multiplier = value
}
/**
*
*取消漫游
* @memberof Roaming
*/
EndRoaming () {
if (this.entity !== undefined) {
this.viewer.entities.remove(this.entity)
}
}
}