详解ArcGIS 水文分析模型构建

2024-05-24 04:20

本文主要是介绍详解ArcGIS 水文分析模型构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

项目环境、条件

Dem 数据预览

ArcGIS模型构建器

模型搭建

填洼

流向

流量

河流长度

栅格计算器

河流链接

河网分级

栅格河网矢量化

绘制倾泻点

栅格流域提取

集水区

盆域分析

栅格转面

模型应用

导出 py 文件

完善脚本

最终效果

结束语


前言

在地理信息系统(GIS)领域,水文分析是一项至关重要的任务,它涉及到对地表水流动路径、河流网络、流域划分等关键水文特征分析。这些分析对于水资源管理、洪水预警、环境规划以及城市排水系统设计等众多领域都具有重要的应用价值。

本文旨在探讨ArcGIS中水文分析的全过程,并展示如何构建一个可复用的水文分析模型。通过本文的学习和实践,读者将能够深入了解ArcGIS在水文分析方面的应用,掌握从数据预处理到模型构建、从模型运行到结果输出的整个流程。此外,本文还将介绍如何将ArcGIS模型脚本化,以提高模型的复用性和自动化程度。

在接下来的章节中,我们将详细介绍水文分析的各个步骤,包括资料背景的准备、操作中可能出现的问题及注意事项、分析框架的梳理、水文模型的搭建、模型思维和图形化界面的构建等。通过这些内容的学习,读者将能够全面掌握 ArcGIS 水文分析的相关知识和技能。

项目环境、条件

  • ArcGIS 10.8 中文包
  • 已开启 Spatial Analyst Tools 分析工具
  • Win 10 数据集 30 m dem 栅格数据集 

 ArcGIS 10.2 也几乎一样,部分工具可能由翻译问题,建议初学者完全按照本文的文档结构进行。

Dem 数据预览

DEM(Digital Elevation Model,数字高程模型)是一种用于表示地表地形起伏的数字模型。它通过规则格网的矩阵形式,记录每个格网单元的高程值,从而在计算机中构建出地形的三维模型。DEM 是地理信息系统(GIS)中重要的空间数据类型之一,广泛应用于地形分析、水文模拟、城市规划、地质灾害评估等多个领域。 Dem 可以通过地理空间数据云、QGIS 插件、CAD 地形文件生产等多种方式获取。此前有介绍,本文不多赘述。

image.png

ArcGIS模型构建器

ArcGIS模型构建器是Esri公司开发的ArcGIS软件中的一个强大工具,它允许用户通过图形化界面来创建、编辑和运行一系列自动化的GIS分析模型。模型构建器的核心优势在于能够将复杂的GIS分析流程简化为一系列可视化的步骤,使得用户无需编写代码即可完成复杂的空间分析任务。 可以在空白文件夹下,点击按钮打开,也可以在文件夹内,右键打开。 

image.png

 建议像笔者一样,建立好文件夹框架,依次新建文件数据库-工具集-模型。 

image.png

 在模型构建器中,数据类型如下,本文将用到项目数据、工具、派生数据和值等类型。 

image.png

 将数据、工具等可以直接拖入模型界面中,非常方便。

模型搭建

填洼

dem-填洼-fill 

填洼(Fill)是去除 dem 中的洼地(sinks)或凹陷(depressions)。这些洼地在地形分析中可能会导致错误的水流方向和流域划分,需要通过填洼操作来纠正。 

image.png

image.png

流向

fill-流向-FlowDirection

注意选着 fill 时需要选择蓝色循环的那个,为变量值。 

image.png

image.png

image.png

流量

FlowDirection-流量-fillacc 

image.png

image.png

 根据栅格数值大小隐约能看出河流的线条。 

image.png

 点击栅格可以查询该处的数值,通过这种方法判断最小径流的值,后面有用。 

image.png

河流长度

FlowDirection-河流长度-flowlength 测量方向选择 upstream。

水流长度工具的主要用途是计算给定盆地内最长水流的长度。该度量值常用于计算盆地的聚集时间。这可使用 UPSTREAM 选项来完成。该工具也可通过将权重栅格用作下坡运动的阻抗,来创建假设降雨和径流事件的距离-面积图。 

image.png

image.png

栅格计算器

栅格计算器 或者条件函数 栅格计算器(Raster Calculator) 条件函数 Con(FlowAccu>R,1) 目的是将流量栅格数据中提取河流的部分,公式为"flowacc" >= 1000。 在模型构建器中使用左右%代表变量。新增一个变量,作为流量限值 R,建议通过流量栅格 (flowacc), 点击查询河流的最小栅格,我这里根据实际情况,选择输入 1000。 

image.png

具体公式以自己实验为准,添加变量后,修改为"%fillacc%" >= "%任意值%" 

image.png

 记得点击任意值,添加 1000,这样以后只需要修改这个值,就可以调整河流长度了。 Acc 1000 结果,可见满足条件的,也就是河流为 1,不满足的为 0. 

image.png

河流链接

acc1000+FlowDirection=Streamlink by 河流链接

河流链接的作用有:构建连续的河流网络:河流链接工具能够识别并连接相邻的河流段,确保河流网络在空间上是连贯和正确的。分配唯一标识符:给河流网络中的每个部分分配唯一的 ID,便于管理和进一步分析。这有助于区分不同的河流分支和主流,以及分析它们各自的属性(如流量、长度等)。优化数据结构,减少在模型中处理大量独立线段时的复杂性。

image.png

image.png

河网分级

acc1000+FlowDirection=StreamOrder by 河网分级

河网结构用于识别河流上下级,常见的河网分级方法有斯特拉勒(Strahler)、希科特(Horton)和谢内(Shreve)等。斯特拉勒法是最常用的,它基于河流交汇规则来分配等级,即每次支流汇入时,如果两支流的等级相同,则合并后的河段等级加1;如果不同,则高等级保持不变。 

image.png

image.png

栅格河网矢量化

StreamOrder+FlowDirection=StreamOrder1000 by 栅格河网矢量化

顾名思义,栅格河网矢量化就是将河流网络的栅格数据转换成矢量数据格式,便于分析、可视化及水文建模应用。注意如果要增加河流长度等字段,需要在投影坐标系下进行。 

image.png

image.png

绘制倾泻点

StreamOrder 1000+end=FeatureVert_1000 By要素折点转点 

倾泻点是指汇流区域中具有最低高程的边界象元。它标志着水从一个流域流向另一个流域的出口点,或者是水流离开一个封闭流域(如盆地)的地点。 可以通过要素折点转点生成,也可以根据自己手工增加,形式是一些离散的点。 要素折点转点,顾名思义,指通过矢量线的折点或转点然后生成点,有 all、mindle、end、start、both_ends、dangle(悬挂点,指离散点) 等类型,绘制倾泻选择 end 。

image.png

 倾泻点非常关键,是汇水区分析的重要参数,除了自动生成的点外,可以根据实际需要,添加、删除点。 

河流与倾泻点

栅格流域提取

集水区

FlowDirection+FeatureVert_1000=倾泻点字段为空=watersh

集水区也就是分水岭,根据流向和倾泻点一起做的汇水范围。有倾泻点的会比盆域分析更细,他与倾泻点的点位有很大关系。

image.png

image.png

盆域分析

流向 FlowDirection 盆域分析= basin 盆域分析,也就是流域分析,可以理解为没有倾泻点的大范围流域分析。 

image.png

image.png

栅格转面

RasterT_basin /RasterT_watersh

上述流域栅格,转为矢量图层。用于可视化和计算,作用与栅格河网矢量化类似。 basin/watersh 栅格转面

image.png

子流域范围.png

至此,水文分析基本结束。 调试模型,运行成功。 

image.png

调整模型架构,让连接线不交叉。 

image.png

模型应用

导出 py 文件

可以导出 py 文件,进行模型复用。在 ArcGIS 环境中导入脚本,注意导入前修改绝对地址注意保持一致。另外它基于 ArcPy 模块,一个专为 ArcGIS 设计的空间分析和数据处理库。因此,它的运行环境依赖于 ArcGIS,使用 ArcGIS Python 2.X 环境编写的。不能用于 python 3 中。 经过测试,代码并不能直接使用,需要重新编译后才能使用,后续会出一期 python 水文分析的文章。

完善脚本

  1. 将 dem 输入变为变量,方法为新增变量-栅格数据集,然后选择对应的 dem 位置。
  2. 重命名,将 dem 命名为输入 dem。双精度命名为输入流量下限值。
  3. 完善模型参数,模型-模型属性-参数将输入 dem、输入流量下限值作为必填项

image.png

最终效果

点击模型打开,输入 dem 和下限值,点击运行。 

1716431898456.png

image.png

 运行成功,结果输出在模型内指定的文件夹。 

image.png

 重新运行将会替换结果文件,运行一次后,结果移动出来,再次使用。总之,非常方便。

结束语

本文通过详细探讨ArcGIS水文分析的全过程,不仅展示了如何利用ArcGIS模型构建器来创建一个高效、可复用的水文分析模型,还深入介绍了模型构建器的图形化界面和强大功能。通过本文的学习,读者可以清晰地看到,即使是GIS编程新手,也能通过模型构建器实现复杂的空间分析任务,而无需深入代码层面。

最近,我新开了微信公众号(环境猫 er),坚持发布 python 环境业务解决方案,python 办公自动化,GIS 作图经验,学习笔记,办公技巧,工具分享等内容。 坚持 Bulid in public ,希望与你一起加油,一同成长。 

还可以关注我的博客 wallflowers (maoyu92.github.io)

  

  

这篇关于详解ArcGIS 水文分析模型构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997356

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要