山顶点是指局部区域内海拔最高点,通常位于山脊或山脉的高处,周围地形在水平或垂直方向上均低于该点。山顶点是地形地貌中的重要特征点,是地形起伏的关键标志点,山顶点的分布特征(密度、高程)能反映地形地貌的发育特征,如区域构造运动(抬升、断裂)或外力侵蚀强度(如河流切割、冰川侵蚀)等。
一、高程差提取山顶点
由于山顶点是局部区域的最高点,因此可以利用高程差的方式进行提取。原理为利用邻域分析方法提取局部最高点,其与原始地形的差值即有可能为山顶点(实验数据于文末下载链接或点击文末阅读原文获取)。
1. 局部最大值
Spatial Analyst 工具➡️邻域分析,打开焦点统计工具❶。输入栅格下拉菜单选择原始DEM图层❷,输出栅格选择保存位置并命名(本例为dem_max)❸,邻域设置输入分析窗口大小(本例为17×17)❹,统计类型下拉菜单选择MAXIMUM(即最大值)❺,确定❻。
得到研究区分析窗口为17的邻域分析最大值图层。
2. 高程差值
Spatial Analyst工具➡️地图代数,打开栅格计算器❶。在对话框输入公式:最大值-原始值(鼠标双击两个图层及减号,切勿手动输入公式。本例为‘dem_max’ – ‘dem_test’)❷。输入栅格选择保存位置并命名(本例为minus)❸,确定❹。
得到最大值与原始值的差值图层。
3. 山顶点提取
最大值减原始值,如果值为0,则为山顶点,因此只需要保留差值图层为0的区域。
再次打开栅格计算器,输入公式:‘minus’ == 0,输出栅格选择保存位置并命名(本例为minus0)。确定。
得到仅保留差值为0的结果。
此时可能看不太清潜在山顶点在哪里,局部放大即可,其中图层属性值0为背景层,属性值为1的即为潜在山顶点(本例为黑色点)。
将背景值去除,仅保留潜在山顶点。3D Analyst 工具➡️栅格重分类,打开重分类工具❶。输入栅格选择上步计算结果minus0图层❷,重分类中,0对应NoData,1对应1,NoData对应NoData❸。输出栅格选择保存位置并命名(本例为minus_rec)❹。确定❺。
得到重分类后的结果。
4. 栅格山顶点转矢量栅格点
此时得到的潜在山顶点实际上是栅格图层,同时并不是所有的山顶点都是一个栅格,有的是由几个栅格组成的面状山顶(有可能是山顶夷平面),例如下图所示由三个栅格组成。
转换工具➡️由栅格转出,打开栅格转面工具❶。输入栅格下拉菜单选择重分类结果图层minus_rec❷,输出面要素选择保存位置并命名(本例为矢量面山顶点)❹,确定❺。
得到转化为矢量面的山顶点。
通常山顶点为点要素,而上步转化成的为矢量面,因此还需要将矢量面山顶点转换为点要素。数据管理工具➡️要素,打开要素转点工具❶。输入要素下拉菜单选择矢量面山顶点图层❷,输出要素类选择保存位置并命名(本例为山顶点)❸。确定❹。
得到最终的山顶点。
叠加山体阴影后(具体配置步骤见GIS制图(6):图层叠加技巧,打造高质感地图),效果如下:
二、负地形洼地提取山顶点
基于负地形洼地提取山顶点,其原理是将原始地形变为负地形或反地形,使原始地形中的山顶点(局部最高点)变为反地形中的洼地点(局部最低点)。这样做的好处是可以规避邻域分析中平坦区域伪山顶点的干扰,通过洼地填充的连续性分析提升精度。
1. 负地形计算
Spatial Analyst 工具➡️地图代数,打开栅格计算器❶,给原始DEM图层乘-1,将地形反转,公式框输入: – 1 * ‘dem_test’ ❷, 输入栅格选择保存位置并命名(本例为dem_reverse)❸,确定❹。
得到负地形图层。

2. 流向
洼地计算前需要先计算流向。Spatial Analyst 工具➡️水文分析,打开流向工具❶。输入表面栅格数据下拉菜单选择负地形图层dem_reverse❷,输出流向栅格数据选择保存位置并命名(本例为direction1)❸,确定❹。
得到负地形流向图层。
3. 提取洼地
Spatial Analyst 工具➡️水文分析,打开汇❶。输入流向格栅数据选择上步计算的流向图层direction1❷,输出格式选择保存位置并命名(本例为sink)❸。确定❹。
得到负地形的洼地,即正地形的潜在山顶点。
此时的图层仍然为栅格面图层,需要将其转换为矢量点,先用栅格转面工具将栅格面转为矢量面(命名为矢量面山顶点1),再用要素转点工具转换为点(命名为山顶点1),具体步骤见方法一相关步骤。得到最终利用洼地提取的潜在山顶点。
可以看到,因为此方法没有经过邻域窗口提取局部最大高程,所以利用洼地提取的潜在山顶点,较方法一,要多很多,负地形有洼地的地方均认为是山顶点,会产生很多冗余的伪山顶点,可以利用等高线对伪山顶点进行剔除。
4. 伪山顶点的剔除
3D Anlyst 工具➡️栅格表面,打开等值线工具❶。输入栅格下拉菜单选择原始DEM图层❷,输出要素类选择保存位置并命名(本例为contour)❸,等值线间距设置50❹(根据需要自行尝试合适的间距,这个仅作示例),其它项默认。确定❺。
得到等高线面图层。
将等高线转化为面:数据管理工具➡️要素,打开要素转面工具❶。输入要素下拉菜单选择等高线图层contour❷,输出要素类选择保存位置并命名(本例为等高线矢量面)❸。确定❹。
得到等高线矢量图层。
上方菜单栏选择❶➡️按位置选择❷,打开按位置选择对话框,选择方法➡️从以下图层中选择要素,在目标图层下的山顶点1前面打勾❸,源图层选择等高线矢量面图层❹,目标图层要素的空间选择方法选择与源图层要素相应❺,应用❻,并确定❼。
在等高线矢量面内的山顶点被选中。
此时,选中的为真的山顶点,而其它的则为伪山顶点,需要删除。选择山顶点图层❶,右键打开属性表❷,在属性表对话框中,单击切换选择按键❸,即可将伪山顶点全部选中。
上方菜单栏编辑器➡️开始编辑❶,在弹出的对话框中选择山顶点1❷,确定❸。此时山顶点图层已经处于编辑状态,直接按键盘上的Del删除键,删除伪山顶点即可。
小结
山顶点,多大范围内最高点属于山顶点?笔者并未进行文献资料查阅。如果地势平坦,仅有一个孤峰,那无疑只有一个山顶点;如果是峰群,其中山峰规模大小不同,多大规模的山峰最高点算山顶点?
本节的两种山顶点提取方法,各有优劣,并且各自在提取的时候受多种因素的影响。但是建议大家用第一种方法。
利用高程差在进行邻域最大值提取时,分析窗口影响至关重要,这在前面好多计算中已经说明过,不同邻域分析窗口体现的尺度不一样,会得到不同空间尺度大小的山顶点,也就控制着山顶点的分布密度,需要根据研究需要选择最适合的窗口大小。
利用高程插值提取的山顶点,也可以叠加山体阴影、等高线,对伪山顶点进行剔除,同时可以添加遗漏的山顶点。
而利用负地形提取时,本说明中并没有对原始DEM图层进行水文分析中的填洼处理,而是直接计算的流向,填洼对结果到底有没有影响,留给大家自行尝试。同时也应该注意到,由于负地形的洼地较多,并不是所有洼地都是山顶点,所以需要用等高线去限定,但是等高线在计算时的参数设置对结果也有很大的影响。假设如果所有等高线均闭合,那需要确定多大闭合面积的等高线内的山顶点是真正的山顶点,这个面积阈值也需要讨论。
对比两种方法提取出的山顶点,高差方法在流域边界有山顶点分布,而负地形方法没有,这显然和实际不符,因此建议大家使用前者,第二种方法仅提供思路参考。
END
#artContent h1{font-size:16px;font-weight: 400;}#artContent p img{float:none !important;}#artContent table{width:100% !important;}