Skip to main content

Area Measurement

DMap3D.measurement.area is used to measure the area of polygon regions.

Import

import DMap3D from 'dmap3d'
import * as Cesium from 'cesium'

Basic Usage

const viewer = new Cesium.Viewer('cesiumContainer')

// Create area measurement tool
const areaTool = new DMap3D.measurement.area(viewer)

// Listen for measurement complete event
areaTool.on('measureComplete', (result) => {
console.log('Area:', result.area, 'square meters')
console.log('Perimeter:', result.perimeter, 'meters')
})

// Start measurement
areaTool.start()

Constructor

new DMap3D.measurement.area(viewer, options?)

Create an area measurement tool instance.

Parameters:

  • viewer - Cesium.Viewer instance
  • options? - Optional configuration

Options:

interface AreaMeasurementOptions {
// Fill color
fillColor?: Cesium.Color

// Outline color
outlineColor?: Cesium.Color

// Outline width
outlineWidth?: number

// Whether to show labels
showLabel?: boolean

// Label font
labelFont?: string

// Label color
labelColor?: Cesium.Color

// Whether to clamp to ground
clampToGround?: boolean
}

Example:

const areaTool = new DMap3D.measurement.area(viewer, {
fillColor: Cesium.Color.RED.withAlpha(0.3),
outlineColor: Cesium.Color.RED,
outlineWidth: 2,
showLabel: true,
clampToGround: true,
})

Methods

start()

Start measurement. Users can click on the map to add vertices, and double-click to complete the measurement.

areaTool.start()

stop()

Stop measurement, but keep the drawn shapes.

areaTool.stop()

clear()

Clear all measurement results.

areaTool.clear()

destroy()

Destroy the tool instance and clean up resources.

areaTool.destroy()

Events

measureStart

Triggered when measurement starts.

areaTool.on('measureStart', () => {
console.log('Measurement started')
})

measureUpdate

Triggered when measurement updates during the process.

areaTool.on('measureUpdate', (result) => {
console.log('Current area:', result.area)
})

measureComplete

Triggered when measurement is completed.

areaTool.on('measureComplete', (result) => {
console.log('Measurement completed')
console.log('Area:', result.area, 'square meters')
console.log('Perimeter:', result.perimeter, 'meters')
console.log('Vertex count:', result.positions.length)
})

Result Object:

interface AreaMeasurementResult {
// Area (square meters)
area: number

// Perimeter (meters)
perimeter: number

// Vertex coordinate array
positions: Cesium.Cartesian3[]

// Geographic coordinate array
coordinates: Array<{
longitude: number
latitude: number
height: number
}>
}

Complete Example

import { useEffect, useRef } from 'react'
import * as Cesium from 'cesium'
import DMap3D from 'dmap3d'

function AreaMeasurement() {
const viewerRef = useRef<Cesium.Viewer | null>(null)
const toolRef = useRef<any>(null)

useEffect(() => {
// Create Viewer
const viewer = new Cesium.Viewer('cesiumContainer', {
terrain: Cesium.Terrain.fromWorldTerrain(),
})
viewerRef.current = viewer

// Create measurement tool
const tool = new DMap3D.measurement.area(viewer, {
fillColor: Cesium.Color.BLUE.withAlpha(0.3),
outlineColor: Cesium.Color.BLUE,
outlineWidth: 3,
showLabel: true,
clampToGround: true,
})
toolRef.current = tool

// Listen for events
tool.on('measureComplete', (result) => {
alert(`Measurement completed!\nArea: ${result.area.toFixed(2)} sq meters\nPerimeter: ${result.perimeter.toFixed(2)} meters`)
})

// Start measurement
tool.start()

return () => {
tool.destroy()
viewer.destroy()
}
}, [])

const handleClear = () => {
toolRef.current?.clear()
toolRef.current?.start()
}

return (
<div>
<div id="cesiumContainer" style={{ width: '100%', height: '100vh' }} />
<button onClick={handleClear} style={{ position: 'absolute', top: 10, left: 10 }}>
Clear and Remeasure
</button>
</div>
)
}

export default AreaMeasurement