Slope Analysis Example
This example demonstrates how to perform terrain slope analysis using the DMap3D SDK, displaying terrain steepness with color gradients.
Preview
Display slope magnitude on the terrain using different colors, with darker colors for steep areas and lighter colors for gentle areas.
Complete Code
src/components/SlopeAnalysis.tsx
import { useEffect, useRef, useState } from 'react'
import * as Cesium from 'cesium'
import DMap3D from 'dmap3d'
import './SlopeAnalysis.css'
function SlopeAnalysis() {
const containerRef = useRef<HTMLDivElement>(null)
const viewerRef = useRef<Cesium.Viewer | null>(null)
const toolRef = useRef<any>(null)
const [isVisible, setIsVisible] = useState(false)
useEffect(() => {
if (!containerRef.current) return
Cesium.Ion.defaultAccessToken = 'your-cesium-ion-token'
const viewer = new Cesium.Viewer(containerRef.current, {
animation: false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
selectionIndicator: false,
timeline: false,
navigationHelpButton: false,
infoBox: false,
baseLayerPicker: false,
terrain: Cesium.Terrain.fromWorldTerrain(),
})
viewerRef.current = viewer
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(86.925, 27.988, 30000),
orientation: {
heading: Cesium.Math.toRadians(0),
pitch: Cesium.Math.toRadians(-60),
roll: 0,
},
})
// Create slope analysis tool
const tool = new DMap3D.analysis.slopAnalyse(viewer, {
color: '#0015ff',
})
toolRef.current = tool
return () => {
tool.destroy()
viewer.destroy()
}
}, [])
const handleToggle = () => {
const tool = toolRef.current
if (!tool) return
if (isVisible) {
tool.hide()
} else {
tool.show()
}
setIsVisible(!isVisible)
}
const handleClear = () => {
toolRef.current?.hide()
setIsVisible(false)
}
return (
<div className="slope-analysis-page">
<div ref={containerRef} className="cesium-container" />
<div className="control-panel">
<h3>Slope Analysis</h3>
<p>Display terrain steepness with colors</p>
<div className="buttons">
<button onClick={handleToggle}>
{isVisible ? 'Hide Slope' : 'Show Slope'}
</button>
<button onClick={handleClear}>Clear</button>
</div>
<div className="legend">
<h4>Slope Guide</h4>
<table>
<thead>
<tr><th>Slope Range</th><th>Terrain Type</th></tr>
</thead>
<tbody>
<tr><td>0 deg - 5 deg</td><td>Flat terrain</td></tr>
<tr><td>5 deg - 15 deg</td><td>Gentle slope</td></tr>
<tr><td>15 deg - 25 deg</td><td>Moderate slope</td></tr>
<tr><td>25 deg - 45 deg</td><td>Steep slope</td></tr>
<tr><td>> 45 deg</td><td>Very steep / Cliff</td></tr>
</tbody>
</table>
</div>
</div>
</div>
)
}
export default SlopeAnalysis
Stylesheet
src/components/SlopeAnalysis.css
.slope-analysis-page { position: relative; width: 100%; height: 100vh; }
.cesium-container { width: 100%; height: 100%; }
.control-panel {
position: absolute; top: 20px; right: 20px;
background: rgba(255, 255, 255, 0.95); padding: 20px;
border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); min-width: 250px;
}
.control-panel h3 { margin: 0 0 10px 0; font-size: 18px; }
.control-panel p { margin: 0 0 15px 0; color: #666; font-size: 14px; }
.buttons { display: flex; gap: 10px; margin-bottom: 15px; }
.buttons button {
flex: 1; padding: 8px 16px; border: none; border-radius: 4px;
background: #1890ff; color: white; cursor: pointer; font-size: 14px;
}
.buttons button:hover { background: #40a9ff; }
.legend { border-top: 1px solid #e8e8e8; padding-top: 15px; }
.legend h4 { margin: 0 0 8px 0; font-size: 14px; color: #666; }
.legend table { width: 100%; border-collapse: collapse; font-size: 13px; }
.legend th, .legend td { padding: 6px 8px; border: 1px solid #e8e8e8; text-align: left; }
.legend th { background: #fafafa; color: #666; }
Key Code Explanation
1. Create Slope Analysis Tool
const tool = new DMap3D.analysis.slopAnalyse(viewer, {
color: '#0015ff', // Base color
})
2. Show/Hide
tool.show() // Show slope analysis
tool.hide() // Hide slope analysis
Slope analysis is implemented through Shader coloring and does not require interactive drawing of areas. It takes effect on the global terrain directly.