技术研究之土方计算

标签: 无 分类: 未分类 创建时间:2025-02-27 03:05:11 更新时间:2025-04-14 11:36:54

1.前言

最近接了一个工程,就是用无人机测绘,计算土石方量。在ArcGIS中,有根据DEM计算土方量的方法。

  • DTM法(三角网法)
    适用于地形条件复杂、有较大起伏、地形高低变化剧烈的地区,如山区地形,石料堆场等。

步骤:
(1)将地形划分为不规则三角网(TIN)。
(2)对每个三角网节点,计算现有高程与设计高程的差值。
(3)对每个三角网单元,计算土方量:

V=A×(ΔH1+ΔH2+ΔH3)/3

其中:
A 是三角网单元面积。
ΔH1,ΔH2,ΔH3 是三个节点的高程差异。
总挖掘量和填埋量分别为所有需要挖掘和填埋单元的土方量之和。

优点: 适合复杂地形,精度较高。
缺点: 计算复杂度较高。

  • 方格网法
    适用于场地大、但高差变化不大的测区,如施工场地前期的土方整理、场地绿化等。
    步骤:

(1)将地形划分为规则的网格(Grid)。

(2)对每个网格点,计算现有高程与设计高程的差值:
ΔH=H现有−H设计

(3)对每个网格单元,计算土方量:
V=A×∣ΔH∣

其中:
V 是土方量。
A 是网格单元面积。
ΔH 是高程差异。
总挖掘量和填埋量分别为所有需要挖掘和填埋单元的土方量之和。

优点: 计算简单,适合规则地形。
缺点: 对复杂地形的精度较低。

  • 断面法:
    只适用于地形狭长的地带,如道路、管道等土方的计算。

步骤:
(1)沿工程区域按一定间距设置断面。
(2)对每个断面,计算现有地形和设计地形的面积差。
(3)对相邻断面之间的区域,计算土方量:
V=(A1+A2)×L/2

其中:

A1,A2 是相邻断面的面积。
L 是断面间距。

总挖掘量和填埋量分别为所有需要挖掘和填埋区域的土方量之和。

优点: 适合线性工程(如道路、渠道)。
缺点: 对复杂地形的精度较低。

  • 等高线法
    适用于土方量计算的概算量使用,该方法适合于地形坡度大,但坡度变化均匀等地。
参考文章:
【1】.如何计算工地土方填挖量?看完秒懂 DTM法土方计算、DTM法土方计算、断面法土方计算、断面法土方计算,这里用的是 cass9.0 计算的。
【2】.一种基于无人机三维扫描实景建模的土方量计算方法 提供一种基于无人机三维扫描实景建模的土方量计算方法,包括以下步骤:采用无人机搭载三维扫描仪器采集地表图像,获取地表固定物体顶面及侧视的图像数据及纹理信息;对图像数据及纹理信息进行多视几何影像匹配获得稀疏点云,加密得到密集点云,对密集点云进行网格化和纹理映射得到三维模型;由三维模型通过数据处理工具给予控制点生成测量坐标系统下的实景三维模型,以实景三维模型为基础,测量获取DEM;将开挖前的原始DEM和开挖后的DEM生成高程数据;对高程数据通过三维分析工具计算开挖和/或回填的土方量。本发明操作简便,能够快速准确计算土方开挖方量,避免了非常规部位的人为计算产生的较大偏差。这里也是使用的ArcGIS计算的土方量。
【4】.基于无人机技术的工程土方量计算 进行地表改造的工程建设都会涉及土石方量的计算工作,而土石方量测绘及计算的速度和精度质量又直接影响着工程建设的进度及成本控制。论文通过使用多旋翼无人机摄影航测计算的方法实现了工程建设两期间土方量的快速、高效及高精度计算,能够有效解决传统方法中的不足,其计算具有较好的可视化效果,结果稳定且可靠。
【5】.如何利用无人机进行方格网土方测量? 1.模型导入。2.高程提取。3.土方计算使用工程应用-方格网法进行土方计算
【6】.无人机倾斜摄影测量技术在石方量计算中的应用 传统获取石方储量变化量的方法存在工作强度大,精度较差的问题。结合技术成熟的无人机倾斜摄影测量技术实现两期石方储量的三维数据获取,并利用Arc Engine二次开发技术实现两期石方储量变化量的监测。

1.DEM

通过点云数据生成DEM。

参考文章:
【1】.如何通过无人机倾斜摄影生成高精度地形(DEM)数据? 1.无人机生成点云数据:大疆构建点云、CC构建点云。2:图新地球:倾斜摄影结果 + 图新地球可达到没有激光雷达的航测成果,也能快速提取地面点构建DEM。3.点云大师生成DEM数据:导入.las格式数据、提取地面点、生成DEM数据、生成等高线
【2】.基于无人机激光点云的高精度DSM、DEM生产研究
【3】.DEM土方量计算 1.基于格网点数据的土方量计算。2.基于等高线数据的土方量计算。3.基于离散点数据的土方量计算。
【4】.倾斜摄影测量技术流程(DEM、DLG、DOM、DSM生产流程) 1.空中三角测量;2.数字表面模型生产(DSM);3.数字高程模型生产(DEM);4.数字正射影像图生产(DOM);5.数字线划图生产(DLG);6.倾斜摄影建模。

1.ArcGIS

这里主要介绍几种使用 arcgis 进行土方量计算的方法。主要就是实用了 DEM 的方式进行。ARCGIS 软件利用栅格数据计算土方量的。栅格数据结构简单,非常利于计算机操作和处理,是GIS 常用的空间基础数据格式。基于栅格数据的空间分析是GIS 空间分析的基础。ArcGIS 栅格数据空间分析模块( Spatial Analyst) 提供有效工具集,方便执行土方量的计算问题。通过倾斜摄影测量的方法获得将前期地表数据和后期地表数据网格化数据,对两个格网数据进行差计算,其差值就是该格网点的填(挖) 高度。

(1)数据准备
准备通过倾斜摄影测量得到的开挖前DEM 和开挖后DEM 或由设计数据生成的DEM 数据。

(2)数据处理
检查数据坐标系统的一致性,保证两期数据具有相同的坐标系统和高程系统,坐标系统应为高斯投影平面坐标。

(3)土方量计算
通过3D Analyst 工具→栅格表面→填挖方工具来计算土方量。图2 对话窗口中选择输入两期DEM数据,输出栅格为最终提取出的开挖或回填范围内的DEM 数据存储位置。

参考文章:
【1】.LiDAR点云利用Arcgis基于DEM法计算土方量
【2】.Arcmap计算土方量教程 1.创建现状TIN;2.创建设计TIN;3.TIN转栅格;4.裁剪现状TIN转成的栅格;5.计算土方量;
【3】.ArcGIS 计算挖填方区域和挖填方量 这里是平整土地的方法,就是把一块地整平,哪里需要填,哪里需要挖。
【4】.ArcGIS在土地整治项目土方量计算中的应用 1.前期准备;2.建立原始DEM;3.确定平整单元;4.确定田块设计高程;5.建立规划DEM;6.基于ArcGIS的土方计算。利用ArcGIS中相关的栅格相减功能,以原始栅格高程与规划栅格高程的差作为积分高度。运用分析工具中的领域分析来创建泰森多边形,以项目范围界完成具体的裁剪操作,并以此来形成若干个微元,具体则需要以生成的单元网格面积来确定为积分单元。
【5】.Cesium中获取地形最高等级瓦片的三角网进行土方计算 在 sampleTerrainMostDetailed 中正是获取点所在的最高精度地形来进行拾取的。那么这里也同理,通过改造 sampleTerrainMostDetailed 方法即可实现获取范围内最高精度的地形。

2.Cesium

Cesium负责展示这块,其实也可以用来显示挖填方。

参考文章:
【1】.Cesium中支持任意数据的土方计算
【2】.Cesium地形开挖-附带源码
【3】.Cesium中获取地形三角网并进行土方计算 这里给了原理分析,而且给了一个示例。

3.激光点云

参考文章:
【1】.基于倾斜摄影或三维激光LiDAR点云数据的土石方量计算——高效、准确、直观 这是一个广告,没啥意思。
【2】.一种基于激光点云的露天矿的土方量变化测算方法和系统 使用三维激光雷达扫描目标露天矿区域,得到目标露天矿区域的前后两期点云数据;根据点云预处理算法对前后两期点云数据进行预处理,得到去噪后的前后两期点云数据;根据前后两期点云数据分别对应的三维距离变换图,计算得到倒角距离大于预定距离阈值的变化区域点云集合;对变化区域点云集合进行快速八叉树聚类,得到变化区域点云集合对应的变化区域边界;构建变化区域边界的三角网,对三角网进行填挖方量计算,得到土方量变化区域对应的填挖方量。
【3】.使用 LAS 数据集根据激光雷达创建 DEM 和 DSM 借助存储在 LAS 文件中的机载激光雷达数据,可以创建高质量的高程模型。 激光雷达可以创建两个常见的高程模型,一个使用最高回波激光雷达点,另一个使用地面高程点。 最高回波表面包括树冠和建筑物,通常称为数字表面模型 (DSM)。 地面(或裸露地表)仅包含地形,通常被称为数字高程模型 (DEM)。
【4】.基于无人机激光点云的高精度DSM、DEM生产研究

4.PhotoScan

通过航线规划、像控点测量、航空摄影等步骤获得航片数据,内业通过Photoscan 软件自动化处理。通过对齐照片、建立密集点、生成网格等流程导出DEM 数据。无人机倾斜摄影测量成果结合ArcGIS 软件计算土方量,其精度可靠,外业工作量小,内业自动化程度高。在其提供可视化成果之上实现量算、查询等功能。

根据现场踏勘进行航高设计及航线设计,利用多旋翼无人机搭载多镜头相机从多视角同步采集地表数据,通过搭载POS/IMU平台获取飞行过程中的实时位置信息,并利用RTK设备进行地面点数据采集。

结合PhotoScan软件对测区边界外多余影像数据进行剔除,利用POS数据与地面控制点数据进行影像匹配和联合平差,生成稀疏点云数据。通过对稀疏点云进行点云加密得到密集点云数据,利用点云分类方式细化出地面点和非地面点,并基于高程改进方法进行非地面点高程改正,联合改正后的地面点和非地面点构建数字高程模型(DEM),最后通过导入测区和设计标高进行土方计算。

参考文章:
【1】.无人机倾斜三维摄影测量土方计算,测绘人必看! 这里的步骤说的比较详细:结合PhotoScan软件对测区边界外多余影像数据进行剔除,利用POS数据与地面控制点数据进行影像匹配和联合平差,生成稀疏点云数据。通过对稀疏点云进行点云加密得到密集点云数据,利用点云分类方式细化出地面点和非地面点,并基于高程改进方法进行非地面点高程改正,联合改正后的地面点和非地面点构建数字高程模型(DEM),最后通过导入测区和设计标高进行土方计算。
【2】.【干货】无人机倾斜摄影测量在土方量计算中的应用(PhotoScan+ArcGIS) 这篇文章比较有用,传统的土方量计算有方格网法,三角网法,断面法三种。方格网法一般用于地形起伏变化不大的面状工程当中。其计算精度与野外采点密度,质量和方格网大小有很大关系。

5.PDAL

PDAL主要用来处理 Lidar 数据。

5.1.安装

我遇到的问题,就是总是安装不上,一直卡住。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# conda install -c conda-forge python-pdal -v
# conda 安装,开始的时候总是出现卡住,一点也不动,后来就是先清理了这个,然后重新安装的
conda clean --all
# 这个过程需要非常漫长的时间等待
conda install -c conda-forge pdal python-pdal gdal -v

# 验证
pdal --version

# 尝试安装,结果这个编译不出来,是因为使用 pip 安装的,后来放弃了,否则报错Minimum CMake version set as 'CMakeLists.txt' is less than 3.15
pip install pdal
pip install cmake
pip install gdal

参考文章:
【1】.conda install 卡住 需要更新 conda
【2】.【陆续排坑】解决conda下载速度慢的问题:更换国内源
【3】.【点云】PDAL库1.8.0版本安装与环境配置 这是在 OSGeo4W 中安装 PDAL 的方法。
【4】.python调用pdal库处理点云数据 这里使用的是 pip 安装的 pdal,这个我到是没有尝试过,还有点云分析,点云转换器。
【5】.Win10系统下VisualStudio2019配置PDAL库
【6】.Python Problem - PDAL does not install “ERROR: Failed building wheel for PDAL Failed to build PDAL”
【7】.How can I tell which minimum CMake version to require in CMakeLists.txt? [duplicate]
【8】.conda安装-c conda-forge python-pdal解算环境:|运行Windows10时挂起 这个提供了一种解决挂起问题的方法,清除缓存;-v 查看日志;重新安装,使用pip安装

5.2.编写配置文件

使用 SMRF (Simple Morphological Filter 是一种常用的地面点提取算法。它基于形态学操作,能够很好地分离地面点与非地面点。) 算法,提取地面点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"pipeline": [
{
"type": "readers.las",
"filename": "input.las"
},
{
"type": "filters.smrf",
"scalar": 1.25,
"slope": 0.15,
"threshold": 0.5,
"window": 16.0
},
{
"type": "filters.range",
"limits": "Classification[2:2]"
},
{
"type": "writers.las",
"filename": "ground.las"
}
]
}

参数解释:
(1)filters.smrf :

  • scalar: 控制地面点检测的敏感度,默认值为1.25。
  • slope: 地形坡度的影响因子,默认值为0.15。
  • threshold: 高度差阈值,用于区分地面点与非地面点,默认值为0.5。
  • window: 滤波窗口大小,单位为格网单元,默认值为16.0。

(2)filters.range :

  • limits: 指定分类范围,Classification[2:2]表示仅保留分类为地面点的数据(LAS标准中,分类值2代表地面点)。

(3)writers.las :将提取的地面点保存为新的LAS文件。

5.3.执行地面点提取

1
pdal pipeline ground_extraction.json

5.4.转为DEM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"pipeline": [
{
"type": "readers.las",
"filename": "ground.las"
},
{
"type": "writers.gdal",
"filename": "output_dem.tif",
"resolution": 1.0,
"output_type": "idw",
"gdalopts": "COMPRESS=LZW"
}
]
}

(1)writers.gdal :

  • filename: 输出的 DEM 文件路径(例如 output_dem.tif)。
  • resolution: 栅格分辨率(单位:米),表示每个像素代表的实际地面距离,默认值为 1.0。

(2)output_type: 栅格化的插值方法:

  • idw: 反距离加权插值(Inverse Distance Weighting)。
  • mean: 像素内点的平均高度。
  • min: 像素内点的最小高度。
  • max: 像素内点的最大高度。

(3)

  • gdalopts: GDAL 的额外选项,例如压缩方式(COMPRESS=LZW 表示使用 LZW 压缩)。
参考文章:
【1】.python快速实现地面点滤除工作 使用传统算法来滤除地面点,具体思路把点云划分为BEV上面的一个个seg和bin,每个bin里面取z_min一个点作为代表。

5.4.查看结果

可以使用 LASTool 工具,可视化查看结果。

参考文章:
【1】.用激光点云估算建筑高度【PDAL|PostgreSQL】 这里用了osm数据,估算了建筑物的高度,但是没有说明精度问题。
【2】.python-pdal will install the PDAL Python extension.
【3】.PDAL 下载编译(conda)
【4】.什么是 conda-forge? conda-forge 是一个社区项目,为各种软件提供 conda 软件包。

5.5.合并las文件

可以使用通配符文件,批量合并多个文件,还可以单独的合并某几个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"pipeline": [
{
"type": "readers.las",
"filename": "path/to/las/files/*.las"
},
{
"type": "filters.merge"
},
{
"type": "writers.las",
"filename": "merged.las"
}
]
}

5.6.去除异常点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"pipeline": [
{
"type": "readers.las",
"filename": "input.las"
},
{
"type": "filters.outlier",
"method": "statistical",
"mean_k": 8,
"multiplier": 3.0
},
{
"type": "filters.range",
"limits": "Classification![7:7]"
},
{
"type": "writers.las",
"filename": "cleaned.las"
}
]
}

流程

根据 DeepSeek 的结果,可以通过 PDAL 工具,直接从 点云生成DEM,然后进行差值计算,最后再 filters.cutfill 生成结果,直接查看输出的文本文件。

(1)航线规划

(2)数据采集

(3)点云生成
通过大疆智图生成点云 .las 格式数据

(4)DEM创建
通过PDAL进行地面点提取,然后生成DEM。

(5)土方计算
使用 GDAL 的栅格计算功能生成差异栅格,计算土方量。

(6)结果评估

参考文章:
【1】.PDAL中filters.divider过滤器对大点云文件进行分割 这里用了 c++ 的代码
【2】.PDAL点云处理库介绍 PDAL可以为点云的滤波、剪裁、平铺、转换为处理流程以及必要时重用等操作组成中间模块。它允许您将这些流程定义为JSON文件,并提供一个pipeline来执行它们。1.与LAStools的区别;2.与PCL的区别;3.与Potree的区别;4.其他开源点云软件倾向于桌面GUI,而不是以库为中心:libLAS、CloudCompare、Fusion、OrfeoToolbox。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。