ArcGIS水文分析实战教程(16) ArcHydro 修正地形

2023-11-01

ArcGIS水文分析实战教程(16) ArcHydro 修正地形

本章导读:前面的十几个章节几乎都是通过使用 DEM 数据进行水利数据的提取,水利数据都是基于地形进行衍生。但现实中一般很难得到非常精确的 DEM 数据,如果 DEM 的精度不能确保,那么提取出来的数据很难与其他现有的矢量数据进行叠加使用。本章通过 ArcHydro 工具对地形进行修正,修正后的地形则可以与现有的矢量数据进行叠加使用,更加贴合实际情况。 BY 李远祥

使用 DEM 提取水利要素的利与弊

前面十几个章节的内容几乎都是围绕 DEM 数据衍生出诸如河流、流域等水利要素。这种做法有它的好处也有它的弊端。

好处是利用地形能够快速的生成河流和流域,便于从自然角度上圈出对应的水文范围;DEM 本身带有地形起伏的信息,而经过流向分析之后,提取出来的自然河流本身带准确的流向,这样可以为后期水文信息化提供了精细而准确的数据来源。

弊端也是非常明显。首先地形数据本身很难获取(至少在国内是这样的情况),包括等值线、高程控制点或者原始的 DEM 数据,这给基于地形的水文分析带来了一定的困扰。虽然网上也可以下载到全球免费的 DEM 数据,但 30 米精度的 DEM 对于大江大河没有太大的问题,对于小河流和小流域,那是在不敢恭维。其次,很多水文单位已经有固定的河流矢量数据(这些河流一般都是通过实际测绘进行标绘的),并且所有的断面数据均基于这些现有的矢量河流数据进行标绘,所以,不论是 DEM 提取的河流还是出水口、河源、节点等都无法跟现有的矢量数据进行叠加使用。

先来看看测绘的河流与 DEM 提取的河流的差异。笔者利用网上免费的 30 米 DEM 数据进行河流的提取,提取结果如下。

DEM提取河流

再来对比一下通过测量回来的矢量河流
测绘的河流

从两图对比可以看出,DEM 计算出来的河流虽然能够查找出一些区域上可能没有测绘的河流,但它生成的河流比较偏平直,细节部分表现不足,这是有 DEM 数据精度导致。

接下来将两个图层叠加对比一下,还是存在一定的偏差的。如下图所示
河流对比

在不做任何处理的前提下,通过 DEM 衍生出来的水利要素,基本上不能直接使用,它只能反映出一定的河流关系,而不是实际河流的位置。就算 DEM 精度再高,但提取出来的河流与测绘的河流还是两份不一样的数据,始终还是会存在偏差的。

再来看流向的问题。如果使用河流线要素的数字化方向(绘制河流图形时起点和终点决定了其数字化方向)作为河流的流向,那么,DEM 提取的河流的流向是绝对正确的,这根本上不需要到实地去调查(沿海出海的河流受涨潮的影响存在时间的差异)。

下图是基于 DEM 提取的河流,使用地形渲染去显示 DEM ,反映地形的起伏,用箭头符号描述河流线的数字化方向。

可以看到,河流基本上是从地形高的地方流向地形低洼的地区。这说明河流方向是正确的。

再来看同样区域的测绘的河流,其流向很大程度取决于内业标会时的规范性。如果按照河流的自然流向进行标绘,流向当然不会出现问题。但如果只是标绘出图形,而没有考虑流向,那么就会出现下图的情况,河流方向逆反。

如果在后期手动去修改河流流向,不是不可以,但工作量还是比较大的,需要将 DEM 的河流叠加上去作为参考,在编辑状态下修改测绘河流的数字化方向。

利用 ArcHydroTools 来修正地形

如何解决测绘数据与 DEM 衍生数据的使用问题?答案很简单,就是改进地形数据。利用测绘的河流作为参考,写入到 DEM 中,从而实现地形改善,让测绘的河流所在的像元都处于水流的最低点。 这个过程可以理解为将测绘的河流数据刻入到地形中,在地形中形成一条汇水的渠道。

ArcMap 原生的工具中没有提供地形修正的工具,这就必须依赖于外部工具 ArcHydro Tools 。这是一个非常专业的水文分析工具集合,是基于 ArcGIS 平台的扩展。ArcHydro Tools 由来已久,ArcGIS 9.x 就已经有该工具集,而且开发团队会适配每一个版本的 ArcGIS 。可以从官方的下载地址去找到它。地址如下 http://downloads.esri.com/archydro/archydro/ ,从官网中可以看到,其包含了文档、程序包、样例数据等。

在 Setup 项中可以下载到各个 ArcGIS 版本适配的程序。没有区分所谓的 .1 版本,对应的都是大版本号。目前连 ArcGIS Pro 的版本都有。

ArcHydroTools 是一个只有几十兆的安装包,安装完之后可以在 ArcMap 找到工具条和工具箱,与 ArcMap 传统的模式一样,工具与工具箱的工具还是比较对应的。当然,工具箱的话可以制作成为 GP 工具,发布成 GP 服务。

由于 ArcGIS10.1 之后 ArcGIS Server 已经是64位应用程序,所以,如果要在 Server 端发布 GP 服务,32位和64位的 ArcHydroTools 应用都必须安装。

ArcHydroTools 有非常多的工具,这里作详细介绍,关键功能上扩展了原生 Hydro 工具箱中的工具。回到本文的关键问题,如何通过改善地形去生成合适的河流要素。

ArcHydroTools 工具条中在地形处理的工具集合,可以找到 DEM Reconditioning 工具。

这个工具的主要作用是将线要素强加到 DEM 上来修正 DEM 数据。其操作比较简单,就是输入 DEM 以及河流要素,设置一些缓冲值和平滑值,运算之后会将河流刻入到 DEM 中。

其中后面的几个参数分别对应

  • Stream Buffer:输入河流的缓冲值: 这是对线性要素进行缓冲的单元格数。
  • Smooth drop/raise:如果是正值, 这是线性要素在垂直方向将要下降的值;否则,是线性要素在垂直方向要升高的值。这个值用来把DEM值插入缓冲区(缓冲边界和线性要素之间)。
  • Sharp drop/raise: 如果是正值,这是线性要素在垂直方向将要下降的额外值;否则,是线性要素在垂直方向将要升高的额外值。这个结果作用于平滑缓冲插值之上,它用来保护线性要素。

再来看看运行的结果,使用默认的参数值进行计算。

可以看到生成的 AgreeDEM 中,黑色渲染部分基本上就是测绘河流的形状,将其在 DEM 中挖出一道道负值的深沟,这样在做流向分析的时候,水流自然会留到深沟中,形成与测绘河流形状一样的河流。

利用这个修正后的 DEM ,使用同样的河流提取流程和参数进行计算,生成的结果就非常贴合测绘的河流。如下图所示

再来看 DEM 生成的河流与测绘的河流的契合程度如何。下图蓝色线为 DEM 提取的河流,红色线为测绘的河流。

从图上可以看到,DEM 生成的河流基本上与原始河流契合。河流分叉又汇合的两个河段被融合成一个河段,这种情况是由于这两个分叉河段位置上比较靠近,工具的容差值较大造成的。

笔者使用的 DEM 数据为 30 米,按照默认缓冲参数为5个像元,那么改善的距离就是150米,两个河段各150米则距离小于300米的两个河段都会被融合。所以要根据实际的情况去输入一些参数。

对提取的河流显示流向,这一次所有的河流方向都是正确的了,并且与原始河流完全贴合。

接下来再来对比一下 DEM 修正前后的流域。

从两图可以看到 DEM 修正之后,流域面的多边形机会不会出现拉直线的现象。这比较符合分水岭围蔽的实现情况。

DEM 修正之后带来的好处是连锁的,由于加入了测绘的河流进行修正,当调小提取阈值,提取更小的河流时,这些小河流同样会通过地形很好的接入到测绘的河流中,并且河流的形状也更加贴近实际测量值。下图是调整阈值后生成的更小级别的河流。

从图上来看,支流的情况也是比较良好的。

修正了 DEM 之后,意味着可以将 DEM 衍生出来的数据与测绘回来的数据进行共用。这时候加入断面数据进行分析,分析的结果也更加准确。

相关小问题

ArcHydroTools 里面的工具,几乎全部不支持动态投影,这与 ArcMap 原生工具是有一定差异的。所以,在使用工具条或者工具箱工具的时候,输入的数据必须坐标系一致。例如,使用前面所说的 DEM Reconditioning 工具,DEM 与 河流坐标系不一致,工具使用会导致 999999 的错误。工具条工具使用时会弹出诸如

如果出现这些问题,那就需要对参与计算的数据进行坐标转换,确保所有的数据坐标系都一致,这个错误就不再出现了。

本章总结

利用 ArcHydroTools 中的 DEM Reconditioning 工具,使用测绘的河流数据进行修正 DEM 数据,可以让 DEM 衍生出来的水文要素更加贴近测量数据,并且生成更加准确的结果。

更多的GIS主流和非主流技术,可以持续关注CSDN的GIS制图乐园,以及微信公众号【GIS制图乐园】。BY 李远祥

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArcGIS水文分析实战教程(16) ArcHydro 修正地形 的相关文章

  • Win10系统下编译FFmpeg

    1 使用git下载源码 git clone git source ffmpeg org ffmpeg git ffmpeg 2 FFmpeg在windows平台编译需要使用MinGW w64来编译 单独使用MinGW w64比较麻烦 推荐使
  • pip镜像安装 python 安装库

    pip install openpyxl i https mirrors aliyun com pypi simple pip 本身更新 pip install upgrade pip vvv 上面是阿里云的 我用了特别快 语法 安装pip
  • 专利情况的基本了解

    专利 目标专利的拆解 提前关键词 构建检索式 适当的进行补充检 拆解已有技术的技术特征 申请书 说明书 权利要求 摘要 附图 优先权请求 发明 实用新型和外观设计 发明专利 实用新型专利和外观设计专利 发明专利 针对产品 方法或者产品 方法
  • c语言中两个有序数组合并,C语言算法:有序数组合并-2020-08-21

    方法 就是同时遍历两个数组 通过比大小 组成一个新数组 数组参数最好带上一个长度参数 防止越界 代码 合并数组 其中a b都是从小到大有序排列的数组 void mergeList int a int aLen int b int bLen
  • 高德地图api 地理编码(地址-->坐标)geocoder.getLocation在官方可以测试出结果,下载代码到本地却用不了 问题解决

    问题 高德地图api 地理编码 地址 gt 坐标 功能 通过输入 地址信息 得到 经纬度信息 geocoder getLocation在官方可以测试出结果 下载代码到本地却用不了 官方示例测试 可以从地址得到坐标 下载官方代码本地运行却出不
  • 最全的雅思8000词汇pdf_雅思听力场景分类词汇汇总,听力提分先搞定它!

    很多烤鸭来和哥聊天 聊听力的时候 大部分都会出现以下对话内容 为了让大家更加身临其境 我就做的趣味性点了哈 一 定 要 看 完 对 大家都是拿完资料就溜 一有问题就找哥谈心 不夸哥就算了 还不拿赞出来给哥 哼 抱住坚强的自己 擦干眼泪给你们
  • 2023 K8s 认证工程师 CKA 考题分析和题库练习(下)

    目录 10 考核知识 检查可用节点数量 题目内容 题目内容中文解释 做题解答 11 考核知识 一个 Pod 封装多个容器 题目内容 题目内容中文解释 官方文档搜索关键字 pod 编辑做题解答 12 考核知识 持久卷 PersistentVo
  • python列表+元组+字典+集合

    声明 本人的所有博客皆为个人笔记 作为个人知识索引使用 因此在叙述上存在逻辑不通顺 跨度大等问题 希望理解 分享出来仅供大家学习翻阅 若有错误希望指出 感谢 Python列表 序列中的每个元素都分配一个数字 它的位置 或索引 第一个索引是0
  • java设置多个数据源

    1 设置config properties文件 设置两个数据库连接 2 设置spring context xml文件 定义名为testDataSource和dataSource两个连接
  • LeetCode刷题顺序(新手入门)

    本刷题策略为leetcode官方的新手村策略 跟着主页官方的新手村策略刷题 按照每天刷三简单题或两中等题或一难题的速度刷题 每天预计花费1 5h 下面的顺序是探索卡中的顺序 数组 分为三部分 1 做好初始定义 2 运用基础算法思想 3 双索
  • 蛋白质组学数据的归一化/标准化处理

    1 前言 目的 调整由于技术 如处理 上样 预分 仪器等造成的样本间误差 这实际上是一种数据缩放的方法 一般在一个表达矩阵中 会涉及到多个样本 其表达量差异比较大 不能直接进行比较 比如某个样本表达量很大 在总体中就会占据绝对领导地位 这样
  • 邮件钓鱼的防守策略

    一 攻击背景 在历年的实战攻防演练中 人的漏洞是网络安全最大的脆弱点 而钓鱼攻击就是从内部攻破堡垒至关重要的手段 攻击者通过伪装成可信来源发送虚假邮件 诱导接收者点击恶意链接 提供敏感信息或执行恶意附件 从而获取机密信息或入侵系统 因此 在
  • MATLAB 之 基本概述

    文章目录 一 MATLAB 主要功能 1 数值计算功能 2 符号计算功能 3 绘图功能 4 程序设计语言功能 5 工具箱的扩展功能 二 MATLAB 操作界面 1 主窗口 2 命令行窗口 3 当前文件夹窗口 4 工作区窗口 5 搜索路径 三
  • [leetcode 周赛 149] 1154 一年中的第几天

    目录 1154 Day of the Year 一年中的第几天 描述 思路 代码实现 1154 Day of the Year 一年中的第几天 描述 给你一个按 YYYY MM DD 格式表示日期的字符串 date 请你计算并返回该日期是当
  • 【error】Lock wait timeout exceeded; try restarting transaction(mysql)事务锁

    目录 1 报错信息 2 解决方案 2 1 方案一 2 2 方案二 2 3 方案三 3 补充说明 3 1 三张表字段说明 原文链接 1 报错信息 背景 在做更新操作时 电脑重启了 重新运行mysql语句时报以下错误 报错信息 Lock wai
  • SQL中分组的一些用法group_concat

    分组查询 后面一篇文章我们将介绍MySQL的聚合函数 https blog csdn net qq 41453285 article details 88318318 group by通常与聚合函数放在一起使用 分组查询允许把数据分为多个逻
  • 高性能Mysql——分区表详解

    文章目录 分表和分区 分表和分区的区别 分表和分区联系呢 分区表分区方式 分区管理 分区表注意事项 分表和分区 分表 MySQL 的分表是真正的分表 一张表分成很多表后 每一个小表都是完整的一张表 都对应三个文件 一个 MYD数据文件 MY
  • html做群聊通讯方法,websocket学习和群聊实现

    WebSocket协议可以实现前后端全双工通信 从而取代浪费资源的长轮询 在此协议的基础上 可以实现前后端数据 多端数据 真正的实时响应 在学习WebSocket的过程中 实现了一个简化版群聊 过程和代码详细记录在这篇文章中 1 概述 1

随机推荐

  • 【转】JWT 登录认证及 token 自动续期方案解读

    转自 https mp weixin qq com s X6Xsxgbfvbf3JCa0i7q4 A 要实现认证功能 很容易就会想到 JWT 或者 Session 但是两者有啥区别 各自有什么优缺点 应该选择谁 JWT 和 Session
  • Java线程随笔

    目录 守护线程 线程可见性 线程时序性 线程的中断机制 守护线程 基本概念 守护线程可以简单理解为后台运行线程 守护线程不需要关心他的结束问题 java垃圾回收就是一个守护线程 例如你的应用程序运行时需要播放音乐 如果将播放音乐这个线程设置
  • iOS下XMPP开发之xmppFramework框架的导入步骤和介绍

    一个将要开发xmpp的项目 建议在项目刚创建就导入框架 这样可以避免一些自己操作失误造成不必要的损失 xmpp中最常用的框架就是 xmppFrameWork 第一种方法直接拖 1 gt 拖入文件夹 在网盘链接的xmppFramework文件
  • 【python手写算法】numpy实现简易神经网络和反向传播算法【1】

    import numpy as np def dense A W Z np matmul A W 矩阵乘法 return 1 1 np exp Z if name main leanring rate 100 A np array 200
  • 你真的懂JavaScript吗

    放在前面 本文原文的标题是 So you think you know JavaScript 在下感觉有些标题党了 不过看了下文章的链接还是很不错的 原文作者是由几个问题展开了说明 问题 1 浏览器的console里会打印出什么 var a
  • 黑客是如何获取足够的流量以支撑其发动DDOS攻击?

    对计算有一些了解的朋友可能都会知道DDoS是一种互联网最普及的攻击方式 也是一些黑客的初级入门的技巧 每一次进行大规模的DDoS的攻击 那打出来的流量都让人咂舌 动静大而且波及极为广阔 DDoS要的就是流量 大多数黑客基本上为获取流量而不择
  • 数字电路设计之verilog的门级描述

    使用verilog的数字电路设计 一般会有晶体管级的描述 门级描述 RTL 行为描述 我们接触得比较多的就是后面两种 前两种更少涉及 现在就说一下门级描述吧 门级描述就是使用各种逻辑门对组合逻辑进行描述 举个栗子 与或非门 这里的and o
  • Unity iPhoneX适配方案【NGUI&UGUI】

    本文作者旨在通过改锚点的方式 分别实现在NGUI和UGUI上的iPhone X适配技术方案 并结合自身项目经验 阐述了主要的实现细节 希望能对广大游戏开发团队有借鉴意义 适配来源 按照苹果官方人机界面指南 Apple 开发者中心 在iPho
  • python+django乡村居民数据的可视化平台

    本论文主要论述了如何使用Django框架开发一个乡村振兴数据的可视化平台 本系统将严格按照软件开发流程进行各个阶段的工作 采用B S架构 面向对象编程思想进行项目开发 在引言中 作者将论述乡村振兴数据的可视化平台的当前背景以及系统开发的目的
  • jsp验证码实现代码

    1 后台java代码 package com bobo base servlet import java awt Color import java awt Font import java awt Graphics import java
  • 哪个虚拟服务器免费,免费虚拟主机空间选择哪家会更好?

    虚拟主机在使用过程中需要提供比较大的空间 因为如果内存不足的话 会出现网站访问速度比较慢 或者直接卡顿和卡死的情况 当然现在市场中也有免费虚拟主机空间 大家在选择的时候就可以看看选择哪一家的虚拟主机空间效果会更好 或者在整体的使用性价比上更
  • ckeditor粘贴的图片自动上传

    环境 java springmvc freemaker ckeditor 在做项目的时候发现本地图片粘贴到ckeditor中 img标签的src中的值是 data image png base64 开头的 后面会跟一串字符串 图片越大字符串
  • 数字三角形1

    Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Figure 1 Figure 1 shows a number triangle Write a program that calculates the
  • 腾讯云服务器地域和可用区选择攻略及分布表更新

    腾讯云服务器地域是指物理数据中心的地理位置 不同地域之间网络完全隔离不能内网通信 可用区是同一个地域下电力和网络互相独立的区域 可用区之间可以做到故障隔离 同地域下的不同可用区之间可以内网通信 腾讯云服务器地域遍布全球 国内地域包括华南地区
  • ClickHouse+DBeaver安装总结(踩坑记录)

    原计划是在win上安装clickhouse 并打算用DBeaver对其进行操作 但后来问题较多 无法解决 使用云服务器安装ClickHouse 主机远程访问的方式代替 记录这个过程存在的问题 使用Docker安装clickhouse 参考链
  • SSM毕业设计分享 病人跟踪治疗信息管理系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 开发环境 3 3 系统流程 3 4 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最
  • Jmeter入门基础之线程组(Thread Group)

    大家好 我是Billie 很高兴能和大家一起学习Jmeter 目录 摘要 一 概述 参数配置 1 概述 2 配置参数 三 使用案例 新建线程组 四 补充内容 摘要 本篇文章主要介绍了线程组的参数配置和部分使用方法 提示 以下是本篇文章正文内
  • 使用Java进行操作RabbitMQ

    使用Java操作消息队列 现在我们来看看如何通过Java连接到RabbitMQ服务器并使用消息队列进行消息发送 这里一起讲解 包括Java基础版本和SpringBoot版本 首先我们使用最基本的Java客户端连接方式
  • sprintf函数详解

    函数功能 把格式化的数据写入某个字符串 头文件 stdio h 函数原型 int sprintf char buffer const char format argument 参数列表 buffer char型指针 指向欲写入的字符串地址
  • ArcGIS水文分析实战教程(16) ArcHydro 修正地形

    ArcGIS水文分析实战教程 16 ArcHydro 修正地形 本章导读 前面的十几个章节几乎都是通过使用 DEM 数据进行水利数据的提取 水利数据都是基于地形进行衍生 但现实中一般很难得到非常精确的 DEM 数据 如果 DEM 的精度不能