console
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>填挖方分析</title>
<script src="https://cesiumjs.org/releases/1.57/Build/Cesium/Cesium.js"></script>
<link href="https://cesiumjs.org/releases/1.57/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
<style>
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #000000;
}
</style>
</head>
<body>
<div id="cesiumContainer">
</div>
<script>
Cesium.Ion.defaultAccessToken = 'your access token';
var terrainProvider = Cesium.createWorldTerrain({
requestWaterMask: true,
requestVertexNormals: true
});
var viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider: new Cesium.UrlTemplateImageryProvider({
url: 'http://www.google.cn/maps/vt?lyrs=s@716&x={x}&y={y}&z={z}'
}),
terrainProvider: terrainProvider
});
viewer.scene.globe.depthTestAgainstTerrain = true;
var excavateHeight = 2300;
var buryHeight = 6000;
var scope = [
Cesium.Cartesian3.fromDegrees(99, 29),
Cesium.Cartesian3.fromDegrees(100, 29),
Cesium.Cartesian3.fromDegrees(100, 30),
Cesium.Cartesian3.fromDegrees(99, 30)
];
var entity = viewer.entities.add({
polygon: {
hierarchy: scope,
height: buryHeight,
extrudedHeight: excavateHeight,
material: Cesium.Color.RED.withAlpha(0.5),
outline: true,
closeTop: false
}
});
viewer.trackedEntity = entity;
function calc() {
var subdivisionCell = 0.01;
var subRectangles = [];
for (var i = 99; i <= 100; i = i + subdivisionCell) {
for (var j = 29; j <= 30; j = j + subdivisionCell) {
var subRectangle = new Cesium.Rectangle(
Cesium.Math.toRadians(i),
Cesium.Math.toRadians(j),
Cesium.Math.toRadians(i + subdivisionCell),
Cesium.Math.toRadians(j + subdivisionCell)
);
subRectangles.push(subRectangle);
}
}
var subRectanglesCenterPoints = [];
subRectangles.forEach(subRectangle => {
var centerPoint = Cesium.Cartographic.fromRadians((subRectangle.west + subRectangle.east) / 2, (subRectangle
.north +
subRectangle.south) / 2);
subRectanglesCenterPoints.push(centerPoint);
});
var promise = Cesium.sampleTerrain(terrainProvider, 7, subRectanglesCenterPoints);
Cesium.when(promise, function (updatedPositions) {
var heights = [];
updatedPositions.forEach(point => {
heights.push(point.height);
});
var excavateVolumes = 0;
var buryVolumes = 0;
for (var i = 0; i < subRectangles.length; i++) {
var subRectangle = subRectangles[i];
var leftBottom = Cesium.Cartesian3.fromRadians(subRectangle.west, subRectangle.south);
var leftTop = Cesium.Cartesian3.fromRadians(subRectangle.west, subRectangle.north);
var rightBottom = Cesium.Cartesian3.fromRadians(subRectangle.east, subRectangle.south);
var height = Cesium.Cartesian3.distance(leftBottom, leftTop);
var width = Cesium.Cartesian3.distance(leftBottom, rightBottom);
if (heights[i] > excavateHeight) {
var excavateVolume = width * height * (heights[i] - excavateHeight);
excavateVolumes += excavateVolume;
}
if (heights[i] < buryHeight) {
var buryVolume = width * height * (buryHeight - heights[i]);
buryVolumes += buryVolume;
}
}
console.log("挖方:" + excavateVolumes + "立方米(m³)");
console.log("填埋:" + buryVolumes + "立方米(m³)");
});
}
</script>
</body>
</html>