ViewShed 可视域分析
简介
可视域分析用于确定从特定观察点出发,哪些区域是可见的,哪些被地形或建筑物遮挡。在 Cesium 中,该功能可以模拟摄像头、雷达、瞭望塔等视野范围,广泛应用于安防监控、军事侦察、通信信号覆盖、城市规划等场景,帮助用户评估可视区域与遮挡情况。
演练场
引入
ts
import { ViewShed } from "@m-tech/gis-core";
new ViewShed(viewer, options);参数
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
viewer | Viewer | 是 | - | 容器 |
options | ViewShedOptions | 是 | - | 可视域分析配置 |
options.viewPosition | Position | 是 | - | 观测点位置 |
options.viewPositionEnd | Position | 否 | - | 最远观测点位置 |
options.viewDistance | number | 否 | 100 | 观测距离 |
options.viewHeading | number | 否 | 0 | 航向角 |
options.viewPitch | number | 否 | 0 | 俯仰角 |
options.horizontalViewAngle | number | 否 | 90 | 可视域水平夹角 |
options.verticalViewAngle | number | 否 | 60 | 可视域垂直夹角 |
options.visibleAreaColor | Color | 否 | Color.GREEN | 可视区域颜色 |
options.invisibleAreaColor | Color | 否 | Color.RED | 不可视区域颜色 |
options.enabled | boolean | 否 | true | 阴影贴图是否可用 |
options.softShadows | boolean | 否 | true | 是否启用柔和阴影 |
options.size | number | 否 | 1024 | 每个阴影贴图的大小 |
options.showFrustum | boolean | 否 | true | 是否显示视锥框线 |
options.viewAreaOpacity | number | 否 | 0.7 | 可视区域渲染透明度 |
属性
| 属性名 | 类型 | 读/写 | 描述 |
|---|---|---|---|
viewPosition | Position | 读/写 | 观测点位置 |
viewPositionEnd | Position | 读/写 | 最远观测点位置 |
viewDistance | number | 读/写 | 观测距离 |
viewHeading | number | 读/写 | 航向角 |
viewPitch | number | 读/写 | 俯仰角 |
horizontalViewAngle | number | 读/写 | 可视域水平夹角 |
verticalViewAngle | number | 读/写 | 可视域垂直夹角 |
visibleAreaColor | Color | 读/写 | 可视区域颜色 |
invisibleAreaColor | Color | 读/写 | 不可视区域颜色 |
showFrustum | boolean | 读/写 | 是否显示视锥框线 |
viewAreaOpacity | number | 读/写 | 可视区域渲染透明度 |
方法
clear()
清除可视域分析。
示例
ts
import { ViewShed } from "@m-tech/gis-core";
new ViewShed(viewer, {
viewPosition: new Position(122.06127255, 40.74509196, 50), // 观测点位置
viewPositionEnd: new Position(122.0612, 40.745, 100), // 最远观测点位置
viewDistance: 300, // 观测距离
viewHeading: 0, // 航向角
viewPitch: 0, // 俯仰角
horizontalViewAngle: 90, // 可视域水平夹角
verticalViewAngle: 60, // 可视域垂直夹角
visibleAreaColor: new Color(0, 1, 0, 0.5), // 可视区域颜色
invisibleAreaColor: new Color(1, 0, 0, 0.5), // 不可视区域颜色
enabled: true, // 阴影贴图是否可用
});
// 调整观测点位置
viewShed.viewPosition = new Position(122.06127255, 40.74509196, 50);
// 调整最远观测点位置
viewShed.viewPositionEnd = new Position(122.0612, 40.745, 100);
// 调整观测距离
viewShed.viewDistance = 300;
// 调整可视域水平夹角
viewShed.horizontalViewAngle = 90;
// 调整可视域垂直夹角
viewShed.verticalViewAngle = 60;
// 调整可视区域颜色
viewShed.visibleAreaColor = new Color(0, 1, 0, 0.5);
// 调整不可视区域颜色
viewShed.invisibleAreaColor = new Color(1, 0, 0, 0.5);
// 清除可视域分析
viewShed.clear();