我有一张已数字化并转换为矢量图层的地图(仅限河流)。问题是矢量化为每条河流产生了大量的段,这些段显示为不同的特征(每个可能有多个直线段,但它们不覆盖整条河流)。我正在寻找的是一种将极端在给定距离内的所有段合并到一个特征(我猜是折线)中的工具。我正在使用 QGis 和 GRASS 插件。我试过 v.clean.snap、v.build.polylines,但还没有真正合并这些线。任何帮助将不胜感激!
5 回答
您可以在您的编程语言中使用 GEOS 库,也可以使用命令行来完成。就我而言,我在 R 中使用rgeos
库:
require(rgdal)
require(rgeos)
lines <- readOGR("f:/dir", "itineraris")
# grouping line features by lines$ITINERARI
lines2 <- gLineMerge(lines, byid = lines$ITINERARI, id = lines$ITINERARI)
writeOGR(lines2, "f:/dir", "itineraris_merged", driver="ESRI Shapefile")
请注意:从文档中的注释 “特别是它连接具有相交端点的线段”看来,线特征必须是连续的 - 但是尚不清楚这是否也适用于通过 ID 合并的情况。
我建议手动选择线条部分,然后使用“合并”工具(位于高级编辑工具栏中)。
一个很晚的答案,可能对其他人有用:
我遇到了同样的问题,我开发了一个 QGIS 插件来解决它。它会自动将多条连接线(即共享端点的线)合并为一组较小的较长线。输出图层类型是 Line,而不是 PolyLine。合并可以基于以下两个标准之一:
- 长度:一个段被合并到它的最长邻居。
- 对齐:一个段被合并到其最佳对齐的邻居。我认为这个标准最适合河网。
这个插件叫做MergeLines(完整文档在这里),你可以在公共 QGIS 存储库中找到它。工作仍在进行中,请不要犹豫提出新功能。
对于其他偶然发现这个问题的人:
您可以使用 Roadgraph 插件 ( Shortest Path ) 或 PointsToRoute 脚本。在任一端选择点(或在 Points2Route 的情况下添加额外点以从多个路径中指定),然后导出到它自己的图层。
就 133 个地图而言。我已经修改了 PointsToRoute 脚本以适应类似的重载情况,以自动逐步穿过一层线并在其端点之间找到路线。我会清理它,看看我是否可以尽快将它发布到 github 上。
PointsToRoute: https ://github.com/anitagraser/QGIS-Processing-tools/blob/master/1.1/scripts/points_to_route.py
ShortestPath (Roadgraph):这是由 QGIS 插件管理器启用的。请注意,在最新版本的 QGIS 中,它是由 Vector-> RoadGraph ->Settings 菜单配置的,尽管插件将自己称为“最短路径”。
您可以使用“溶解”工具(ARC TOOLBOX)。这会将它们全部合并为一个段。
然后您可以导出节点(仅限常规),这是交点。
然后,您可以使用节点分割溶解的线要素。这至少会为您提供仅在相交点处分割的矢量特征。
至少它更进一步。