Skip to content

RadarDomeEffect 雷达穹顶扫描

半椭球穹顶 + 旋转扫描切片效果,用于雷达 / 传感器探测范围可视化。在雷达站位置渲染一个地平线以上的半椭球穹顶,穹顶表面有一条窄扇形切片绕垂直轴持续旋转,模拟雷达探测范围与扫描过程。


能力定位

RadarDomeEffect 适合:

  • 雷达 / 传感器探测范围可视化:雷达站周围半椭球覆盖范围示意;
  • 预警区域扫描演示:旋转切片表示扫描线,突出探测方位;
  • 通信基站覆盖示意:类穹顶覆盖的多站组合展示。

CircleWaveEffect(平面波纹)、CircleSpreadScanEffect(平面扩散扫描)不同, 本效果是三维半椭球穹顶,覆盖在雷达站上方,切片绕垂直轴 360° 旋转。

构造函数

ts
constructor(options: RadarDomeEffectOptions)
ts
interface RadarDomeEffectOptions {
  position: Cartesian3  // 雷达位置(世界坐标)
  radius?: number       // 穹顶半径(米),默认 200
  color?: Color         // 颜色,默认 Color.GREEN
  scanSpeed?: number    // 扫描切片旋转角速度(度/帧),默认 0.6
}
参数类型默认值描述
positionCartesian3雷达位置(世界坐标),必填,缺省抛错
radiusnumber200穹顶半径(米),椭球三轴半径一致
colorColorColor.GREEN穹顶与切片材质颜色
scanSpeednumber0.6扫描切片旋转角速度(度/帧)

生命周期

实现 Lifecycle<Viewer> 契约,on/off/destroy 均幂等:

ts
on(viewer: Viewer): void      // 创建静态穹顶 + 旋转切片两个 ellipsoid 实体
off(viewer: Viewer): void     // 移除本效果创建的全部实体(穹顶 + 切片)
destroy(viewer: Viewer): void // 等价于 off

清理完整性off/destroy 同时移除静态穹顶与旋转切片两个实体。源案例实现只移除 旋转切片、泄漏静态穹顶,本实现修复该缺陷。

基础示例

ts
import { RadarDomeEffect } from '@nexa/gis-cesium'
import { Cartesian3, Color } from 'cesium'

const effect = new RadarDomeEffect({
  position: Cartesian3.fromDegrees(120, 30, 0),
  radius: 300,
  color: Color.GREEN.withAlpha(0.35),
  scanSpeed: 0.8, // 扫描切片旋转角速度(度/帧)
})
effect.on(viewer)

进阶示例

多雷达不同颜色、不同半径组合展示:

ts
import { RadarDomeEffect } from '@nexa/gis-cesium'
import { Cartesian3, Color } from 'cesium'

const domes = [
  { pos: Cartesian3.fromDegrees(120, 30, 0), radius: 300, color: Color.GREEN },
  { pos: Cartesian3.fromDegrees(119.92, 30.05, 0), radius: 180, color: Color.CYAN },
  { pos: Cartesian3.fromDegrees(120.08, 30.04, 0), radius: 150, color: Color.ORANGE },
].map((cfg) => {
  const fx = new RadarDomeEffect({
    position: cfg.pos,
    radius: cfg.radius,
    color: cfg.color.withAlpha(0.3),
  })
  fx.on(viewer)
  return fx
})

// 演示到期后统一销毁,释放全部实体(穹顶 + 切片)
window.setTimeout(() => {
  domes.forEach(fx => fx.destroy(viewer))
}, 120000)

实现说明

  • 静态穹顶ellipsoid 实体,maximumCone = 90°,仅渲染地平线以上的半椭球, 开启轮廓线(outline: true,不透明度 1)增强边界辨识;
  • 旋转切片:第二个 ellipsoid 实体,innerRadii ≈ 0.001(极薄壳层)、 minimumClock/maximumClock = ±0.00001(极窄开角切片)、maximumCone = 90°; 通过 orientation: CallbackProperty 驱动 headingPitchRollQuaternion 每帧递增 scanSpeed 度(累计超过 360° 归零),实现绕垂直轴旋转;
  • 资源所有权:本效果创建的全部实体由 off/destroy 移除,创建方无需单独清理。

清理责任

ts
effect.destroy(viewer) // 或 effect.off(viewer),等价且幂等

重复调用 destroy/off 安全(无实体时为空操作)。

Cesium 版本限制

  • 依赖 Cesium Entity.ellipsoidEllipsoidGraphics)与 orientation: CallbackProperty
  • 已验证目标版本:Cesium 1.133.1。