资 源 简 介
1.定义地形服务,绘制施工区域// 在使用地形服务前,请设置好 Cesium.Ion.defaultAccessTokenvar terrainProvider = Cesium.createWorldTerrain({requestWaterMask: true,requestVertexNormals: 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) ]; 2.剖分施工区域,计算每个区域的面积与填挖高度 核心思想:计算 开挖/填埋 的 开挖量/填方量 的 核心思想就是 剖分 微积分// 设置剖分最小单元 0.01°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.sampleTerrainMostDetailed(terrainProvider, subRectanglesCenterPoints); Cesium.when(promise, function (updatedPositions) {// 所有高度var heights = []; updatedPositions.forEach(point => { heights.push(point.height); }); }); 3.计算填挖方