跳到主要内容

可视域分析

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()

相关链接