ARCGIS PRO DSK 利用两期地表DEM数据计算工程土方量

利用两期地表DEM数据计算工程土方量需要准许以下数据:
当前地图有3个图层,两个栅格图层和一个矢量图层
两个栅格图层:beforeDem为工程施工前的地表DEM模型
                         afterDem为工程施工后的地表DEM模型
一个矢量图层:pFeatureLayer
第一步生成掩膜:面转栅格 conversion.PolygonToRaster 生产名称为“poly”的栅格数据。
                             OID为pFeatureLayer的字段

 pFeatureLayer = PMap.FindLayers(ComboBox4.Text).FirstOrDefaultIf pFeatureLayer IsNot Nothing ThenGoTo qqwwDim maskRaster As String = Path.Combine(Project.Current.DefaultGeodatabasePath, $"poly")va = Geoprocessing.MakeValueArray(pFeatureLayer, "OID", maskRaster)  ' 直接传递环境参数列表Dim result = Await Geoprocessing.ExecuteToolAsync("PolygonToRaster_conversion", va)If result.IsFailed ThenThrow New Exception($"掩膜生成失败: {String.Join(vbCrLf, result.ErrorMessages)}")End If

第二步生成掩膜:按掩膜提取分别生成两个栅格图层
                          before_clipped:为工程施工前的地表DEM的提取模型
                          after_clipped   :为工程施工后的地表DEM的提取模型

 Dim outputName As StringDim inputRaster As StringDim outputPath As StringDim envSettings = New List(Of KeyValuePair(Of String, Object))For i = 1 To 2If i = 1 Then inputRaster = beforeDem : outputName = "before_clipped"If i = 2 Then inputRaster = afterDem : outputName = "after_clipped"'直接传递环境参数列表envSettings = New List(Of KeyValuePair(Of String, Object)) From {New KeyValuePair(Of String, Object)("cellSize", "MAXOF"), New KeyValuePair(Of String, Object)("template", inputRaster)}outputPath = Path.Combine(Project.Current.DefaultGeodatabasePath, outputName)Dim extractParams = Geoprocessing.MakeValueArray(inputRaster, maskRaster, outputPath, "INSIDE")result = Await Geoprocessing.ExecuteToolAsync("ExtractByMask", extractParams)                      'ExtractByMaskIf result.IsFailed ThenMsgBox(inputRaster & "栅格按掩膜提取失败")End IfNext

第三步CutFill分析:执行CutFill分析,分析结果生成分析栅格数据CutFill_Result

            '1. 裁剪DEM到指定范围Dim clippedBefore = Path.Combine(Project.Current.DefaultGeodatabasePath, "before_clipped")Dim clippedAfter = Path.Combine(Project.Current.DefaultGeodatabasePath, "after_clipped")'2. 执行CutFill分析outputName = "CutFill_Result"outputPath = System.IO.Path.Combine(Project.Current.DefaultGeodatabasePath, outputName)Dim parameters = Geoprocessing.MakeValueArray(clippedBefore, clippedAfter, outputPath, "METER")result = Await Geoprocessing.ExecuteToolAsync("CutFill", parameters)If result.IsFailed ThenThrow New Exception($"CutFill分析失败: {String.Join(vbCrLf, result.ErrorMessages)}")End If

第四步分析成果按属性提取:ExtractByAttributes,提取的数据仍然为栅格数据
                                               属性提取Where 子句使用 SQL 查询 
                                               "VOLUME < 0"  填方
                                               "VOLUME > 0"  挖方
                                               "VOLUME = 0"  未变化
       输出栅格的属性表用于确定显示方式,并且分别将正体积和负体积视为挖出材料的位置(已移除)和填充材料的位置(已添加)。

' 计算挖方量
Dim cutParams = Geoprocessing.MakeValueArray(cutFillRasterPath, "VOLUME > 0", GeodaPath & "\WFMJ")    '按属性提取
gpResult = Await Geoprocessing.ExecuteToolAsync("ExtractByAttributes", cutParams)
If gpResult.IsFailed ThenMsgBox("挖方区域提取失败.")
End If' 计算填方量Dim fillParams = Geoprocessing.MakeValueArray(cutFillRasterPath, "VOLUME < 0", GeodaPath & "\" & "TFMJ")   '按属性提取gpResult = Await Geoprocessing.ExecuteToolAsync("ExtractByAttributes", fillParams)If gpResult.IsFailed ThenMsgBox("填方区域提取失败.")End If' 计算未变化方量Dim wbhParams = Geoprocessing.MakeValueArray(GeodaPath & "\" & cutFillRasterPath, "VOLUME = 0", GeodaPath & "\" & "WBHMJ")gpResult = Await Geoprocessing.ExecuteToolAsync("ExtractByAttributes_management", wbhParams)If gpResult.IsFailed ThenMsgBox("未变化区域提取失败.")End If

第五步获取栅格数据属性如:

  • x 方向上的像元大小—x 方向上的像元大小。
  • y 方向上的像元大小—y 方向上的像元大小。
 va = Geoprocessing.MakeValueArray("TFMJ", {"CELLSIZEX", "CELLSIZEY"})gpResult = Await Geoprocessing.ExecuteToolAsync("management.GetRasterProperties", va)If gpResult.IsFailed ThenMsgBox("栅格数据属性提取失败.")End If

第六步分析栅格数据属性表访问Attributes:

 TryAwait QueuedTask.Run(Sub()' 获取栅格数据集Dim raster As Raster = rasterLayer.GetRaster()If raster Is Nothing Then Return' 正确检查属性表的方法Dim hasTable As Boolean = FalseTry' 尝试获取属性表Using table As Table = raster.GetAttributeTable()hasTable = True' 获取字段信息'Dim fields As IReadOnlyList(Of Field) = table.GetDefinition().GetFields()'Dim fieldNames As String = String.Join(", ", fields.Select(Function(f) f.Name))'MessageBox.Show($"找到属性表,包含字段: {fieldNames}")Dim tabrow = table.Search(Nothing, False)Do While tabrow.MoveNext'访问属性表 LoopEnd UsingCatch ex As Exception When TypeOf ex Is NotSupportedException OrElseTypeOf ex Is InvalidOperationException' 捕获不支持属性表的异常hasTable = FalseEnd TryIf Not hasTable ThenMessageBox.Show("该栅格没有属性表")End IfEnd Sub)Catch ex As ExceptionMessageBox.Show($"访问属性表时出错: {ex.Message}")End Try

如果只需要计算方量,第四步、第五步可省略。

运行后,可得:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最快打包WPF 应用程序

在 Visual Studio 中右键项目选择“发布”&#xff0c;目标选“文件夹”&#xff0c;模式选“自包含”&#xff0c;生成含 .exe 的文件夹&#xff0c;压缩后可直接发给别人或解压运行&#xff0c;无需安装任何东西。 最简单直接的新手做法&#xff1a; 用 Visual Studio 的“…

物联网通信协议——TCP与MQTT的对比

在物联网通信中&#xff0c;MQTT和TCP的实现方式和原理完全不同&#xff0c;因为两者属于协议栈的不同层级&#xff0c;解决的问题也不同。以下从协议层级、工作机制和典型场景三个角度详细解释&#xff1a; 1. 协议层级与定位 特性TCPMQTT协议层级传输层&#xff08;第4层&am…

【信息系统项目管理师】高分论文:论信息系统项目的成本管理(媒体融合采编平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划项目成本管理2、估算成本3、制订项目预算4、控制成本论文 2017年7月,我作为项目经理参与了 XX省媒体融合采编平台的建设,该项目总共投资530万元,其中服务器、存储、网络等硬件设备投资200万元、软…

策略模式简单介绍

什么是策略模式&#xff1f;一般用于什么场景&#xff1f; 策略模式一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使得它们可以相互替换&#xff0c;这样&#xff0c;客户端可以根据需要在运行时选择合适的算法&#xff0c;…

基于PAI+专属网关+私网连接:构建全链路 Deepseek 云上私有化部署与模型调用架构

DeepSeek - R1 是由深度求索公司推出的首款推理模型&#xff0c;该模型在数学、代码和推理任务上的表现优异&#xff0c;市场反馈火爆。在大模型技术商业化进程中&#xff0c;企业级用户普遍面临四大核心挑战&#xff1a; 算力投入成本高昂&#xff1a;构建千亿参数级模型的训…

【APM】How to enable Trace to Logs on Grafana?

系列文章目录 【APM】Observability Solution 【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry 【APM】NET Traces, Metrics and Logs to OLTP 【APM】How to enable Trace to Logs on Grafana? 前言 本文将介绍如何在Grafana上启用 …

在 Excel 中使用通义灵码辅助开发 VBA 程序

VBA 简介 VBA 是一种用于微软办公套件&#xff08;如 Word、Excel、PowerPoint 等&#xff09;的编程语言&#xff0c;它本质上是一种内嵌的脚本&#xff0c;或者可以认为是一段命令&#xff0c;其标准叫法被称为宏。 VBA 只能依赖于对应的软件进行开发&#xff0c;例如本文就…

vscode终端运行windows服务器的conda出错

远程windows服务器可以运行&#xff0c;本地vscode不能。 打开vscode settings.json文件 添加conda所在路径

紫外相机的应用范围及介绍

&#xff08;一&#xff09;工业领域 半导体制造&#xff1a;在晶圆制造和检测过程中&#xff0c;紫外相机起着关键作用。它可用于裸晶圆检测&#xff0c;能准确识别出制造过程中偶然引入的微粒&#xff08;如灰尘&#xff09;或因处理不当造成的划痕等缺陷。对于图案晶圆检查…

08软件测试需求分析案例-删除用户

删除用户是后台管理菜单的一个功能模块&#xff0c;只有admin才有删除用户的权限。不可删除admin。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务步骤。 信息&#xff1a;此功能应为用户提供确认删除的功能。…

Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比

Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比 一 基本概述对比 特性DBMS_JOB (旧版)DBMS_SCHEDULER (新版)引入版本Oracle 7 (1992年)Oracle 10g R1 (2003年)当前状态已过时但仍支持推荐使用的标准设计目的基础作业调度企业级作业调度系统 二 功能特性对比 2.1 作业定义能力 …

Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南

网路通信的三大要素&#xff1a;协议&#xff0c;端口和IP 知识点1【字节序】 多字节在主机中的存放数据 把多字节看成一个整体存储的顺序。 为什么我们在文件中没有这个概念呢&#xff1f; 因为文件是字节流&#xff08;流指针&#xff09;&#xff0c;流是以一个字节为操…

mvccc

. MVCC (多版本并发控制) 概念&#xff1a; MVCC 是一种并发控制技术&#xff0c;用于在数据库中实现并发事务的读写操作&#xff0c;同时保证事务的隔离性。MVCC 的核心思想是&#xff0c;在数据库中维护数据的多个版本&#xff0c;每个事务在读取数据时&#xff0c;读取的是…

Kotlin整数相除精度损失roundToInt

Kotlin整数相除精度损失roundToInt import kotlin.math.roundToIntfun main() {val a 0.0fval delta 0.1ffor (i in 0..10) {val r a i * deltaprintln("float${r} toInt${r.toInt()} (0.5 toInt)${(r 0.5).toInt()} round${Math.round(r)} roundToInt${r.roundToInt…

“星睿O6” AI PC开发套件评测 - Windows on Arm 安装指南和性能测评

引言 Radxa联合此芯科技和安谋科技推出全新的"星睿O6"迷你 ITX 主板。该系统搭载了 CIX P1&#xff08;CD8180&#xff09;12 核 Armv9 处理器&#xff0c;拥有高达30T算力的NPU和高性能的GPU&#xff0c;最高配备64GB LPDDR内存&#xff0c;并提供了如 5GbE、HDMI …

redis-事务(MULTI、EXEC、DISCARD、WATCH与lua脚本、包含lua脚本的简单介绍、乐观锁抢购案例的实现)

https://juejin.cn/post/6891158857708797959 首先Redis事务在实际的场景应用上也占着比较重要的地位,例如在秒杀场景中,我们就可以利用Redis事务中的watch命令监听key,实现乐观锁,保证不会出现冲突,也防止商品超卖。 另外就是Redis事务也是面试过程中面试官着重照顾的基础…

Redis-07-常见Redis使用场景

文章目录 01.缓存数据&#xff08;Cache&#xff09;02.布式锁&#xff08;Distributed Lock&#xff09;03.计数器&#xff08;Counter&#xff09;04.排行榜&#xff08;Leaderboard&#xff09;05.消息队列&#xff08;Message Queue&#xff09;06.限流&#xff08;Rate Li…

长亭2月公开赛Web-ssrfme

环境部署 拉取环境报错&#xff1a; 可以尝试拉取一下ubuntu:16.04&#xff0c;看是否能拉取成功 将wersion&#xff1a;"3"删掉 我拉去成功之后&#xff0c;再去拉取环境&#xff0c;成功&#xff01; 访问环境 测试ssrf 源码 <?php highlight_file(__file__…

RK3506+net9+VS2022跨平台调试C#程序

下载GetVsDbg.sh &#xff0c;这脚本会下载一个压缩包&#xff0c;然后解压缩&#xff0c;设置x权限等等。但是目标板子连不上&#xff0c;就想办法获取到下载路径&#xff0c;修改这个脚本&#xff0c;显示这个下载链接后&#xff0c;复制一下&#xff0c;用电脑下下来 修改好…

MySQL GTID集合运算函数总结

MySQL GTID 有一些运算函数可以帮助我们在运维工作中提高运维效率。 1 GTID内置函数 MySQL 包含GTID_SUBSET、GTID_SUBTRACT、WAIT_FOR_EXECUTED_GTID_SET、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS 4个内置函数&#xff0c;用于GTID集合的基本运算。 1.1 GTID_SUBSET(set1,set2) …