最近有同事反饋有模擬雷達(dá)掃描效果的需求蚌卤,需要表達(dá)雷達(dá)掃描的半徑末早、掃描范圍以及掃描過程動畫啊片,下面將通過使用Cesium原生的橢球體對象來實現(xiàn)赎婚。
1、模擬掃描波瓣
雷達(dá)掃描的形狀類似一個帶有厚度的扇形樱溉,這里剛好可以用球體對象來實現(xiàn)挣输,通過指定球體半徑來模擬掃描半徑,通過設(shè)置橢球的clock屬性來模擬掃描的寬度范圍福贞,通過設(shè)置Cone屬性來表達(dá)掃描的高度范圍撩嚼。
橢球體.png
ellipsoid: {
radii: new Cesium.Cartesian3(50000.0, 50000.0, 50000.0),
innerRadii: new Cesium.Cartesian3(0.1, 0.1, 0.1),
minimumClock: Cesium.Math.toRadians(0.0),
maximumClock: Cesium.Math.toRadians(20.0),
minimumCone: Cesium.Math.toRadians(45.0),
maximumCone: Cesium.Math.toRadians(90.0),
material: Cesium.Color.DARKCYAN.withAlpha(0.3),
outline: false
}
2、掃描動畫
下面利用Cesium的CallbackProperty來制作動畫挖帘,這里就不再贅述绢馍,如果有不理解的地方,可以翻看往期教程肠套。
let start = 0
let aa = viewer.entities.add({
name: 'Wedge',
position: Cesium.Cartesian3.fromDegrees(-102.0, 35.0, 0.0),
orientation: new Cesium.CallbackProperty(function() {
start += 1
let roll = Cesium.Math.toRadians(start)
Cesium.Math.zeroToTwoPi(roll)
return Cesium.Transforms.headingPitchRollQuaternion(
Cesium.Cartesian3.fromDegrees(-102.0, 35.0, 0.0),
new Cesium.HeadingPitchRoll(roll, 0, 0.0)
)
}, false),
ellipsoid: {
radii: new Cesium.Cartesian3(50000.0, 50000.0, 50000.0),
innerRadii: new Cesium.Cartesian3(0.1, 0.1, 0.1),
minimumClock: Cesium.Math.toRadians(0.0),
maximumClock: Cesium.Math.toRadians(20.0),
minimumCone: Cesium.Math.toRadians(45.0),
maximumCone: Cesium.Math.toRadians(90.0),
material: Cesium.Color.DARKCYAN.withAlpha(0.3),
outline: false
},
});
雷達(dá)掃描.gif
為了更好的使用,也對其進(jìn)行了封裝猖任,封裝之后的代碼如下
class radarellipsoid {
constructor(position, color,radii,clockangle,startCone,endCone) {
let start = 0
this.entity =new Cesium.Entity({
position: position,
orientation: new Cesium.CallbackProperty(function () {
start += 1
let roll = Cesium.Math.toRadians(start)
Cesium.Math.zeroToTwoPi(roll)
return Cesium.Transforms.headingPitchRollQuaternion(
position,
new Cesium.HeadingPitchRoll(roll, Cesium.Math.toRadians(10),Cesium.Math.toRadians(6))
)
}, false),
ellipsoid: {
radii: new Cesium.Cartesian3(radii, radii, radii),
innerRadii: new Cesium.Cartesian3(0.1, 0.1, 0.1),
minimumClock: Cesium.Math.toRadians(0.0),
maximumClock: Cesium.Math.toRadians(clockangle),
minimumCone: Cesium.Math.toRadians(startCone),
maximumCone: Cesium.Math.toRadians(endCone),
material: color,
outline: true
},
});
}
}
export default radarellipsoid