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