利用水文分析方法提取山脊线和山谷线(ArcPy实现)

一、背景

作为地形特征线的山脊线、山谷线对地形、地貌具有一定的控制作用。它们与山顶点、谷底点以及鞍部点等一起构成了地形起伏变化的骨架结构。同时由于山脊线具有分水性,山谷线具有合水性特征,使得它们在地形分析中具有特殊的意义。

二、目的

了解基于DEM水文分析方法提取山脊线和山谷线的原理;掌握水流方向、汇流累积量提取原理及方法。

三、要求

利用ArcGIS水文分析模块提取出样区的山脊线和山谷线。

四、数据

25m分辨率的DEM数据,区域面积约140km²(\ChP11 \Ex1目录中)。

五、算法思想

山脊线和山谷线的提取实质上也是分水线与汇水线的提取。因此,可以利用水文分析的方法进行提取。

对于山脊线而言,由于它同时也是分水线,而分水线的性质即为水流的起源点。所以,通过地表径流模拟计算之后,这些栅格的水流方向都应该只具有流出方向而不存在流入方向,即栅格的汇流累积量为零。因此,通过对零值的提取,就可得到分水线,即山脊线。

对于山谷线而言,可以利用反地形计算。即利用一个较大的数值减去原始DEM数据,得到与原始DEM地形相反的地形数据,使得原始的DEM中的山脊变成反地形的山谷,而原始DEM中的山谷在反地形中就变成了山脊。再利用山脊线的提取方法就可以实现山谷线的提取。但是此方法提取出的山脊和山谷位置有些偏差,可以利用正、负地形加以纠正。

流程图

六、模型构建器

七、ArcPy实现

山谷线提取

# -*- coding: utf-8 -*-
import arcpy
from arcpy.sa import *
print "输入示例:D:\桌面\Chp11\Ex1"
arcpy.env.workspace = raw_input("请输入数据所在的文件绝对路径:").decode('utf-8')
fd = Test('dem' - FocalStatistics('dem', "Rectangle 11 11 CELL", "MEAN"), 'value<0')  # 求负地形
a = Abs(Minus(5000, "dem"))  # 作差取绝对值
b = FlowDirection(a)  # 流向
c = FlowAccumulation(b)  # 流量
d = Test(c, 'value=0')  # 条件测试
Con(fd*d, 1).save("山谷线")  # 条件函数

山脊线提取

# -*- coding: utf-8 -*-
import arcpy
from arcpy.sa import *
print "输入示例:D:\桌面\Chp11\Ex1"
arcpy.env.workspace = raw_input("请输入数据所在的文件绝对路径:").decode('utf-8')
zd = Test('dem' - FocalStatistics('dem', "Rectangle 11 11 CELL", "MEAN"), 'value>0')  # 求正地形
a = Fill('dem')  # 填洼
b = FlowDirection(a)  # 流向
c = FlowAccumulation(b)  # 流量
d = Test(c, 'value=0')  # 条件测试
Con(zd*d, 1).save("山脊线")  # 条件函数

八、结果



实验结束 byebye~~~

>>点我跳转 > 文章推荐

posted @ 2021-10-05 23:07  槑孒  阅读(1212)  评论(0编辑  收藏  举报