地形鞍部的提取(ArcPy实现)
1、背景
相邻两山头之间呈马鞍形的低凹部分称为鞍部。鞍部点是重要的地形控制点,它和山顶点、山谷点及山脊线、山谷线等构成地形特征点线,对地形具有很强的控制作用。因此,因此,对这些地形特征点、线的分析研究在数字地形分析中具有很重要的意义。同时,由于鞍部点的特殊地貌形态,是的鞍部点的提取方法较山顶点低谷底点更难,目前都还存在一定的技术局限性。
2、目的
利用水文分析的方法提取地形鞍部点;
通过多种GIS空间分析方法的应用,提高对知识的综合运用能力。
3、要求
利用水文分析模块和空间分析模块相应功能提取样区地形鞍部点。
4、数据
25m分辨率的DEM数据,面积约为59平方千米。(数据来自汤国安《arcgis地理信息系统空间分析实验教程(第二版))
5、算法思想
鞍部具有独特的形态特征,可被认为是原始地形中的山脊和反地形中的山脊回合的地方,因此可通过提取正反地形的山脊线并求其交点,获得鞍部点,鞍部点的提取流程如下图所示。
6、模型构建器
注意:这里山脊和反山脊的提取只需要提取到流量等于0的地方。
7、ArcPy实现
# -*- coding: utf-8 -*-
import arcpy
from arcpy.sa import *
print "输入示例:D:\桌面\Chp11\Ex2"
arcpy.env.workspace = raw_input("请输入数据所在的文件绝对路径:").decode('utf-8')
# 变量z(正)开头为山脊线提取的前部分步骤,变量f(负)开头为山谷线提取的前部分步骤
zdx = Test('dem' - FocalStatistics('dem', "Rectangle 11 11 CELL", "MEAN"), 'value>0') # 求正地形
za = Fill('dem') # 填洼
zb = FlowDirection(za) # 流向
zc = FlowAccumulation(zb) # 流量
zd = Test(zc, 'value=0') # 条件测试
fa = Abs(Minus(5000, "dem")) # 作差取绝对值
fb = FlowDirection(fa) # 流向
fc = FlowAccumulation(fb) # 流量
fd = Test(fc, 'value=0') # 条件测试
c = Con(zd*fd*zdx, 1) # 条件函数
arcpy.RasterToPoint_conversion(c, "鞍部点") # 栅格转点
8、结果
注:生成的鞍部点有点多,得后续配合等高线数据和晕渲图对矢量形式的鞍部点数据进行编辑,剔除那些处于样区边缘以及内部的伪鞍部点。最后得到的鞍部点数据如下图所示:
实验结束 byebye·~