跳至內容
AI Segmentation
QGIS
教學

QGIS 道路提取:6 種方法與一個陷阱

同一條郊區街道的空拍三格對比:原始衛星影像、中間畫上 OpenStreetMap 中心線、以及從路緣到路緣填滿鋪面範圍的多邊形。

要在 中提取道路,請安裝 QuickOSM,開啟 Vector > QuickOSM > QuickOSM,用鍵 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

highway,值留空就是全部道路等級。要縮小範圍就加值: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 線疊上最新影像,土路在圖裡看得清清楚楚,圖上卻什麼都沒畫。

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 個國家、5,420 萬公里道路,從 Bing Maps 空拍影像探勘而來,以中心線形式、一國一檔依 ODbL 釋出。

Meta 透過 Rapid 編輯器 發布自家 AI 生成的道路。原本打包它們的 Daylight 發布版已於 2024 年 5 月終止,所以現在實際拿到的管道是 Rapid。

有國家測繪單位的地方,兩者都比不上國家資料。法國發布 BD TOPO,其中的 Troncons de route layer 在 Etalab 2.0 下達到公尺級精度,遠勝探勘數據集的粗略套合。英國透過 OS Data Hub 免費發布 OS Open Roads,每年四月和十月更新。

問題在時間。偵測數據集是探勘當時影像的快照,沒有一個知道去年春天封了哪條路。

適合: 今天下午就要全國覆蓋,且時間夠用。

略過: 工作是數據集建成之後的變化。

方法 3:手工數化,開著追蹤畫

五十條以下的道路,用畫的還是最快,只要搞懂追蹤到底在跟什麼,QGIS 真的幫得上忙。

切換編輯,選 Add Line Feature,再在 Snapping 工具列上啟用 Tracing 工具,或按 T。貼齊一個頂點,再移到第二個頂點,QGIS 就會沿既有特徵邊在兩點間建立最短路徑。展開追蹤圖示並設 Offset,就能沿這些特徵平行數化,而不是貼著畫。

有兩個行為常讓人意外。圖幅裡特徵太多時,追蹤會自己關掉,放大後又回來。要畫自由曲線,按 R 改用串流數化。

適合: 五十條以下的道路,或對照你信任的 layer 做修正。

略過: 面對整區沒畫的土路。

方法 4:GRASS r.thin,再 r.to.vect

這是唯一直接給你中心線的方法,這也是它到 2026 年還在用的原因。餵給它一個道路是一種值、其他都是一種值的 raster:紙圖經閾值化的掃描,或方法 5、6 來的遮罩。

r.thin 把每條筆畫縮到一個像素寬,這條像素鏈就是中心線。r.to.vect 以特徵類型 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 > Polygonizeraster 轉向量指南 講了後半段,包括修掉 polygonize 留下的階梯邊的演算法。

瀝青和周圍真的不同時才有效,多光譜波段有幫助。遇到長得很像的就會倒,因為分類器只比像素值,不懂形狀:灰屋頂、乾河床、光禿田邊全都會掉進道路類。訓練樣本要預留幾小時,且下一個場景要重畫。

適合: 有多光譜波段,且道路在其中突出。

略過: 道路和屋頂同色,也就是多數城市。

方法 6:分割模型

分割模型學過道路長什麼樣子,靠形狀和上下文越過了卡住方法 5 的相似物。我們自己做了一個,AI Segmentation。這一節講的是我們自己的工具。

Install from the plugin manager

Windows、macOS 或 Linux 上的 QGIS 3.22 或更新版。不用 GPU,不用 Python 環境,不用抓權重。

Draw the area

對畫布上已有的任何 raster 畫範圍,從衛星場景到 WMS 都可以。

Type the word

車行道請輸入 roadparking lotsidewalkdriveway 是不同的詞。分開跑,不然緊貼道路的停車場會連在一起。

Filter, then convert if you need lines

跑完回來的多邊形帶有 label、class、score、area_m2 和 perimeter_m,以專案 CRS 計算。按 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.

講一個我們調參表裡的數字,因為它解釋了一個讓人覺得奇怪的結果。道路用的 tile 比建物粗,每 tile 地面下限 512 m,建物是 128 m,因為只拿到一小片瀝青,模型會叫它停車場。模型要看到一段路,才讀得出那是路。

費用,讀於 2026 年 9 月 3 日。免費方案在 Automatic 上每月含 3 km2 地面,不用卡,雲端 Semi-Auto 每月另加 50 個物件偵測,在自己電腦上的 Semi-Auto 則完全不限量。Pro 提高到 200 km2 和 500 個物件,每月 39 歐元未稅。Mapflow 的道路模型按 credits 計價,每個 0.10 美元,每 km2 另加 5 credits 與影像費用,開頭送 250 credits。

適合: 影像比地圖新,且道路多到手畫不完。

略過: OSM 已有路網,或影像不能離開你的電腦。

重點回顧

先查 OpenStreetMap,因為那三十秒決定其他五個方法值不值得開。

先決定要中心線還是面,再選方法,不要反過來。路徑規劃要線,面積計算要多邊形,互轉都要多一步。

Automatic tracing 跟的是既有向量特徵,永遠不是底下的影像。r.thin 要的是二值 raster,永遠不是照片。

樹下的道路在這一頁每個方法裡都會斷掉,花再多錢也修不好。

方法 6 的面再過方法 4,就得到不用手工數化的中心線路網。

Try it free in QGIS, no card needed

常見問題

QGIS 能自己從衛星影像提取道路嗎?

不行自動。QGIS 核心只能手工數化和把你已分類好的 rasters 向量化。要從照片拿道路,需要一個 plugin:分割模型,或自己訓練的 SCP 這類分類器。

道路提取給的是線還是多邊形?

兩種都有,看方法決定。OSM、國家數據集、已發布偵測和 GRASS r.thin 給線。監督式分類和分割模型給面,因為影像上看到的就是面。GRASS v.voronoi.skeleton 可以互轉。

樹下的道路為什麼總是斷的?

往下看的感測器都看不穿樹冠,所以缺口在軟體動手之前就已在資料裡。開編輯,用貼齊把幾段接起來。

有方法找得到未鋪面土路嗎?

部分可以。土路和旁邊田地同色,所以分類通常漏掉,偵測模型只找得到較寬的。有圖客到過的地方,OSM highway=track 最可靠,問題是,最需要它們的地方恰恰沒人畫。

道路提取需要多高的影像解析度?

能把路和旁邊分開就行。高速公路在粗衛星場景就看得到;樹下的住宅小巷要 20 cm 正射影像或更好。選定方法前,先拿自己的影像在免費額度上試。

在 QGIS 裡提取道路免費嗎?

方法 1 到 5 安裝免費、執行免費。只有雲端分割模型收費,這裡提到的兩家都有免費額度。

raster 轉向量指南 講了方法 5 的 polygonize 半段,建物足跡指南 走完篩選步驟。QGIS AI hub 並排比較各 plugins。