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

要在
中提取道路,請安裝 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、下載並裁剪 | 免費 |
| 少數幾條路,或修正手上的 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
鍵 highway,值留空就是全部道路等級。要縮小範圍就加值:residential、track、motorway。
Bound it
選 Canvas Extent。不設邊界的整國查詢會在 Overpass 超時。
Run and filter
線載入時會帶著 OSM 標籤。用 highway 篩選,有 surface 的就讀 surface。

標籤就是已測繪地區勝過任何偵測的原因。highway=track 告訴你那是農業便道,highway=unclassified 則是次要公共道路。這一頁沒有模型能告訴你這兩者的差別,因為偵測只給你形狀,OSM 給你的是有人命名過的形狀。依 ODbL 必須署名。
覆蓋率就是 OSM 停下的地方。在非洲鄉村、南亞,或多數城市的擴張邊緣,把 highway 線疊上最新影像,土路在圖裡看得清清楚楚,圖上卻什麼都沒畫。

適合: 該地區已有人測繪。
略過: 影像裡的道路在 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 > Polygonize。raster 轉向量指南 講了後半段,包括修掉 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
車行道請輸入 road。parking lot、sidewalk 和 driveway 是不同的詞。分開跑,不然緊貼道路的停車場會連在一起。
Filter, then convert if you need lines
跑完回來的多邊形帶有 label、class、score、area_m2 和 perimeter_m,以專案 CRS 計算。按 score 和面積篩選,再把面送進 GRASS v.voronoi.skeleton 取中心線。

輸出是路緣到路緣的多邊形,永遠不是中心線,所以要交線就得多做上面的骨架步驟。兩種雲端模式都會把影像送到歐盟境內的伺服器,只有小的本地模型留在你的電腦上。
樹冠會把面打斷,要手工接回去,橋面也一樣。潮濕瀝青和剛重鋪的色調差到會掉一段。我們不公布精度數字,因為數字隨你的影像而變。

講一個我們調參表裡的數字,因為它解釋了一個讓人覺得奇怪的結果。道路用的 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。


