QGIS 道路提取:6 种方法与一个陷阱
发布于 更新于

要在 QGIS 中提取道路,先安装 QuickOSM,打开 矢量 > QuickOSM > QuickOSM(Vector > QuickOSM > QuickOSM),以 key highway 查询画布范围,几秒钟内路网就会以线条形式载入。在 OpenStreetMap 稀疏的地方,还有五种方法可以把道路做到图上:分割模型、已发布的国家数据集、手工数字化、GRASS 细化和监督分类。
有一个选择在最前面,它决定了哪些方法对您可用。您不是在提取道路。您是在中心线和路面之间做选择,中心线是一条走在路中间、带有车道数和限速的线,路面是路缘到路缘的沥青面。路径规划要的是线,排水和重铺工程量要的是面。下面一半方法给您线,一半给您面,两者之间转换还要多一步。
| 您的情况 | 方法 | 花费 |
|---|---|---|
| 有活跃 OSM 制图者的城市 | 1、QuickOSM | 免费 |
| OSM 还没覆盖到的地方的最新影像 | 2、分割模型 | 有免费额度,之后是订阅 |
| 有国家道路数据集的国家 | 3、下载并裁剪 | 免费 |
| 只有几条路,或修改手里已有的图层 | 4、开追踪手工数字化 | 免费,但慢 |
| 有道路掩膜或扫描地图 | 5、GRASS r.thin 再接 r.to.vect | 免费 |
| 沥青在其中很突出的多波段场景 | 6、监督分类 | 插件免费,做样本要几小时 |
所有价格、版本和菜单路径都在 2026 年 9 月 3 日核对过,对照了 QGIS 3.44 手册 和各工具自己的文档。
方法 1:用 QuickOSM 拿 OpenStreetMap 道路
花三十秒查一下 OSM,能省掉下面所有方法。QuickOSM 查询 Overpass API,直接把结果丢进您的工程。
安装 QuickOSM
插件 > 管理并安装插件...(Plugins > Manage and Install Plugins),搜索 QuickOSM 并安装。
打开快速查询
矢量 > QuickOSM > QuickOSM,打开 Quick query 选项卡。
设置 key
Key 填 highway,value 留空就是所有道路等级。加 value 可以收窄:residential、track、motorway。
限定范围
选 Canvas Extent。无边界的全国查询会在 Overpass 上超时。
运行并过滤
线条带着 OSM 标签回来。用 highway 过滤,有 surface 的地方看一眼 surface。

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

**适用:**这个区域已经有人测绘过。
**不适用:**影像里的道路在 OSM 图层上没有。
OpenStreetMap 有多完整?测量四个法国市镇
我们在 2026 年 9 月 23 日测量了四个法国市镇:OpenStreetMap 包含了 IGN 官方 BD TOPO 中 96% 到 98% 的铺装道路里程;在其中三个乡村市镇里,IGN 的农用和林间土路有 20% 到 32% 不在 OSM 里,而微软的免费检测数据找到了这些缺失土路的 6% 到 12%。在法国这种测绘得很好的国家,从影像中提取道路是土路问题,而不是道路问题。
| 市镇 | IGN 铺装道路 | OSM 中缺失 | IGN 土路 | OSM 中缺失 | 其中微软找到 |
|---|---|---|---|---|---|
| Villeurbanne,密集城区,15 km² | 280 km | 10.3 km(3.7%) | 15 km | 0.8 km(6%) | 0.3 km |
| Orgères-en-Beauce,开阔农田,15 km² | 27 km | 0.5 km(2.0%) | 27 km | 5.6 km(21%) | 0.7 km(12%) |
| Saint-Léonard-de-Noblat,树篱农田,55 km² | 147 km | 3.9 km(2.6%) | 113 km | 36.4 km(32%) | 2.2 km(6%) |
| Gérardmer,山地森林,56 km² | 216 km | 3.8 km(1.7%) | 228 km | 44.7 km(20%) | 2.8 km(6%) |
在这四个市镇里,微软的线路覆盖了 IGN 铺装道路里程的 89% 到 95%,以及土路的 17% 到 37%。

缺失的土路在哪里,决定了影像能不能找到它们。我们在每个乡村市镇随机画出 20 段缺失路段,并在 IGN 正射影像上逐一查看。在 Orgères-en-Beauce,7 段在地面上能看到土路,5 段落在没有任何可追踪痕迹的裸露田埂上。在 Gérardmer,20 段中有 15 段位于针叶林冠层之下,任何从上往下看的模型都永远看不到它们。Saint-Léonard 介于两者之间,7 段可见,5 段在树下。
还有两点会改变您的查询方式。在 Gérardmer,IGN 的另外 93 km 土路在 OSM 中被标为 highway=path,所以只查 track 的 QuickOSM 查询会漏掉它们:把 value 留空。另外,OSM 还包含 IGN 不绘制的内容,例如 Gérardmer 的 100 km 步道和小径,以及 Villeurbanne 的 64 km 服务道路(停车场通道、院子、车道)。
我们如何测量
我们取 Géoplateforme WFS 中的 IGN BD TOPO troncon_de_route,2026 年 9 月 22 日和 23 日从 Overpass 获取的所有 OSM highway 路段(即 QuickOSM 返回的内容,不含人行道),以及微软 2025 年 4 月 28 日发布的数据,并全部裁剪到各市镇范围。每条线都被切成 10 m 的小段,如果另一个数据集在 10 m 范围内没有与之夹角在 45 度以内的线,这一小段就算缺失。改用 5 m 或 20 m 时,铺装道路的缺失率仍低于 5%,乡村土路在 15% 到 37% 之间。四个市镇不等于整个法国,BD TOPO 是参照而不是真值(Orgères 的 20 段中有 5 段在地面上什么都看不到),正射影像核查则是一个人对 60 张图像的判断。
方法 2:分割模型
分割模型学过道路长什么样,靠形状和上下文跨过了拦住方法 6 的长得像的东西。我们做的就是这类,AI Segmentation。这一节讲我们自己的工具。
从插件管理器安装
QGIS 3.22 或更高版本,Windows、macOS 或 Linux 都行。不用 GPU,不用 Python 环境,不用下载权重。
绘制区域
在画布已显示的任何栅格上框范围,从卫星场景到 WMS 都行。
输入词语
车行道就输 road。parking lot、sidewalk 和 driveway 是另外的词。分开跑,不然紧贴道路的停车场会连成一片。
过滤,需要线时再转换
跑完返回的多边形里,带着工程 CRS 下的 label、class、score、area_m2 和 perimeter_m。按 score 和面积过滤,要出线就把面送进 GRASS v.voronoi.skeleton 提中心线。

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

说一个我们调参表里的数字,因为它解释了很多人觉得奇怪的结果。道路用的分块比建筑物粗,地面每分块按 512 m 封底,建筑物是 128 m,因为模型拿到一小片沥青会把它叫成停车场。只有看到一段路,模型才认得出这是路。
价格,2026 年 9 月 28 日读取。Free 套餐每月在自动模式下提供 1.5 km² 地面,无需信用卡,云端半自动模式每月另给 20 次对象检测,本地半自动模式完全不限量。Pro 提高到 100 km² 和 500 个对象,每月 €39 不含增值税。Mapflow 的道路模型按积分出售,每个积分 0.10 美元,每 km² 收 5 个积分外加影像费,新用户送 250 个积分起步。
**适用:**影像比地图新,道路多到不想手工画。
**不适用:**OSM 里已有路网,或影像不能出您的机器。
方法 3:已发布的道路数据集
可能已经有人跑过检测,还把结果免费放出来了。
Microsoft Road Detections 覆盖 235 个国家的 5420 万公里道路,从 Bing Maps 航片里挖掘出来,按 ODbL 以中心线发布,每个世界区域一个文件。在上文测量的四个法国市镇中,它大约包含了十分之九的铺装道路里程和五分之一的土路里程。
Meta 自己用 AI 生成的道路通过 Rapid editor 发布。原来打包它们的 Daylight 分发版已于 2024 年 5 月停止服务,所以现在拿它们的实际路线是 Rapid。
有国家测绘机构的地方,国家数据比两者都好。法国发布 BD TOPO,其中的 Troncons de route 图层达到米级精度,按 Etalab 2.0 许可开放,而挖掘出的数据集只有粗略套合。英国发布 OS Open Roads,通过 OS Data Hub 免费获取,每年 4 月和 10 月更新。
问题是时效。检测数据集只是它所挖掘影像的快照,去年春天封闭的道路,这些数据都不知道。
**适用:**今天下午就要全国覆盖,日期够用就行。
**不适用:**任务是数据集建成之后的变化。
方法 4:手工数字化,开追踪画
五十条以下的道路,手工画依然最划算,一旦搞清追踪到底跟什么,QGIS 能帮上真忙。
开编辑,选 Add Line Feature,再在捕捉工具条上打开 Tracing 工具,或按 T。贴到一个节点,移动到第二个节点,QGIS 沿已有要素边在两点间构建最短路径。展开追踪图标设 Offset,就能沿这些要素平行画,而不是贴着画。
两处行为常让人意外。画布里要素太多时追踪会自动关闭,放大后又回来。要画自由曲线,按 R 用流式数字化。
**适用:**五十条以下的道路,或对照您信任的图层改图。
**不适用:**面对一整个全是未成图土路的地区。
方法 5:GRASS r.thin,再接 r.to.vect
用投影 CRS 工作。下面有两步要以图层单位输入宽度,用度表示的宽度没有意义。
这是唯一直接给您中心线的方法,所以到 2026 年还活着。输入一个道路是一种值、其余一切是另一种值的栅格:纸质地图的二值化扫描,或方法 2、方法 6 出的掩膜。
r.thin 把每条线收窄到一个像素宽,这条像素链就是中心线。r.to.vect 用要素类型 line 把它转成几何。GRASS 手册提醒,路口会产生过多节点,还会有悬挂短线,所以要留出清理时间:按长度删掉短线,再把该是一条路的分段合并。
GRASS 随大多数 QGIS 安装包一起装,不用再花钱。它也是把方法 2 的面转成线网的那一步,是我用得最多的组合。
**适用:**手里有干净的道路掩膜或干净的扫描图,要出线。
**不适用:**输入是一张彩色照片。
方法 6:监督分类
先给像素分类,再把道路类矢量化。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)。后半段见栅格转矢量指南,包括修掉栅格矢量化留下的锯齿边的算法。
沥青真跟周围不一样时能成,多光谱波段有帮助。栽在长得像的东西上,因为分类器只比像素值,不懂形状:灰屋顶、干河床、光秃的田边全会进道路类。训练样本要留几小时,每个新场景多半要重画。
**适用:**有多光谱波段,道路在里面确实突出。
**不适用:**道路和屋顶一个颜色,也就是大多数城市。
记住什么
四件事会搞砸这一页上的每种方法,花多少钱都一样。住宅街道上的树冠挡住了从上往下看的传感器,结果回来就是断的。土路和旁边的田颜色一样,所以未铺装道路恰恰在最需要成图的地方消失。
另外两件是形状问题。河流、干河床和铁路都是又长又细的要素,任何基于像素的方法都会把它们丢进道路类。桥面和隧道口会在路网最需要连通的地方把路面切断。
先查 OpenStreetMap,那三十秒决定了后面五种方法值不值得打开。在测绘得好的国家,剩下要找的多半是土路,其中不少还在树下。
先在中心线和面之间选,再选方法,别反过来。路径规划要线,算面积要多边形,转换都要多一步。
自动追踪只跟已有矢量要素,从不跟下面的影像。r.thin 要的是二值栅格,从不是照片。
树下的道路在这一页每种方法里回来都是断的,花多少钱都修不好。
方法 2 的面走一遍方法 5,就得到没人手工画过的中心线网。
大家常问
QGIS 自己能从卫星影像里提取道路吗?
不能自动。QGIS 核心只能手工数字化和矢量化您已分类好的栅格。从照片里拿道路要靠插件:分割模型,或 SCP 这类自己训练的分类器。
道路提取给的是线还是多边形?
两种都有,方法决定。OSM、国家数据集、已发布的检测和 GRASS r.thin 给线。监督分类和分割模型给面,因为影像里看到的就是面。GRASS v.voronoi.skeleton 负责两者互转。
树盖下的道路为什么出来是断的?
从上往下看的传感器都穿不透树冠,缺口在软件碰到数据之前就有了。在编辑会话里把断开的分段贴起来接上。
OpenStreetMap 的道路网有多完整?
对于测绘得好的国家里的铺装道路,接近完整:在我们于 2026 年 9 月测量的四个法国市镇中,OSM 包含了 IGN 铺装道路里程的 96% 到 98%。缺口在土路上,在乡村市镇里,IGN 土路里程有 20% 到 32% 缺失。放眼全球,2017 年的一项研究认为 OSM 道路网约完整 83%。
有办法找到未铺装土路吗?
部分可以。土路和旁边的田颜色一样,分类多半漏掉,检测模型能找到宽一些的。有制图者到过的地方,OSM highway=track 最可靠,而这恰恰是最需要成图的地方缺的东西。
道路提取要什么分辨率的影像才够?
能把路和旁边分开就行。高速路在粗分辨率卫星场景里就看得到,树下的住宅小路要 20 cm 正射或更好。定方法之前,先拿自己的影像在免费额度上试一下。
在 QGIS 里道路提取免费吗?
方法 1 和方法 3 到方法 6 安装免费,跑也免费。只有云端分割模型收费,这里提到的两家都有免费额度。
能打开追踪功能,让它沿着影像上的道路画线吗?
追踪根本不看图片。QGIS 3.44 手册写得很明确:它只沿已有矢量要素的边构建最短路径。在裸卫星影像上没有任何可跟的东西,这个工具什么也做不了。当您手里已有地块或不完整的路网、想让新几何与它们贴合时,它才有用。
能对航拍照片直接运行 GRASS r.thin 吗?
r.thin 要的是一个栅格,道路是一种值,其余一切是另一种值。直接丢一张彩色照片进去,它只会按像素值碰巧聚出的结果去细化,那不是道路。这是个放错了一步的好工具:它属于分类或检测之后,不属于之前。
栅格转矢量指南讲了方法 6 的栅格矢量化后半段,建筑物轮廓指南把过滤那步从头走到尾。如果方法 2 先检测再提取骨架的流程在多个切片上变得重复,AI Agent 可以在 QGIS 中用一句指令运行同样的步骤。QGIS AI hub 把插件放在一起比。
中提取道路,先安装 QuickOSM,打开 矢量 > QuickOSM > QuickOSM(Vector > QuickOSM > QuickOSM),以 key 

