Cesium專欄-填挖方分析(附源碼下載)


Cesium 是一款面向三維地球和地圖的,世界級的JavaScript開源產品。它提供了基於JavaScript語言的開發包,方便用戶快速搭建一款零插件的虛擬地球Web應用,並在性能,精度,渲染質量以及多平台,易用性上都有高質量的保證。

關於填挖方分析


從百度百科查找到的關於填方和挖方的定義如下:

填方:填方指的是路基表面高於原地面時,從原地面填築至路基表面部分的土石體積。
挖方:指的是路基表面低於原地面時,從原地面至路基表面挖去部分的土石體積。

在簡書里,也找到一篇 基於GIS的填挖方平衡分析 的文章,並給出了在ArcGIS軟件中的實操。

本文着重要介紹的是在Cesium中如何計算填方與挖方,其中會借鑒小專欄里的另外一篇文章 Cesium專欄-剖面分析 中關於地形高度采樣的內容。

需要注意的是:本文使用的計算方式只是一種研究行方案,用於拓展思路,並不是最准確的計算方式,請評估后慎用!

具體做法


1.定義地形服務,繪制施工區域

  • // 在使用地形服務前,請設置好 Cesium.Ion.defaultAccessToken
  • var 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.計算填挖方

更多詳情見下面鏈接文章

GIS之家小專欄此文章:Cesium專欄-填挖方分析(附源碼下載)

文章提供源碼,對本專欄感興趣的話,可以關注一波


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM