「GIS教程」使用QGIS提取河道、水道中心线
河道、水道中心线提取是GIS数据处理中一个常用任务,相信使用ArcMap或者ArcGIS Pro的同学都可以方便的实现。最近不少小伙伴公司里因为信创开始尝试使用QGIS,在麻辣GIS群里有小伙伴问到了这个问题,正好记录一下。
PS:小编后面会着重介绍一些QGIS中实现ArcGIS相同功能的方法,大家有这方面需求的可以留言哈。
需求
需求是给定如下的河道SHP图,提取出中心线来,原来的数据是内部的,小编为了测试,直接从之前的文章《「GIS数据」中国区域水系、河流、湖泊数据集》中提取了一段雅鲁藏布江的数据。如下:
方案一
方案一来自106群的 @太守 哥,操作方法如下:
- 将矢量面转线 Vector > Geometry Tools > polygons to lines
- 将一个如上的闭合线进行编辑(右键图层 → Toggle Editing),使用 "Split Features" 工具(Edit →EditGeometry→Split Features)进行分割。
- 使用 GRASS 的 v.split 工具让线段均匀布点
- 使用GRASS的v.voronoi.skeleton进行从多边形要素生成骨架线(中轴线)
你看这个方案我一个截图都没有,为什么?因为有更简单的方法,但我为什么保留了这个方法?因为这基本就是河道中心线提取的算法。(给你两分种想想怎么实现)
方案二(推荐)
后面和太守哥讨论了一下,发现并不需要这么麻烦,可以运行方案一的第4步,也就是 GRASS的v.voronoi.skeleton
可以直接算出一个面的中心线。
但本文中测试数据是两根线段,所以要提前处理一下,进入编辑状态。
先选中两条线段,然后点 合并要素 按钮
将两条线合并成一条线,再运行 矢量 -- 几何工具 -- 线转面
这样就转成一个面了,再在工具箱中搜索 中心线,找到GRASS的v.voronoi.skeleton工具。
这里小编没有改参数(具体的参数可以自行研究),直接运行,请注意,我和太守哥的电脑都出现了卡死的现象,不要关闭,给它一点时间,就可以运行成功,结果如下:
方案三
啊哈?还有方案三?真有,在StackExchange上找到了一个方案,不得不说QGIS是真灵活。
先把多边形转线(是的这个方法需要线要素)
打开 QGIS 中的闭合线"分割要素"工具,运行 GRASS v.split 工具,使点沿线均匀分布,然后对它们运行"矢量>几何处理>Voronoi 多边形"工具,见下图
使用"矢量 > 地理处理 > 修剪"从结果中剪切原始 Voronoi 多边形,然后仅选择河流区域的一半,见下图使用 Ctrl 键和选择工具
从源图层中剪切所选的左侧或右侧区域,如下面的图片所示。
最后从切割结果中创建一条线,将其放大,删除不必要的部分,保留河流中心线
是不是感觉不对,截图成了俄文?因为这个方法小编也没试过,看起来就很麻烦,想要尝试的可以试试。
参考地址:https://gis.stackexchange.com/questions/318721/creating-centerline-of-river-in-qgis
总结
没啥总结的,直接推荐方案二,方案二中的算法有一些参数可以设置,可以提升效率或者精度,具体需要的可以研究下。至于方案三,小编后面实践了再说,有兴趣的可以尝试一下,就当提升自己的技能了。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

