Appearance
SpaceSensorEffect 相控阵雷达范围
相控阵雷达探测范围(传感器扫描)效果:在传感器位置渲染探测范围椭球体 + 旋转扫描件,模拟相控阵雷达探测范围与扫描过程。支持半球往复扫描(scan)与三扇叶旋转(fan)两种形态。
能力定位
SpaceSensorEffect 适合:
- 相控阵雷达探测范围可视化:传感器周围半球/椭球覆盖范围示意;
- 电子对抗装备范围示意:探测范围椭球 + 旋转扫描件突出探测态势;
- 多传感器组合展示:多个不同颜色/半径的传感器并行扫描。
与 RadarDomeEffect(雷达穹顶)、RadarSweepEffect(后处理扫描)不同, 本效果是传感器探测范围椭球体,切片/扇叶在椭球表面扫描,强调「覆盖范围」而非「搜索波束」。
构造函数
ts
constructor(options: SpaceSensorEffectOptions)ts
interface SpaceSensorEffectOptions {
position: Cartesian3 // 传感器位置(世界坐标)
variant?: 'scan' | 'fan' // 扫描形态:scan(默认)| fan
color?: Color // 探测范围颜色,默认 Color.YELLOW.withAlpha(0.5)
radius?: number // 扫描球半径(米,scan 变体),默认 200
radii?: Cartesian3 // 椭球三轴半径(fan 变体),默认 (200, 200, 200)
heading?: number // 基准朝向(度,scan 变体),默认 0
speed?: number // 旋转角速度(度/秒),默认 scan=36 / fan=48
}| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
position | Cartesian3 | — | 传感器位置(世界坐标),必填,缺省抛错 |
variant | 'scan' | 'fan' | 'scan' | scan:静态半球 + 单条切片往复扫描;fan:静态椭球 + 三条扇叶旋转 |
color | Color | Color.YELLOW.withAlpha(0.5) | 探测范围与扫描件颜色 |
radius | number | 200 | 扫描球半径(米),仅 scan 变体生效 |
radii | Cartesian3 | (200, 200, 200) | 椭球三轴半径,仅 fan 变体生效 |
heading | number | 0 | 基准朝向(度),仅 scan 变体生效 |
speed | number | scan=36, fan=48 | 旋转角速度(度/秒),墙钟驱动与帧率无关;默认值对应源帧计数换算 |
生命周期
实现 Lifecycle<Viewer> 契约,on/off/destroy 均幂等:
ts
on(viewer: Viewer): void // 创建静态椭球 + 扫描件实体(scan=2 个,fan=4 个)
off(viewer: Viewer): void // 移除本效果创建的全部实体
destroy(viewer: Viewer): void // 等价于 off清理完整性:off/destroy 同时移除静态椭球与全部扫描件实体。源案例实现只提供 closeScan() 单独移除扫描件、静态椭球与实体集合需壳层手动清理,本实现统一收敛到生命周期。
基础示例
scan 变体(半球 + 往复扫描切片,对齐源 Sensor1):
ts
import { SpaceSensorEffect } from '@nexa/gis-cesium'
import { Cartesian3, Color } from 'cesium'
const effect = new SpaceSensorEffect({
position: Cartesian3.fromDegrees(108.60606, 25, 0),
color: Color.MEDIUMTURQUOISE.withAlpha(0.5),
radius: 600,
variant: 'scan',
heading: 0,
speed: 36, // 度/秒
})
effect.on(viewer)fan 变体(椭球 + 三扇叶旋转,对齐源 Sensor2):
ts
import { SpaceSensorEffect } from '@nexa/gis-cesium'
import { Cartesian3, Color } from 'cesium'
const effect = new SpaceSensorEffect({
position: Cartesian3.fromDegrees(108.60606, 25.02, 0),
color: Color.RED.withAlpha(0.2),
radii: new Cartesian3(500, 500, 230),
variant: 'fan',
speed: 48, // 度/秒
})
effect.on(viewer)进阶示例
多传感器不同颜色、不同半径/形态组合展示:
ts
import { SpaceSensorEffect } from '@nexa/gis-cesium'
import { Cartesian3, Color } from 'cesium'
const scans = [
{ pos: Cartesian3.fromDegrees(108.60606, 25, 0), radius: 600, color: Color.MEDIUMTURQUOISE },
{ pos: Cartesian3.fromDegrees(108.63655, 25, 0), radius: 600, color: Color.DARKSEAGREEN, heading: 90 },
].map(cfg => {
const fx = new SpaceSensorEffect({
position: cfg.pos,
radius: cfg.radius,
color: cfg.color.withAlpha(0.5),
variant: 'scan',
heading: cfg.heading,
})
fx.on(viewer)
return fx
})
const fans = [
{ pos: Cartesian3.fromDegrees(108.60606, 25.02, 0), color: Color.RED },
{ pos: Cartesian3.fromDegrees(108.63655, 25.02, 0), color: Color.CADETBLUE },
].map(cfg => {
const fx = new SpaceSensorEffect({
position: cfg.pos,
radii: new Cartesian3(500, 500, 230),
color: cfg.color.withAlpha(0.2),
variant: 'fan',
})
fx.on(viewer)
return fx
})
// 演示到期后统一销毁,释放全部实体
window.setTimeout(() => {
scans.forEach(fx => fx.destroy(viewer))
fans.forEach(fx => fx.destroy(viewer))
}, 120000)实现说明
- scan 变体:静态半球(
maximumCone = 90°,地平线以上)+ 单条旋转切片 (innerRadii ≈ 0.001极薄壳层、minimumClock/maximumClock = ±0.00001极窄开角、minimumCone = -90°、maximumCone = 90°)。切片绕滚转轴在 -90°↔90° 间锯齿复位:phaseDeg = -90 + (elapsedSec * speed) % 180,对齐源roll += 0.6; roll > 90 && (roll = -90)。 - fan 变体:静态椭球(三轴
radii)+ 三条窄扇叶(0°/120°/240° 起始,minimumCone = 75°、maximumCone = 90°),绕航向轴匀速旋转:headingDeg = (startHeading + elapsedSec * speed) % 360。 - 墙钟驱动:旋转由
Date.now()驱动(与 RadarSweepEffect 一致),speed单位为度/秒、与帧率解耦;默认值对应源帧计数换算(scan 0.6°/帧、fan 0.8°/帧 @60fps)。 - 资源所有权:本效果创建的全部实体由
off/destroy移除,创建方无需单独清理。
清理责任
ts
effect.destroy(viewer) // 或 effect.off(viewer),等价且幂等重复调用 destroy/off 安全(无实体时为空操作)。
Cesium 版本限制
- 依赖 Cesium
Entity.ellipsoid(EllipsoidGraphics)与orientation: CallbackProperty; - 已验证目标版本:Cesium 1.133.1。