Skip to main content

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 instance
  • options? - 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)
}