Skip to content

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
}
参数类型默认值描述
positionCartesian3传感器位置(世界坐标),必填,缺省抛错
variant'scan' | 'fan''scan'scan:静态半球 + 单条切片往复扫描;fan:静态椭球 + 三条扇叶旋转
colorColorColor.YELLOW.withAlpha(0.5)探测范围与扫描件颜色
radiusnumber200扫描球半径(米),仅 scan 变体生效
radiiCartesian3(200, 200, 200)椭球三轴半径,仅 fan 变体生效
headingnumber0基准朝向(度),仅 scan 变体生效
speednumberscan=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.ellipsoidEllipsoidGraphics)与 orientation: CallbackProperty
  • 已验证目标版本:Cesium 1.133.1。