可视域分析
DMap3D.analysis.viewshedArea 基于视锥体进行区域可见性分析,在场景中显示可见/不可见区域。
引入
import DMap3D from 'dmap3d'
import * as Cesium from 'cesium'
基本用法
const viewer = new Cesium.Viewer('cesiumContainer')
// 创建可视域分析工具
const viewshedArea = new DMap3D.analysis.viewshedArea(viewer)
// 交互式分析(点击两个点:观察点和方向点)
viewshedArea.startAnalysis()
构造函数
new DMap3D.analysis.viewshedArea(viewer, options?)
参数:
viewer- Cesium.Viewer 实例options?- 可选配置项
Options:
interface ViewshedAreaOptions {
baseColor?: string // 线框颜色
visibleColor?: string // 可见区域颜色
invisibleColor?: string // 不可见区域颜色
visibleColorAlpha?: number // 可见区域透明度(0-1)
invisibleColorAlpha?: number // 不可见区域透明度(0-1)
fovx?: number // 水平视场角(1-130度)
fovy?: number // 垂直视场角(1-179度)
lineWidth?: number // 线框宽度
useLighting?: boolean // 是否使用光照
heightOffset?: number // 观察点高度偏移
showFrustumRefLines?: boolean // 是否显示参考线
}
方法
startAnalysis()
开始交互式分析,用户在场景中点击两个点(观察点和方向点)。
viewshedArea.startAnalysis()
setPositionAnalysis(params)
通过坐标直接设置分析区域,无需交互。
viewshedArea.setPositionAnalysis({
startPosition: [116.4074, 39.9042, 100], // [经度, 纬度, 高度]
endPosition: [116.4174, 39.9142, 50]
})
destroy()
销毁工具并释放资源。
viewshedArea.destroy()
动态属性
分析后可动态调整以下属性:
// 视场角调整
viewshedArea.fovx = 90 // 水平视场角(1-130度)
viewshedArea.fovy = 60 // 垂直视场角(1-179度)
// 范围和角度
viewshedArea.radiusScale = 1.5 // 分析范围缩放
viewshedArea.offsetHeading = 30 // 水平旋转角度
viewshedArea.offsetPitch = -10 // 垂直旋转角度
// 颜色设置
viewshedArea.visibleColor = '#00FF00'
viewshedArea.invisibleColor = '#FF0000'
viewshedArea.visibleColorAlpha = 0.5
viewshedArea.invisibleColorAlpha = 0.5
// 其他
viewshedArea.heightOffset = 1.8 // 观察点高度偏移
viewshedArea.useLighting = true // 使用光照
viewshedArea.showFrustumRefLines = true // 显示参考线
完整示例
const viewer = new Cesium.Viewer('cesiumContainer')
// 创建可视域分析工具
const viewshedArea = new DMap3D.analysis.viewshedArea(viewer, {
fovx: 90,
fovy: 60,
visibleColor: '#00FF00',
invisibleColor: '#FF0000',
visibleColorAlpha: 0.4,
invisibleColorAlpha: 0.4
})
// 通过坐标直接分析
viewshedArea.setPositionAnalysis({
startPosition: [116.4074, 39.9042, 100],
endPosition: [116.4174, 39.9142, 50]
})
// 动态调整参数
viewshedArea.fovx = 120
viewshedArea.offsetHeading = 45
// 销毁
viewshedArea.destroy()