跳转到内容
AI Segmentation
QGIS
教程

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

同一条郊区街道从空中的三个分幅:裸卫星影像、绘在路中间的OpenStreetMap中心线、以及从路缘到路缘填满的铺装路面多边形。

要在中提取道路,先安装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、下载并裁剪免费
只有几条路,或修改手里已有的layer3、开追踪手工数字化免费,但慢
有道路掩膜或扫描地图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可以收窄:residentialtrackmotorway

Bound it

Canvas Extent。无边界的全国查询会在Overpass上超时。

Run and filter

线条带着OSM标签回来。用highway过滤,有surface的地方看一眼surface

The QuickOSM Quick query tab in QGIS: key highway, value empty, extent set to Canvas Extent, with the Run query button.
The whole query is three fields. Key highway, no value, canvas extent. Captured 3 September 2026.

标签就是测绘过的地区胜过任何检测的原因。highway=track告诉你这条是农用便道,highway=unclassified告诉你这是次要公共道路。这一页上的模型都做不到,因为检测只返回形状,而OSM返回的是有人命名过的形状。按ODbL要求署名。

覆盖率就是OSM止步的地方。在非洲乡村、南亚,或大多数城市的新扩张边缘,把highway线叠到最新影像上,田间的土路在图片里看得清清楚楚,layer上却什么都没画。

Satellite imagery of a rural district with OSM highway lines in blue over it. Two main roads carry lines, while a dozen visible dirt tracks between fields carry nothing.
OSM highway lines over the same extent. Two surfaced roads are mapped. The tracks between the fields are visible in the picture and absent from the 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

车行道就输roadparking lotsidewalkdriveway是另外的词。分开跑,不然紧贴道路的停车场会连成一片。

Filter, then convert if you need lines

跑完返回的多边形里,带着工程CRS下的label、class、score、area_m2和perimeter_m。按score和面积过滤,要出线就把面送进GRASS v.voronoi.skeleton提中心线。

A suburban district on Google Satellite imagery in QGIS, the road surface filled kerb to kerb as one connected polygon layer in red.
A road run over Google Satellite imagery, captured 3 September 2026. The whole carriageway comes back as a surface, junctions included, not as a line down the middle.

输出永远是路缘到路缘的多边形,从不直接给中心线,所以要交线就得多走上面的骨架那步。两种云模式都会把影像发到欧盟境内的服务器,只有小的本地模型留在你机器上。

树冠会把面切成几段,要手工接回去,桥面也一样。潮湿沥青和新重铺改变色调,整段会漏掉。我们不发布精度数字,因为数字跟着你的影像走。

The same road layer over a tree-lined street: the polygon runs solid in the open and stops at each canopy overhang, leaving three gaps along one block.
The canopy problem on one block. Three gaps in a single street, each under a tree. No method on this page sees through leaves.

说一个我们调参表里的数字,因为它解释了很多人觉得奇怪的结果。道路用的瓦片比建筑物粗,地面每瓦片按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放在一起比。