基于水平参考高程面计算挖填方比较简单,水平参考高程也就是某一个高程值,只需要计算同一位置上DEM高程到参考面高程即可,挖填方分析实际上就是计算DEM数据与参考面构成的封闭体体积。

DEM数据本身是由一系列等间距横向和纵向分布的高程点构成,其数据组成形式与一般图像类似,相当于每个图像坐标上由像素值变成高程值。一般tif格式DEM数据还附带一个tfw文件用以描述起始点坐标、横向和纵向间隔距离等信息,通过读取tfw文件可以更方便的计算DEM数据。

由于DEM数据为离散的高程数据,为了得到更精确的计算结果,需要对DEM数据进行内插,在DEM内部内插出更多的高程点形成更小的高程格网,以每个格网内高程点作为附近区域平均高程与参考面高程计算差值,并计算体积。当差值为正,此时需要将高出参考面部分挖去,差值即为需要挖掉的深度,通过差值与高程点所在格网面积计算的体积即为该格网处的挖方;当差值为负,此处高程低于参考面,需要进行填方计算,通过同样方式计算填方量。

整个实现过程主要分为三步:

第一步,读取DEM数据,获取每一个栅格的高程值,读取tfw文件,获取起始坐标和每一个栅格长度;

Tfw文件内容:

第二步,对DEM高程值进行内插计算,将每一个栅格分割为n*n的格网,通过双线性内插计算得到格网上每个点的高程值;

第三步,将每个格网上的高程值与参考面高程计算差值,通过单个格网面积计算得到挖填方结果。

具体实现:

public DigFillResultData analysisByElevation(File currentDEM,double referenceElevation,int interpolation) throws Exception{// 读取数据File currentDEMTfw = new File(currentDEM.toString().replace("tif", "tfw"));TfwInfo currentDEMInfo = new TfwReader().read(currentDEMTfw);DemData currentData = new DemReader().read(currentDEM);// 进行计算DigFillResultData result = computeByElevation( currentDEMInfo, currentData,referenceElevation, interpolation);return result;}private DigFillResultData computeByElevation(TfwInfo currentDEMInfo,DemData currentData,double referenceElevation,int interpolation) {double maxDigDeep = 0.0;double maxFillDeep = 0.0;double digVolume = 0.0;double fillVolume = 0.0;int width = currentData.getWidth();int height = currentData.getHeight();DigFillResultData result = new DigFillResultData();for (int i = 0; i < height - 1; i++) {for (int j = 0; j < width - 1; j++) {double currentXCoordinate = currentDEMInfo.getxCoordinate() + j * currentDEMInfo.getxStep();double currentYCoordinate = currentDEMInfo.getyCoordinate() + i * currentDEMInfo.getyStep();double interXStep = currentDEMInfo.getxStep() / interpolation;double interYStep = currentDEMInfo.getyStep() / interpolation;for (int x = 0; x < interpolation; x++) {for (int y = 0; y < interpolation; y++) {double currentXInterCoord = currentXCoordinate + x * interXStep;double currentYInterCoord = currentYCoordinate + y * interYStep;double currentValue = new ElevationInterpolation().caculateElevation(currentXInterCoord,currentYInterCoord, currentData, currentDEMInfo);if (currentValue != -32767.0) {double difference = currentValue - referenceElevation;if (difference > 0) {if (difference > maxDigDeep) {maxDigDeep = difference;}digVolume += difference * interXStep * Math.abs(interYStep);}if (difference < 0) {if (Math.abs(difference) > maxFillDeep) {maxFillDeep = Math.abs(difference);}fillVolume += Math.abs(difference) * interXStep * Math.abs(interYStep);}}}}}}result.setDigVolume(format(digVolume));result.setFillVolume(format(fillVolume));result.setMaxDigDeep(format(maxDigDeep));result.setMaxFillDeep(format(maxFillDeep));return result;}

DEM挖填方分析--基于水平参考面计算相关推荐

  1. 基于水平集方法和G0模型的SAR图像分割

    基于水平集方法和G0模型的SAR图像分割 Abstract(摘要) 这篇文章提出了一种分割SAR图像的方法,探索利用SAR数据中的统计特性将图像分区域.我们假设为SAR图像分割分配参数,并与水平集模型 ...

  2. 基于零参考深度曲线估计的暗光图像增强

    天下事以难而废者十之一,以惰而废者十之九.--<严氏家训·议兵篇> 摘要: 本文提出了一种新的基于零参考深度曲线估计(Zero-DCE)的方法,该方法将光照增强描述为一种基于深度网络的特定 ...

  3. 大学计算机基础 试卷分析,基于SPSS大学计算机基础考试试卷分析.doc

    基于SPSS大学计算机基础考试试卷分析 基于SPSS大学计算机基础考试试卷分析 摘要:试卷分析包括成绩分析和试卷质量分析两部分.该文以西南林学院2007-2008级的消防工程专业的大学计算机基础考试为 ...

  4. matlab算出中心差分方法_方差分析、T检验、卡方分析如何区分?

    差异研究的目的在于比较两组数据或多组数据之间的差异,通常包括以下几类分析方法,分别是方差分析.T检验和卡方检验. 三个方法的区别 其实核心的区别在于:数据类型不一样.如果是定类和定类,此时应该使用卡方 ...

  5. 商品评论情感分析——基于商品评论建立的产品综合评价模型(1)

    商品评论情感分析--基于用户评论建立的产品综合评价模型(1) 1.背景 1.1问题分析 2.数据预处理 2.1删除无关数据 2.2文本去重 3.情感分析 4.LDA主题模型 4.1评论文本分词 4.2 ...

  6. 基于水平集的图像分割方法

    一.引言 借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间.随后,Osher等人对水 ...

  7. AsyncHttpClient源码分析-基于Netty的连接池实现

    原文地址:asynchttpclient源码分析-基于Netty的连接池实现 最近项目重构,有了个机会更多接触一个有别于HttpAsyncClient的异步网络框架AsyncHttpClient,是个 ...

  8. 2011年下半年信息系统项目管理师考试下午案例分析试题及参考答案,考试真题

    2011年下半年考试下午案例分析试题及参考答案 试题一 张某是M公司的项目经理,有着丰富的项目管理经验,最近负责某电子商务系统开发的项 目管理工作,该项目经过工作分解后,范围已经明确.为了更好地对项目 ...

  9. uboot源码分析(基于S5PV210)之启动第一阶段

    目录 一.start.S引入 1.u-boot.lds中找到start.S入口 2.SourceInsight中如何找到文件 3.SI中找文件技巧 二.start.S解析 1.不简单的头文件包含 2. ...

最新文章

  1. python while if 区别_对python中for、if、while的区别与比较方法
  2. 如何增加MOSS 2007中list template和site template的最大值
  3. tomcat下类加载顺序
  4. PostBox使用小记
  5. 智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案
  6. 关联的两个字段度需要建立索引吗_索引那些事儿
  7. 程序员惨遭辞退竟只因提了些代码修改意见?
  8. python之HTTP处理模块urllib和urllib2
  9. 程序员界之行业求职黑名单!实用!
  10. 1、JavaScript入门
  11. jpgraph 折线图--解决中文乱码的问题(标题和图例)
  12. 天池竞赛-金融风控-task1
  13. AE 或PR等软件载入素材时,无法访问网络驱动器资源的问题
  14. Layui 重载后表格内容重复 更换提交方式已解决
  15. win98模拟器_Windows98模拟器,手机也能这样玩!
  16. 在CAD中插入谷歌地球卫星地图
  17. emi滤波matlab,EMI滤波器的基本原理
  18. 【stgcn】代码解读之主函数(一)
  19. Python全局解释器锁(GIL)
  20. 中国后续发展的知识来源问题

热门文章

  1. CSS3的弹性盒子flex详解(1)
  2. 【详细注释】1051 Pop Sequence (25 分)
  3. 【测试点分析】1072 开学寄语 (20分)_42行代码AC
  4. 算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)
  5. (*长期更新)软考网络工程师学习笔记——Section 8 传输层
  6. java jpanel 间距_Java的 . 调整JPanel上的问题大小
  7. mysql bin.000013_mysql的binlog安全删除的一种方法
  8. 在Apache上配置防盗链功能和隐藏版本号
  9. Redis数据库(二)——Redis高可用、持久化及性能管理
  10. 对于局部变量_2020年对于JDK ,大家觉得哪个版本好用?