<meta charset="utf-8">
雷達(dá)掃描的形狀類(lèi)似一個(gè)帶有厚度的扇形,這里剛好可以用球體對(duì)象來(lái)實(shí)現(xiàn),通過(guò)指定球體半徑來(lái)模擬掃描半徑,通過(guò)設(shè)置橢球的clock屬性來(lái)模擬掃描的寬度范圍,通過(guò)設(shè)置Cone屬性來(lái)表達(dá)掃描的高度范圍。

image
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、掃描動(dòng)畫(huà)
下面利用Cesium的CallbackProperty來(lái)制作動(dòng)畫(huà),這里就不再贅述,如果有不理解的地方,可以翻看往期教程。
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
},
});

image
為了更好的使用,也對(duì)其進(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