QGIS提取道路:6种方法与一个陷阱

要在
中提取道路,先安装QuickOSM,打开Vector > QuickOSM > QuickOSM,以key highway查询画布范围,几秒钟内路网就会以线条形式载入。在OpenStreetMap稀疏的地方,还有五种方法可以把道路做到图上:已发布的国家数据集、手工数字化、GRASS细化、监督分类和分割模型。
- 最快,而且免费: QuickOSM,如果这个区域已经有人测绘过。
- 今天就有全国覆盖: 已发布的数据集,依然免费。
- 影像比地图新: 分割模型,从免费额度起步。
- 从掩膜或扫描图里出线: GRASS
r.thin再接r.to.vect。
有一个选择在最前面,它决定了哪些方法对你可用。你不是在提取道路。你是在中心线和路面之间做选择,中心线是一条走在路中间、带有车道数和限速的线,路面是路缘到路缘的沥青面。路径规划要的是线,排水和重铺工程量要的是面。下面一半方法给你线,一半给你面,两者之间转换还要多一步。
网上哪里讲错了
QGIS教程和论坛帖里反复出现两个答案,两个都会浪费你一下午才发现。
“打开自动追踪,沿着影像上的道路描。”追踪根本不看图片。QGIS 3.44手册写得很明确:它只沿已有矢量要素的边构建最短路径。在裸卫星影像上没有任何可跟的东西,这个工具什么也做不了。当你手里已有地块或不完整的路网、想让新几何与它们贴合时,它才有用。
“在航片上跑GRASS r.thin。”r.thin要的是一个raster,道路是一种值,其余一切是另一种值。直接丢一张彩色照片进去,它只会按像素值碰巧聚出的结果去细化,那不是道路。这是个放错了一步的好工具:它属于分类或检测之后,不属于之前。
简短答案
| 你的情况 | 方法 | 花费 |
|---|---|---|
| 有活跃OSM制图者的城市 | 1、QuickOSM | 免费 |
| 有国家道路数据集的国家 | 2、下载并裁剪 | 免费 |
| 只有几条路,或修改手里已有的layer | 3、开追踪手工数字化 | 免费,但慢 |
| 有道路掩膜或扫描地图 | 4、GRASS r.thin再接r.to.vect | 免费 |
| 沥青在其中很突出的多波段场景 | 5、监督分类 | plugin免费,做样本要几小时 |
| OSM还没覆盖到的地方的最新影像 | 6、分割模型 | 有免费额度,之后是订阅 |
开始之前
用投影CRS工作。下面有两步要以layer单位输入宽度,用度表示的宽度没有意义。
四件事会搞砸这一页上的每种方法,花多少钱都一样。住宅街道上的树冠挡住了从上往下看的传感器,结果回来就是断的。土路和旁边的田颜色一样,所以未铺装道路恰恰在最需要成图的地方消失。
另外两件是形状问题。河流、干河床和铁路都是又长又细的要素,任何基于像素的方法都会把它们丢进道路类。桥面和隧道口会在路网最需要连通的地方把路面切断。
方法1:用QuickOSM拿OpenStreetMap道路
花三十秒查一下OSM,能省掉下面所有方法。QuickOSM查询Overpass API,直接把结果丢进你的工程。
Install QuickOSM
Plugins > Manage and Install Plugins,搜索QuickOSM并安装。
Open the quick query
Vector > QuickOSM > QuickOSM,打开Quick query选项卡。
Set the key
Key填highway,value留空就是所有道路等级。加value可以收窄:residential、track、motorway。
Bound it
选Canvas Extent。无边界的全国查询会在Overpass上超时。
Run and filter
线条带着OSM标签回来。用highway过滤,有surface的地方看一眼surface。

标签就是测绘过的地区胜过任何检测的原因。highway=track告诉你这条是农用便道,highway=unclassified告诉你这是次要公共道路。这一页上的模型都做不到,因为检测只返回形状,而OSM返回的是有人命名过的形状。按ODbL要求署名。
覆盖率就是OSM止步的地方。在非洲乡村、南亚,或大多数城市的新扩张边缘,把highway线叠到最新影像上,田间的土路在图片里看得清清楚楚,layer上却什么都没画。

**适用:**这个区域已经有人测绘过。
**不适用:**影像里的道路在OSM layer上没有。
方法2:已发布的道路数据集
可能已经有人跑过检测,还把结果免费放出来了。
Microsoft Road Detections覆盖235个国家的5420万公里道路,从Bing Maps航片里挖掘出来,按ODbL以中心线发布,一国一个文件。
Meta自己用AI生成的道路通过Rapid editor发布。原来打包它们的Daylight分发版已在2024年5月日落,所以现在拿它们的实际路线是Rapid。
有国家测绘机构的地方,国家数据比两者都好。法国发布BD TOPO,其中的Troncons de route layer达到米级精度,按Etalab 2.0许可开放,而挖掘出的数据集只有粗略套合。英国发布OS Open Roads,通过OS Data Hub免费获取,每年4月和10月更新。
问题是时效。检测数据集只是它所挖掘影像的快照,去年春天封闭的道路,这些数据都不知道。
**适用:**今天下午就要全国覆盖,日期够用就行。
**不适用:**任务是数据集建成之后的变化。
方法3:手工数字化,开追踪画
五十条以下的道路,手工画依然最划算,一旦搞清追踪到底跟什么,QGIS能帮上真忙。
开编辑,选Add Line Feature,再在捕捉工具条上打开Tracing工具,或按T。贴到一个节点,移动到第二个节点,QGIS沿已有要素边在两点间构建最短路径。展开追踪图标设Offset,就能沿这些要素平行画,而不是贴着画。
两处行为常让人意外。画布里要素太多时追踪会自动关闭,放大后又回来。要画自由曲线,按R用流式数字化。
**适用:**五十条以下的道路,或对照你信任的layer改图。
**不适用:**面对一整个全是未成图土路的地区。
方法4:GRASS r.thin,再接r.to.vect
这是唯一直接给你中心线的方法,所以到2026年还活着。输入一个道路是一种值、其余一切是另一种值的raster:纸质地图的二值化扫描,或方法5、方法6出的掩膜。
r.thin把每条线收窄到一个像素宽,这条像素链就是中心线。r.to.vect用feature type line把它转成几何。GRASS手册提醒,路口会产生过多节点,还会有悬挂短线,所以要留出清理时间:按长度删掉短线,再把该是一条路的分段合并。
GRASS随大多数QGIS安装包一起装,不用再花钱。它也是把方法6的面转成线网的那一步,是我用得最多的组合。
**适用:**手里有干净的道路掩膜或干净的扫描图,要出线。
**不适用:**输入是一张彩色照片。
方法5:监督分类
先给像素分类,再把道路类矢量化。Semi-Automatic Classification Plugin是标准工具,作者Luca Congedo。9.0.4版要QGIS 3.99,也就是QGIS 4那条线,所以在QGIS 3.x上管理器只会给你8.5.0版。dzetsaka做同样的事,界面更小。
在道路像素和场景里每个其他类别上画训练区,跑Maximum Likelihood这类分类器,再把道路类走Raster > Conversion > Polygonize。后半段见raster to vector指南,包括修掉polygonize留下的锯齿边的算法。
沥青真跟周围不一样时能成,多光谱波段有帮助。栽在长得像的东西上,因为分类器只比像素值,不懂形状:灰屋顶、干河床、光秃的田边全会进道路类。训练样本要留几小时,每个新场景多半要重画。
**适用:**有多光谱波段,道路在里面确实突出。
**不适用:**道路和屋顶一个颜色,也就是大多数城市。
方法6:分割模型
分割模型学过道路长什么样,靠形状和上下文跨过了拦住方法5的长得像的东西。我们做的就是这类,AI Segmentation。这一节讲我们自己的工具。
Install from the plugin manager
QGIS 3.22或更高版本,Windows、macOS或Linux都行。不用GPU,不用Python环境,不用下载权重。
Draw the area
在画布已显示的任何raster上框范围,从卫星场景到WMS都行。
Type the word
车行道就输road。parking lot、sidewalk和driveway是另外的词。分开跑,不然紧贴道路的停车场会连成一片。
Filter, then convert if you need lines
跑完返回的多边形里,带着工程CRS下的label、class、score、area_m2和perimeter_m。按score和面积过滤,要出线就把面送进GRASS v.voronoi.skeleton提中心线。

输出永远是路缘到路缘的多边形,从不直接给中心线,所以要交线就得多走上面的骨架那步。两种云模式都会把影像发到欧盟境内的服务器,只有小的本地模型留在你机器上。
树冠会把面切成几段,要手工接回去,桥面也一样。潮湿沥青和新重铺改变色调,整段会漏掉。我们不发布精度数字,因为数字跟着你的影像走。

说一个我们调参表里的数字,因为它解释了很多人觉得奇怪的结果。道路用的瓦片比建筑物粗,地面每瓦片按512 m封底,建筑物是128 m,因为模型拿到一小片沥青会把它叫成停车场。只有看到一段路,模型才认得出这是路。
价格,2026年9月3日读取。免费计划每月在Automatic上给3 km2地面,不用绑卡,云端Semi-Auto每月另给50个目标检测,自己机器上的Semi-Auto完全不限量。Pro提到200 km2和500个目标,每月39欧元不含税。Mapflow的道路模型按credits卖,一个credit 0.10美元,每km2收5个credits再加影像费,新用户送250个credits起步。
**适用:**影像比地图新,道路多到不想手工画。
**不适用:**OSM里已有路网,或影像不能出你的机器。
记住什么
先查OpenStreetMap,那三十秒决定了后面五种方法值不值得打开。
先在中心线和面之间选,再选方法,别反过来。路径规划要线,算面积要多边形,转换都要多一步。
自动追踪只跟已有矢量要素,从不跟下面的影像。r.thin要的是二值raster,从不是照片。
树下的道路在这一页每种方法里回来都是断的,花多少钱都修不好。
方法6的面走一遍方法4,就得到没人手工画过的中心线网。
Try it free in QGIS, no card needed
大家常问
QGIS自己能从卫星影像里提取道路吗?
不能自动。QGIS核心只能手工数字化和矢量化你已分类好的raster。从照片里拿道路要靠plugin:分割模型,或SCP这类自己训练的分类器。
道路提取给的是线还是多边形?
两种都有,方法决定。OSM、国家数据集、已发布的检测和GRASS r.thin给线。监督分类和分割模型给面,因为影像里看到的就是面。GRASS v.voronoi.skeleton负责两者互转。
树盖下的道路为什么出来是断的?
从上往下看的传感器都穿不透树冠,缺口在软件碰到数据之前就有了。在编辑会话里把断开的分段贴起来接上。
有办法找到未铺装土路吗?
部分可以。土路和旁边的田颜色一样,分类多半漏掉,检测模型能找到宽一些的。有制图者到过的地方,OSM highway=track最可靠,而这恰恰是最需要成图的地方缺的东西。
道路提取要什么分辨率的影像才够?
能把路和旁边分开就行。高速路在粗分辨率卫星场景里就看得到,树下的住宅小路要20 cm正射或更好。定方法之前,先拿自己的影像在免费额度上试一下。
在QGIS里道路提取免费吗?
方法1到方法5安装免费,跑也免费。只有云端分割模型收费,这里提到的两家都有免费额度。
raster to vector指南讲了方法5的polygonize后半段,building footprints指南把过滤那步从头走到尾。QGIS AI hub把plugin放在一起比。


