如何求多个水库的体积,已知多个水库为一个面图层,有该地区的dem数据

本文介绍了如何利用GIS工具进行批量计算多个水库的体积,首先通过分割工具将水库面图层导出为单个图层,接着使用模型构建器结合迭代器对每个水库图层与DEM数据进行裁剪,最后运用表面体积工具计算各水库的体积。整个过程通过自动化建模实现效率提升,详细步骤包括模型构建、迭代器设置以及结果的输出和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何求多个水库的体积,已知多个水库为一个面图层,有该地区的dem数据

知识储备

1.迭代器
指以一定的自动化程度多次重复某个过程,通常又称为循环。迭代很重要,因为自动重复任务会节省执行这项任务所需的时间和精力。在“模型构建器”中进行迭代时,可以在每次迭代中使用不同的设置和数据来反复执行同一个过程。“模型构建器”中的迭代操作还具有灵活性,用户可以迭代整个模型,或只是重复执行单个工具或过程
在这里插入图片描述
2.表面体积工具
a.作用:表面体积可计算某个表面相对于给定基本高度或参考平面的投影面积、表面面积和体积。该表面可以是栅格、TIN 或 terrain 数据集。结果将写入以逗号分隔的文本文件。
b.位置:3D Analyst工具->功能性表面->表面体积
c.结果输出为文本文件:是以逗号分隔的 ASCII 文本文件,结果将写入该文件中。如果该文件已存在,会将结果追加到其中。文件的第一行中包含字段标题。这些标题分别是“数据集”、“平面高度”、“参考”、“Z 因子”、“2D 面积”、“3D 面积”、“体积”。后续行中包含实际值。
d.参数讲解:如果将参考平面设置为 ABOVE,则平面高度将被设置为表面的最小高度。如果将“参考平面”设置为 BELOW,则默认的平面高度将被设置为最大高度。
在这里插入图片描述

分析:

  1.把一个面图层中的水库分别导出成单个图层  
  2.将导出的多个图层分别与dem做裁剪,得到各个水库对应的Dem地区
  3.使用表面体积工具分别计算各个水库对应的Dem地区的体积

数据流程图就省了 懒懒懒~

数据处理

在这里插入图片描述

1把一个面图层中的水库分别导出成单个图层

使用split工具(分析工具->提取分析->分割)
split 字段为Text 通过Analysis Tools——Extract——Split工具实现。
步骤如下:
在“Input Features”和“Split Features”中都选择需要分割的水库图层,相当于用自己切割自己。在“Split Field”中选择具有唯一标识的字段,只要字段的值是单一的即可,此处选name,要求这个字段的属性为字符串(即字段类型为Text),它将作为生成的shp文件的文件名。然后设置输出路径即可。切记!!切记:裁剪工具中输入范围的图层的名字不可以是汉字开头
在这里插入图片描述

2.将导出的多个图层分别与dem做裁剪,得到各个水库对应的Dem地区

这里使用该工具为裁剪(数据管理工具->栅格栅格处理->裁剪,切记不规则裁剪需要把裁剪工具的在这里插入图片描述
勾上

我们知道分别对多个图层分别与dem做裁剪,需要使用多次裁剪工具,这是重复性的单一工作,在这里,我们使用建模来完成,一个模型中只能有一个迭代器

2.1打开模型构建器

打开ArcMap,启动目录窗口->展开工具箱->右键单击【我的工具箱】->选择【新建】|【工具箱】,按照自己喜好命名->右键单击新生成的工具箱,选择【新建】【模型】,打开模型构建器,进入该窗口
在这里插入图片描述
2.2构建迭代器
选择模型构建器菜单的【插入】->【迭代器】->【要素类】(迭代要素类:迭代工作空间要素数据集中的所有要素类。)
因为我们分割的数据存在了数据库里,所以选择迭代要素类)如下图所示
在这里插入图片描述
在这里插入图片描述
2.3建模-含有迭代器的裁剪工具
(1)将数据管理工具->栅格处理->裁剪工具,左键摁住不动,拖入模型中,点击模型菜单【连接】按钮 在这里插入图片描述
,将要素类与裁剪连接,作为【输出范围】
在这里插入图片描述
(4)设置输出路径 我们进行迭代多少次就会产生多少个结果,如果我们的结果命名是死的,那么生成的结果会一次一次的覆盖,最终只会有一个结果,所以我们需要设置一个活的输出路径,一次迭代一个新的输出路径,这里的【迭代要素类】有一个属性为【名称】,这个名在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3使用表面体积工具分别计算各个水库对应的Dem地区的体积

在这里插入图片描述
在这里插入图片描述
每一个都出来了 我们可以查看Txt文件 最后一个数为体积,可以试试C#进行文本的切割 ,把该文件下的所有文本遍历将其存储到数组,在将最后一个提取出来,我的电脑已经不能写C#了,如果能写,我倒是还挺想试试的,看看自己之前学习的忘了吗,下次再见!以后会多多把自己不会的问题以及解决方案多多分享的,有好的想法还可以一起讨论噢~
编程实现:链接
https://blog.youkuaiyun.com/weixin_42200815/article/details/120104331
好记性不如烂笔头~

### ArcGIS 中的选址分析与容量规划 #### 选址分析的方法 在 ArcGIS 中进行选址分析通常涉及多个步骤,这些步骤旨在评估不同位置的选择标准并找到最优解。选址分析的一个重要方是对潜在地点的空间特性进行全评价。 对于选址分析而言,首先要收集和准备必要的地理数据,这可能包括土地覆盖、土壤类型、交通网络以及其他影响因素的地图信息。一旦获取到基础资料之后,在软件环境中加载这些图层,并基于特定的标准来创建适宜性模型[^1]。 为了提高决策的质量,还可以应用加权叠加法(Weighted Overlay)。这种方法允许给不同的因子分配权重,从而反映出其相对的重要性;随后将各个因子图层转换成统一的比例尺再相加以得出综合评分地图。最终得分较高的区域即为更理想的候选地址[^3]。 #### 容量规划的具体操作 当涉及到水库这样的基础设施项目时,计算库容量是一个重要的考量因素。使用 ArcGIS Pro 可以有效地执行这一任务: - **数据源选取**:选择高质量的数字高程模型 (DEM),这是后续所有工作的基石。 - **填洼处理**:消除 DEM 上不必要的低洼地带,防止错误地模拟水流路径[^4]。 - 使用 `Flow Accumulation` 来估算累积流量大小; - 找出汇流点作为未来坝址的位置参考; - 应用 Watershed Tool 提取集水盆地边界; 最后一步是通过裁剪调整后的 DEM体积测量函数来精确求得储水量变化情况。 ```python import arcpy from arcpy.sa import * # 设置工作环境参数 arcpy.env.workspace = "C:/data" dem = Raster("filled_dem.tif") # 创建流向栅格 flow_direction = FlowDirection(dem) # 计算累计流量 accumulated_flow = FlowAccumulation(flow_direction) # 查找倾泄点(假设已知) pour_point = Point(-90, 45) # 获取流域范围 watershed_boundary = Watershed(flow_direction, pour_point) # 裁剪DEM至流域范围内 clipped_dem = ExtractByMask(dem, watershed_boundary) # 进行蓄水量计算... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值