利用Arcgis进行沟道形态分析

        在做项目的时候需要学习到水文分析和沟道形态分析的学习,所以自己摸索着做了下面的工作和内容。如有不对请多指正!!

一、沟道形态分析概述

       沟道形态分析是水文分析的一个重要方面,用于研究河流的形态和特征。沟道形态分析可以帮助我们了解河流的走向、宽度、深度、坡度等特征,从而对河流的水文过程进行模拟和预测。这对于研究区域的地貌演化、水土流失、泥石流风险评估等具有重要意义。

二、准备工作

1. 数据准备

   - 数字高程模型(DEM):获取高分辨率的DEM数据,常用的数据源有SRTM、ASTER GDEM或LiDAR数据。我们的数据来源于无人机数据,经过密集点云的构建后,创建DEM并输出。

对于该部分我的操作见下方博文:

MetaShape+CloudCompare的一些基本操作(一)-CSDN博客文章浏览阅读811次,点赞29次,收藏30次。学习影像拼接和影像点云数据提取的小笔记(一)。有不对的地方多多指正,都是自己摸索出来的,可能会有很多不对的地方,请多指正_metashapehttps://blog.csdn.net/Johaden/article/details/142639796注意:在创建DEM的时候,我选的就是WGS84_UTM_Zone_49N,也就是投影坐标系,这样做可以省下后面在Arcgis中投影转换的步骤。

        因为无人机的坐标系为WGS_84的地心坐标系,所以上面博客里面的CGCS2000投影坐标系其实并不好转换,需要填写一个转换参数。而又因为UTM投影在科研中比较常用,所以就采用了上述的投影坐标系。

2. 软件准备

   - ArcGIS(版本建议10.2及以上)下方的操作版本为10.8.1

   - Arc Hydro Tools(如果使用ArcGIS,可安装该工具箱进行水文分析)。

   - Spatial Analyst扩展模块(ArcGIS自带)。

三、详细操作步骤

1. 导入DEM数据

- 打开ArcMap。

- 点击“文件(File)”->“添加数据(Add Data)”,选择您的DEM文件(.tif或.img格式),点击“添加”。(更推荐链接文件夹!!)

 2. DEM预处理

(1)投影设置

- 右键DEM图层,选择“属性(Properties)”,在“源(Source)”选项卡中确认坐标系。

- 如果坐标系不符合分析要求(如需要投影到UTM坐标系),使用“投影(Project Raster)”工具进行投影转换。

(2)填洼(Fill Sinks)

- 打开“ArcToolbox” -> “Spatial Analyst Tools” -> “Hydrology(水文分析)” -> “Fill”。

- 在“Fill”工具中:

  - Input surface raster(输入表面栅格):选择您的DEM数据。

  - Output surface raster(输出表面栅格):设置输出路径和文件名(如Filled_DEM)。

  - 点击“环境”-并行处理设置为0。

- 点击“OK”执行操作。该步骤用于填充DEM中的洼地,避免流水路径中断。

 3. 生成流向和流量累积栅格

(1)计算流向(Flow Direction)

- 打开“Spatial Analyst Tools” -> “Hydrology” -> “Flow Direction”(流向)。

- 在“Flow Direction”工具中:

  - Input surface raster:选择填洼后的DEM(Filled_tif1)。

  - Output flow direction raster:设置输出路径和文件名(如Flow_Direction)。

同理,打开【环境设置】找到【并行处理】标签,将“并行处理因素”空白处填入“0”)→【确定】

- 点击“OK”执行操作。

其中:

  • 1:流向右方(东)
  • 2:流向右下方(东南)
  • 4:流向下方(南)
  • 8:流向左下方(西南)
  • 16:流向左方(西)
  • 32:流向左上方(西北)
  • 64:流向上方(北)
  • 128:流向右上方(东北)

PS:强制所有像元向外流动是什么?什么时候勾选?

        在进行流向分析时,有一个选项叫做“强制所有像元向外流动”(Force All Cells to Flow Out of the Domain)。这个选项的作用和适用场景如下:

        当启用此选项时,ArcGIS 会确保所有位于研究区域边界上的像元的水流方向都指向研究区域的外部。这意味着即使这些边界像元的实际地形可能指示水流应该流入研究区域内部,它们也会被强制设置为流出研究区域。

        这个选项主要用于避免水流在研究区域的边界上形成循环或停滞,确保所有的水流最终都能离开研究区域。     

        在这个示例中,矩形的边缘就是研究区域的边界。假设这个研究区域的数字高程模型(DEM)如下所示:

+-------------------+
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10   8   8   8  10  10  10  |
|  10  10  10  10   8   5   8  10  10  10  |
|  10  10  10  10   8   8   8  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
|  10  10  10  10  10  10  10  10  10  10  |
+-------------------+

        在这个 DEM 中,数值表示高程,较低的数值表示洼地。假设你进行流向分析,不启用“强制所有像元向外流动”选项,流向结果可能如下所示:

+-------------------+
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↘  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↓  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↘  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
+-------------------+

        可以看到,洼地内的水流方向是向内的,形成了一个闭环。

        启用“强制所有像元向外流动”选项后,所有位于研究区域边界上的像元的水流方向都会被强制设置为指向研究区域外部。具体效果如下:

+-------------------+
|  →  →  →  →  →  →  →  →  →  →  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↘  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↓  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↘  ↘  ↘  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
|  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  |
+-------------------+

        可以看到,边界上的像元(最外层的像元)的水流方向被强制设置为指向外部,确保水流不会在边界处形成循环。

        所以,在进行流向分析之前,先不勾选“强制所有像元向外流动”选项,查看初步结果。随后检查边界附近的水流方向,看是否存在明显的循环或停滞现象。

        如果发现水流在边界处存在循环或停滞,尝试勾选“强制所有像元向外流动”选项,再次进行分析。对比两次分析的结果,看看区别大不大,我勾选后没发现什么大的区别。

(2)计算流量(Flow Accumulation)

- 打开“Spatial Analyst Tools” -> “Hydrology” -> “Flow Accumulation”(流量)。

- 在“Flow Accumulation”工具中:

  - Input flow direction raster:选择上一步生成的流向栅格(Flow_Direction)。

  - Output accumulation raster:设置输出路径和文件名(如Flow_Accumulation)。

同理,打开【环境设置】找到【并行处理】标签,将“并行处理因素”空白处填入“0”)→【确定】

- 点击“OK”执行操作。

     在流量累积图中,黑色背景表示累积流量较低或没有水流的区域,而白色线条表示累积流量较高的区域。具体来说:

  • 黑色背景:这表示地表较为平坦或没有明显水流的区域。这些区域的累积流量值较低,通常接近于零。
  • 白色线条:这些线条表示水流路径,通常是河流或溪流的位置。线条的粗细和亮度反映了累积流量的大小。线条越粗、越亮,表示累积流量越大
上图中一部分放大后

        通过流量累积分析,我们可以生成一个流量累积图,其中每个像元的值表示该像元及其上游所有像元的总累积流量。

4. 提取沟道网络

(1)设定阈值

- 根据研究区域的实际情况,确定一个阈值(如1000)。该阈值代表汇流累积值大于此值的区域将被视为沟道。

(2)使用栅格计算器

- 打开“Spatial Analyst Tools” -> “Map Algebra” -> “Raster Calculator(栅格计算器)”。

- 输入以下表达式:

Con("Flow_Accumulation" >= 1000, 1)        (10-23补:阈值最终在输出坡度坡向图时选择了100)

  - 说明:“Flow_Accumulation”为之前生成的流量累积栅格,1000为设定的阈值,生成的“Stream”为二值栅格,值为1的像素代表沟道。

        关于阈值,我们需要尝试使用不同的阈值(如 500、1000、5000 等),并将生成的水流路径与实际的河流网络对比。

(3)将沟道栅格转换为矢量线

- 打开“Spatial Analyst Tools” -> “Hydrology” -> “Stream to Feature”(栅格河网矢量化)。

- 在“Stream to Feature”工具中:

  - Input stream raster:选择“flowacc”栅格。(阈值处理的)

  - Input flow direction raster:选择“Flow_Dir”栅格。(流向)

  - Output polyline features:设置输出路径和文件名(如StreamT_flowacc1)。

- 点击“OK”执行操作。

5. 计算沟道形态参数

(1)计算沟道长度(一般情况下Arcgis会自动生成沟道长度,比如我的就是名为shape_length,如下所示,但是可能版本不同带来的效果不同,所以仍讲解一下若没有该长度怎么办?)

- 右键“StreamT_flowacc1”图层,选择“属性(Properties)”。

- 在“Symbology(符号系统)”选项卡,可以根据需要设置线的样式。

- 打开“属性表(Attribute Table)”,添加一个新字段:

  - 点击“Table Options(表选项)” -> “Add Field(添加字段)”。

  - 字段名称设为“Length”,类型选择“Double”。

- 计算长度:

  - 右键“Length”字段,选择“Calculate Geometry(计算几何属性)”。

  - 属性选为“长度(Length)”,单位根据需要选择(如米)。

  - 点击“OK”执行。(经对比发现两者相同,所以证明上述操作正确!)

(2)计算沟道坡度

- 生成坡度栅格:

  - 打开“Spatial Analyst Tools” -> “Surface(表面分析)” -> “Slope(坡度)”。

  - Input raster:选择填洼后的DEM(Filled_DEM)。

  - Output raster:设置输出路径和文件名(如Slope)。

  - 单位可以选择“度(下图)”或“百分比”。

- 将坡度值提取到沟道线上:

        我之前想使用“提取值至点”,但是由于“提取值至点”(Extract Values to Points)工具只接受点要素作为输入(虽然可以转化为点,但是最后还是需要将点要素的属性加入回线要素,比较麻烦),而不能直接对线要素提取坡度值,所以我们可以使用“添加表面信息”(Add Surface Information)工具来实现将坡度值提取到沟道线上的目的。

- 确保已安装3D Analyst扩展模块:先在“自定义”->“扩展模块”中启用3D Analyst扩展模块。

- 打开“添加表面信息”工具:进入“ArcToolbox” -> “3D Analyst Tools” -> “Surface” -> “Add Surface Information”。

- 设置输入参数:

Input Feature Class(输入要素类):选择您的沟道线要素(如“StreamT_flowacc1”)。

Input Surface(输入表面):选择您的坡度栅格数据(如“Slope”)。

Surface Information(表面信息):勾选“Z_MEAN”,这样工具会计算每条线要素在坡度栅格上的平均坡度值。

- 点击“OK”或“运行”按钮,开始处理。

        处理完成后,打开沟道线要素的属性表,就会发现多了一个字段(如“Z_MEAN”),其中包含了每条线对应的平均坡度值。

疑问:为什么输出属性要选择Z_mean而不是AVG_Slope?

1. 参数含义

(1)Z_MEAN

定义:计算输入要素在输入表面(栅格或TIN)上的Z值的平均值。(不单单指高程!!!)

适用情况:想要知道线要素在特定栅格表面(如坡度栅格、海拔栅格)上所覆盖区域的平均值时使用。

结果:对于坡度栅格,Z_MEAN会给出线要素在坡度栅格上的平均坡度值。

(2)AVG_SLOPE

定义:计算输入要素自身的平均坡度,基于要素的高程变化和水平距离。

适用情况:当有三维线要素(具有高程值的线,如3D多段线),并希望计算线要素自身的坡度时使用。

结果:AVG_SLOPE给出的是线要素自身的坡度,而不是其在栅格表面上的坡度。


不选择AVG_SLOPE的原因

限制造成的误解:AVG_SLOPE计算的是线要素自身的坡度,需要线要素具有高程(Z值)信息。如果线要素是二维的(没有Z值),那么计算的AVG_SLOPE可能为零或无效。

与栅格无关:AVG_SLOPE的计算不依赖于输入的栅格表面,即使指定了坡度栅格作为输入表面,工具也不会使用该栅格的数据来计算AVG_SLOPE。

结果不符合需求:由于AVG_SLOPE计算的是线要素自身的坡度,而不是线要素在坡度栅格上的坡度,因此无法满足提取坡度栅格值的需求。


(3)计算其他形态参数

- 密度分析:使用“Spatial Analyst Tools” -> “Density” -> “Line Density(线密度分析)”对沟道网络进行密度分析。

 6.集水区分析

(1)河流链接

- spatial analyst->河流链接

- 在输入河流栅格中输入“河网栅格”,第二行输入“流向”,同理并行处理改为0。

此处时间消耗较长,故将前面河网的Con("Flow_Accumulation" >= 1000, 1)中的1000改为4500。

(2)集水区分析

- Spatial Analyst->水文分析->集水区

第一行填流向栅格,第二行填上面的河流链接后的栅格。

同理,仍需要在环境中将“并行处理因素”空白处填入“0”。

 效果如下,有明显的分块迹象。

可以选择别的颜色

 当然,上面的河网也可以分级。

补充:河网分级(紧接在3.4.之后)

- Spatial Analyst工具->水文分析->河网分级

第一行输入河网栅格,第二行输入流向

        其中分级方法有斯特拉勒分级法(Strahler)和郭氏分级法(Shreve)。本次选择shreve。

何时使用哪种方法

  1. 斯特拉勒分级法

    • 适用场景:适用于需要明确区分主干河流和支流的研究,特别是关注河流网络的拓扑结构和层次关系。
    • 优点:简单明了,易于理解和解释。
    • 缺点:对河流长度和流量的考虑较少,可能不适合需要详细流量分析的场景。
  2. 郭氏分级法

    • 适用场景:适用于需要考虑河流长度和流量的研究,特别是在水文分析和流量模拟中。
    • 优点:考虑了河流的长度和流量,提供了更详细的河流分级信息。
    • 缺点:计算相对复杂,可能需要更多的数据和计算资源。

- 打开“Spatial Analyst Tools” -> “Hydrology” -> “Stream to Feature”(栅格河网矢量化)

 点击“符号系统”->“唯一值”->“改为grid code”->添加所有值

河网分级效果如下: 

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

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

相关文章

C# 企业微信机器人推送消息 windows服务应用程序的使用

C# 企业微信机器人推送消息 先添加一个机器人! 然后查看机器人就可以得到一个 webhook 特别特别要注意:一定要保护好机器人的webhook地址,避免泄漏! 然后开始写代码 ,只需要httpPost 调用一下这个地址就可以发送消息了。 首先我…

Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法

今天打开博客的时候,意外发现页面,打开均显示错误:Undefined array key 0 (set_error_handler)。 博客程序采用的是Z-BlogPHP。百度了一圈没有找到解决办法,在官方论坛里也没找到解决办法。 于是开始自己排查原因。我服务器采用…

【vue3|第29期】Vue3中的插槽:实现灵活的组件内容分发

日期:2024年10月24日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不…

【分立元件】低阻值电阻器的趋势(Face down type)

低阻值电阻器不仅可正确显示电阻器的阻值,还是小型、大功率产品或散热性优良的产品所必不可少的。 为了应对大功率或提高散热性,一般使用较大贴片尺寸的产品或长边电极型产品。 但是,如果贴片尺寸变大,就需要一定的贴装空间,还会减弱温度循环试验强度。 长边电极型…

利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)

文章目录 1、Mycat介绍1.1、mycat简介1.2、mycat重要概念1.3、Mycat1.x与Mycat2功能对比1.2、主从复制原理 2、前提准备3、集群规划4、安装和配置mysql主从复制4.1、master节点安装mysql8容器4.2、slave节点安装mysql8容器4.2、配置主从复制4.3、测试主从复制配置 5、安装mycat…

yolov11的onnx模型C++ 调用

yolov11的onnx模型C调用 效果图一、python调用二、onnx模型导出三、python的onnx调用调用检测模型调用分割模型 四、C的onnx模型调用五 、视频流的检测后续 效果图 一、python调用 本文只记录生成的yolov11模型如何调用,其他可参考各种yolov11博客 模型下载&#x…

万年历制作

#include<stdio.h> int main() { int year0, month0, day0, y0, m0&#xff1b; scanf_s("%d %d", &year,&month); //判断闰年 for(y1900;y<year;y) { if ((y % 4 0 && y % 100 ! 0) || y % 400 0) …

C语言[求x的y次方]

C语言——求x的y次方 这段 C 代码的目的是从用户输入获取两个整数 x 和 y &#xff0c;然后计算 x 的 y 次幂&#xff08;不过这里有个小错误&#xff0c;实际计算的是 x 的 (y - 1) 次幂&#xff0c;后面会详细说&#xff09;&#xff0c;最后输出结果。 代码如下: #include…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据&#xff0c;当前支持两种类型的metastore&#xff1a; 文件系统&#xff08;默认&#xff09;&#xff1a;将元数据和表文件存储在文件系统中。hive&#xff1a;在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。 2.2.1 文件系统…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了&#xff0c;请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux)&#xff1a;sudo yum install epel-release2.接下来&#xff0c;使用以下命令来安装FFmpeg&#xff1a;sudo yum install ffmpeg …

remote: HTTP Basic: Access denied

解决方法 输入&#xff1a; git config --system --unset credential.helper 再次进行 Git 操作&#xff0c;输入正确的用户名&#xff0c;密码即可。

static、 静态导入、成员变量的初始化、单例模式、final 常量(Content)、嵌套类、局部类、抽象类、接口、Lambda、方法引用

static static 常用来修饰类的成员&#xff1a;成员变量、方法、嵌套类 成员变量 被static修饰&#xff1a;类变量、成员变量、静态字段 在程序中只占用一段固定的内存&#xff08;存储在方法区&#xff09;&#xff0c;所有对象共享可以通过实例、类访问 (一般用类名访问和修…

OpenHarmony(1)开发环境搭建

一&#xff1a;开源项目 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;目标是面向全场景、全连接、全智能时代&#xff0c;基于开源的方式&#xff0c;搭建一个智能终端设备操作系统的框架和平台&#xff0…

使用SQL在PostGIS中创建各种空间数据

#1024程序员节&#xff5c;征文# 一、目录 1. 概述 2. 几何&#xff08;Geometry&#xff09;类型 创建点 创建线 创建面 3. 地理&#xff08;Geography&#xff09;类型 地理点&#xff08;GEOGRAPHY POINT&#xff09; 地理线串&#xff08;GEOGRAPHY LINESTRING&#xff…

Redis 单机、主从、哨兵和集群架构详解和搭建

目录 前言 单机部署 检查安装 gcc 环境 下载安装 Redis 启动 Redis 关闭 Redis 配置Redis 主从部署 整体架构图 主从复制配置 重启 Redis 验证 主从复制的作⽤ 主从复制缺点 哨兵部署&#xff08;Sentinel&#xff09; 整体架构图 哨兵模式配置 启动哨兵 验证…

MySQL-32.索引-操作语法

一.语法 二.代码实现 指定某个字段为主键&#xff0c;其实就是建立一个主键索引。而指定某个字段唯一&#xff0c;就是建立一个唯一索引。 -- 索引 -- 创建&#xff1a;为tb_emp表的name字段建立一个索引 create index idx_emp_name on tb_emp(name);-- 查询&#xff1a;查…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

基于java的山区环境监督管理系统(源码+定制+开发)环境数据可视化、环境数据监测、 环境保护管理 、污染防治监测系统 大数据分析

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息&#xff0c;例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事&#xff0c;如图…

Postgresql 配置数据库表添加主键自增id

#1024程序员节&#xff5c;征文# 在 PostgreSQL 数据库中&#xff0c;如果你想创建一个自增的 ID 字段&#xff0c;通常会使用序列&#xff08;sequence&#xff09;配合默认值或者使用带有自动递增特性的 SERIAL 类型。以下是两种常见的方法来实现自增 ID&#xff1a; 使用 …