如何将DEM数据转换成矢量与栅格两种地形表达的等高线图?

摘要:深入解析等高线地形图的矢量与栅格两种生成原理,并通过 C++ 代码从零实现 DEM 到等高线的完整流程,揭示 GIS 地形表达的核心逻辑。
本文节选自新书《GIS基础原理与技术实践》第6章。很多人会用 gdal_contour 一键生成等高线,但你知道它背后是如何通过三角网或格网 DEM 计算交线的吗?本文带你从零实现矢量等高线提取与栅格分层设色图生成,真正理解地形表达的本质。 6.6 等高线地形图 地形的表达除了前文介绍的基于栅格形式的格网DEM和基于矢量形式的不规则三角网DEM之外,还有一种表达方式:等高线地形图,简称等高线图。等高线图的历史非常悠久,是一种非常经典的地形表达方式,在高中地理中就有详细的介绍和考察(有趣的是在国内的课程设置中,高中地理属于文科,本科的地理信息系统却属于理科,相信在进入大学后才接触到等高线图的人不止笔者一个)。 6.6.1 等高线图的基础理解 所谓等高线,就是把地面上海拔高度相等的点相连,垂直投影到水平面上,并按照一定的比例缩放绘制到图纸所得到的闭合曲线。如果我们按照一定高度差(等高距),从低到高依次绘制等高线,就得到了一张等高线图。如下图6.15所示: 等高线图虽然有不易识别的特点,但是其最大的优点就在于通过较少的信息量,就能够轻易识别出多种地形地貌,从而帮助我们做出地理空间相关的决策。一些典型的地貌包括: 1. 陡坡和缓坡 等高线密集的地方,坡度较陡,如图6.16(1)所示。而图6.16(2)所示的坡度较缓,因为其等高线较为稀疏,坡度较缓。如果我们进行爬山活动,应选择等高线稀疏的地方。 2. 山头和洼地 下图6.17中等高线(a)表示山头,等高线(b)为表示洼地,它们投影到平面上都是简单的闭合多边形曲线。两者的区别在于山头的内圈高程大于外圈,而洼地则相反。 3. 山脊、山谷和鞍部 山脊位于等高线弯曲的地方,其高程值沿着凸向从高到底,如下图6.18(a)所示。山谷则相反,等高线弯曲处从高程值低往高程值高的地方凸出,如下图6.18(b)所示。山脊弯曲处相连的线被称为山脊线,附近雨水在降落到这条线上时会分别流向山脊的两侧,因此山脊线被称为分水线。山谷弯曲处相连的线被称为山谷线,雨水会从两侧上坡流向谷底,容易发育河流,因此山谷线被称为集水线。分水线、集水线是土木工程中需要重点关注的问题。 鞍部是位于两个山头之间呈马鞍形的低凹部位,如下图6.18所示。鞍部是修建山区道路的关节点,可以考虑在鞍部修建越岭道路。 4. 绝壁和悬崖 绝壁是坡度在70°以上的陡峭崖壁,此时多条等高线的一部分会重叠,将这部分用锯齿状的符号表示绝壁,如下图6.19(a)所示。悬崖是上部突出,下部凹进的绝壁,这种地貌的等高线出现相交。这时隐蔽的等高线用虚线表示,如下图6.19(c)所示。 等高线图的另一个特点的是其并不完全是定性的,由于每一条等高线都会标注高程信息,很多情况下可以进行大致定量运算,比如估算等高线图中两个点的相对高差、坡度等。所以等高线图确实是一种非常简洁有力的地形表达,应用非常广泛。 6.6.2 等高线地形图矢量形式 正如图6.16~图6.19所示,最为简洁的等高线图是基于要素特征的,是由一组闭合的曲线组成的。因此不难想象,为了从DEM中生成矢量形式的等高线地形图,关键在于使用DEM的空间要素进行立体几何计算。其实在GDAL自带的工具中已经有提取等高线图的工具,但是正如前面笔者所说,结果并不重要,重要的是其中的原理。这里笔者自己的实现如下例6.10所示。
阅读全文