Line-of-Sight Analysis
DMap3D.analysis.viewshed is used to analyze whether two points are mutually visible (ray detection).
Import
import DMap3D from 'dmap3d'
import * as Cesium from 'cesium'
Basic Usage
const viewer = new Cesium.Viewer('cesiumContainer')
// Create line-of-sight analysis tool
const viewshed = new DMap3D.analysis.viewshed(viewer)
// Listen for analysis complete event
viewshed.onAnalysisEnd((result) => {
console.log('Is visible:', result.isVisible)
if (!result.isVisible && result.intersectionPoint) {
console.log('Occlusion point:', result.intersectionPoint)
}
})
// Activate analysis (left-click two points)
viewshed.activate()
Constructor
new DMap3D.analysis.viewshed(viewer, options?)
Parameters:
viewer- Cesium.Viewer instanceoptions?- Optional configuration
Options:
interface ViewshedOptions {
colors?: {
visibleLine?: string // Visible segment color
invisibleLine?: string // Invisible segment color
}
}
Methods
activate()
Activate line-of-sight analysis. The user left-clicks two points in the scene (observer point and target point) to perform the analysis.
viewshed.activate()
deactivate()
Deactivate analysis, keeping existing results.
viewshed.deactivate()
clear()
Clear all analysis results.
viewshed.clear()
destroy()
Destroy the tool and release resources.
viewshed.destroy()
onAnalysisEnd(callback)
Register analysis complete callback.
viewshed.onAnalysisEnd((result) => {
console.log('Is visible:', result.isVisible)
console.log('Start point:', result.startPoint)
console.log('End point:', result.endPoint)
if (result.intersectionPoint) {
console.log('Occlusion intersection:', result.intersectionPoint)
}
})
Analysis Result
interface ViewshedResult {
isVisible: boolean // Whether visible
startPoint: Cesium.Cartesian3 // Start point coordinate
endPoint: Cesium.Cartesian3 // End point coordinate
intersectionPoint?: Cesium.Cartesian3 // Occlusion intersection (when not visible)
}