QGIS 網格轉向量:5 種方法與階梯邊緣修正
發布於 更新於

若要將網格轉換為向量多邊形,請開啟 QGIS,前往 Raster > Conversion > Polygonize (Raster to Vector),選擇波段、命名輸出欄位,然後執行。您會為每個由具有相同值且彼此連通的像素群組取得一個多邊形,該值也會寫入屬性表。對已分類的網格,這是正確的方法;對照片則不是。另有四種方法可處理 polygonize 無法讀取的網格。
方法 2 是我們開發的外掛,因此請相應看待該段內容。它和其他四種方法一樣,都會獲得相同的五行介紹。
簡短答案
開啟網格的屬性,查看兩件事:波段類型和不同值的數量。它們會替您決定方法。
| 您的輸入 | 方法 | 成本 |
|---|---|---|
| 已分類的網格(土地覆蓋、坡度重分類、遮罩) | 方法 1,Raster > Conversion > Polygonize | 免費,內建於 QGIS |
| 航空照片、無人機或衛星影像 | 方法 2,分割模型 | 免費外掛需要 NVIDIA 顯示卡。雲端外掛有免費方案,之後需訂閱 |
| 連續網格(NDVI、坡度、反射率波段) | 方法 3,Reclassify by table,然後 polygonize | 免費,內建於 QGIS |
| DEM 或任何高程表面 | 方法 4,Raster > Extraction > Contour,或 Contour Polygons | 免費,內建於 QGIS |
| 掃描紙本地圖或圖則 | 方法 5,GRASS r.thin 加上 r.to.vect | 免費,但速度慢。也有付費的 AI 描圖工具 |
以下的每個選單路徑、演算法 id 和預設值,都已於 2026 年 8 月 23 日對照 QGIS 3.44 說明文件 和 GDAL 穩定版說明文件 確認。選單路徑假設使用預設的 QGIS 介面配置,外掛可以修改這些配置。
方法 1:Polygonize
請使用投影 CRS。以下有兩個步驟會以圖層單位取得距離或面積;如果單位是度數,這些數字就沒有意義。
演算法是 Polygonize (raster to vector),id 為 gdal:polygonize,它包裝了 GDAL 工具 gdal_polygonize。

開啟工具
Raster > Conversion > Polygonize (Raster to Vector),或在空間運算工具箱的 GDAL、網格轉換下找到它。
選擇波段
除非您的分類位於其他位置,否則使用 Band 1。一次只能使用一個波段,因此請先將 RGB 網格縮減為單一分類波段。
命名欄位
預設值是 DN。請重新命名,例如使用 landcover_code 而不是 DN。
決定是否使用 8-connectedness
預設為關閉,因此像素必須共享完整邊界才能連接。開啟後,對角相接的像素也會連接。保持關閉時,細窄的對角線特徵會分裂成一串多邊形。在下面的 WorldCover 測試中,開啟後多邊形數量減少 21%,頂點數量完全沒有減少:它只是把像素分組,不會讓邊界變平滑。
儲存為實體檔案
預設值是暫存圖層。100 km2 的 10 m 土地覆蓋產生了 9,221 個多邊形和 4.9 MB 的 GeoPackage,因此請直接寫入檔案。
![QGIS Polygonize 對話框:Land cover 10 m [EPSG:32631]、Band 1 (Palette)、欄位 landcover_code、未勾選 8-connectedness,輸出至 GeoPackage。](/_next/image?url=%2Fblog%2Fraster-to-vector-qgis%2F02_polygonize_dialog.jpg&w=3840&q=75&dpl=dpl_ES2yQWny3dPYjgMEA6yvg26RmKYQ)
有兩件事可以節省時間。首先,為不想要的分類設定 NoData 值:GDAL 接著會讀取波段的有效性遮罩,略過那些像素,而不是在所有內容外圍包住一個巨大的背景多邊形。這是 polygonize 輸出最常見的問題,而且它是網格屬性,不是工具設定。

其次,注意波段類型。gdal:polygonize 一律寫入整數欄位,因此會在輸入時將浮點波段轉換為整數;根據網格儲存值的方式,這會導致兩種失敗結果。兩者都不會顯示警告。Float32 波段應先經過方法 3。
階梯狀邊緣與細碎斑點:先 Sieve,再以覆蓋方式簡化
Polygonize 會追蹤像素邊界,因此斜向的田地邊緣會以直角階梯返回,每個像素形成一階。10 m Sentinel 分類會產生 10 m 階梯。

這是正確的輸出,polygonize 內沒有任何設定可以改變它。要修正它,需要在 polygonize 之前做一個網格步驟,之後再做一個覆蓋步驟。在 Drôme 的 Crest 周圍、ESA WorldCover 10 km 見方的範圍上,polygonize 傳回 9,221 個多邊形和 200,656 個頂點,其中 57% 的多邊形小於五個像素。先以 10 個像素對網格做 Sieve,多邊形數量降到 2,660 個,且只改變了 1.75% 像素的分類。
常見的向量修正方式反而會破壞地圖。QGIS 的 Simplify 一次只處理一個多邊形,所以相鄰的兩個多邊形會以不同方式簡化它們共用的邊緣:在 10 m 容差下,這在 10,000 ha 的範圍內產生了 88 ha 的縫隙和 81 ha 的重疊。Simplify coverage 把整個圖層視為一個整體,結果沒有留下任何縫隙或重疊。
| 10 km 見方範圍上的步驟 | 多邊形數 | 頂點數 | GeoPackage | 分類改變的像素 | 縫隙與重疊 |
|---|---|---|---|---|---|
| Polygonize,預設 4 連通 | 9,221 | 200,656 | 4.9 MB | 0% | 0 |
| Polygonize,8 連通 | 7,284 | 200,656 | 4.7 MB | 0% | 0 |
| Sieve 5 px,再 polygonize | 3,886 | 168,060 | 3.6 MB | 0.94% | 0 |
| Sieve 10 px(預設值),再 polygonize | 2,660 | 155,920 | 3.2 MB | 1.75% | 0 |
| Sieve 50 px,再 polygonize | 1,001 | 122,440 | 2.4 MB | 5.36% | 0 |
| Sieve 10 px,再以 10 m Simplify | 2,660 | 57,896 | 1.5 MB | 4.11% | 169 ha |
| Sieve 10 px,再以 10 m Simplify coverage | 2,660 | 84,984 | 1.9 MB | 2.63% | 0 |
Sieve 勝過 $area 篩選,原因相同。刪除所有小於 500 m2 的多邊形,會移除 5,263 個細小斑點,也就是 5 像素的 Sieve 會吸收的那些,但會留下 94 ha 的孔洞;Sieve 則把這些像素交給最大的相鄰區塊,因此地圖仍然完整無縫。在我們研究資料中提到 Polygonize 的 51 部 QGIS YouTube 教學裡,沒有一部在它之前執行 Sieve。

在 QGIS 中,整個清理流程是依序執行的四個步驟。
對網格做 Sieve
Raster > Analysis > Sieve,id 為 gdal:sieve,在 polygonize 之前執行。閾值以像素為單位,預設為 10,在 10 m 網格上等於 1,000 m2。每個小於閾值的區塊,都會改為取其最大相鄰區塊的值。分類改變的比例會隨閾值增加:閾值 10 時為 1.75% 的像素,100 時為 8.19%。
對 Sieve 後的網格做 Polygonize
照上面的方法 1 進行。不需要 Dissolve:polygonize 已經為每個區塊寫入一個多邊形。
Simplify coverage
空間運算工具箱、向量覆蓋(Vector coverage),native:coveragesimplify,QGIS 3.36 起提供。容差以圖層單位計,預設為 1。在 10 m 網格上,5 m 時沒有移除任何頂點,10 m 時移除了 45% 的頂點,所以請從一個像素開始。對於沒有共用邊緣的獨立區塊,例如 NoData 上的單一分類,仍然使用一般的 Simplify。
平滑,但只用於曲線
native:smoothgeometry,用於真正彎曲的物件:溪流、海岸線、植被區塊。Offset 預設為 0.25,iterations 控制圓滑程度。將 Maximum node angle to smooth 設為 90,較尖銳的角就會保持尖銳,能保留建築物和地塊的角落。
我們如何測量。 ESA WorldCover 2021 v200,圖幅 N42E003,以 Crest(44.728 N, 5.022 E)為中心的 10 km 見方範圍,於 2026 年 9 月 23 日以最近鄰法重新投影為 10 m 的 EPSG:32631。「分類改變的像素」是把多邊形重新燒錄回同一個網格,再與原始網格比較。縫隙和重疊分別是沒有任何多邊形覆蓋的面積,以及兩個多邊形同時覆蓋的面積。Polygonize、Sieve、Simplify 和 Simplify coverage 這幾列,已用 QGIS 3.44.7(GDAL 3.12、GEOS 3.14)隨附的工具重新執行,得到相同的數字。這只是一個範圍、一種土地覆蓋產品、一種像素大小:30 m 或 1 m 的網格會讓每個數字都不同。
適合使用: 網格以整數儲存分類。
不要使用: 波段是浮點值、照片或高程。
方法 2:用於照片的分割模型
分割模型學會了物件的外觀,因此能在照片中找出物件,即使沒有任何像素值可以將它們分開。我們開發了其中一個,AI Segmentation。本節介紹我們自己的工具。
對同一張航空照片執行 polygonize,您會得到雜訊。紅色屋頂和紅色汽車具有相似的像素值,灰色屋頂和灰色道路也是如此。分類存在於您的腦中,而不在檔案中。
從外掛管理員安裝
不需要 GPU、不需要 Python 環境,也不需要下載模型權重。
建立帳戶
需要帳戶。提供免費額度,之後每月 €39,未稅。
選擇模式
兩種雲端模式都會將影像傳送至伺服器。小型本機模型則會留在您的電腦上。
在您的區域上執行
結果會是一個使用專案 CRS 的多邊形圖層,每個特徵都包含 label、class、score、area_m2 和 perimeter_m。
篩選輸出
原始模型輸出需要像 polygonize 輸出一樣進行清理。在巴黎市中心的一次執行中,我從 635 個多邊形中保留了 82 個,而這 82 個涵蓋了 84% 的建成區域。

另外五個外掛可以完成這項工作,我們的工具位於最後一列。成本和免費方案資料讀取於 2026 年 8 月 23 日。
| 工具 | 需要安裝的內容 | GPU | 帳戶 | 影像會離開您的電腦 | 輸出內容 | 成本 |
|---|---|---|---|---|---|---|
| Deepness (原始碼) | 外掛管理員,接著是其 Python 套件和 ONNX 模型 | 可選,CPU 可運作 | 否 | 否 | 多邊形圖層、邊界框或網格 | 免費 |
| Geo-SAM | 外掛管理員,接著從設定對話框安裝相依項目和模型權重 | 可選,點擊操作使用 CPU 執行 | 否 | 否 | 多邊形圖層,可為像素等級或簡化結果 | 免費 |
| samgeo | 環境中的 Python 套件,沒有 QGIS 面板 | 建議使用 | 否 | 否 | 由您自行載入的 GeoJSON、Shapefile 或 GeoPackage | 免費 |
| Mapflow (官網) | 外掛管理員 | 否 | 是 | 雲端服務是,您上傳的 GeoTIFF 或您指定的圖磚服務。另提供企業本地部署選項 | 多邊形圖層 | 點數,付費 |
| Bunting Labs AI Vectorizer | 外掛管理員 | 否 | 是 | 是,以網格區塊傳送 | 寫入您正在數化的圖層中的頂點 | 試用,之後每月 29 美元 |
| AI Segmentation(我們的工具) | 外掛管理員 | 否 | 是 | 兩種雲端模式都會,使用小型本機模型則不會 | 使用專案 CRS 的多邊形圖層,包含 label、class、score、area_m2 和 perimeter_m | 免費額度,之後每月 €39,未稅 |
每個工具都有一項限制。
- Deepness 執行您提供的模型,因此您必須先找到或訓練一個模型。
- Geo-SAM 接受點擊和框選,一次處理一個物件。
- samgeo 沒有 QGIS 介面。您需要撰寫 Python。
- Mapflow 提供建築物、森林、道路和建築工地的現成模型。
- Bunting Labs AI Vectorizer 會在您數化時跟隨線條。
- AI Segmentation 是我們的工具,兩種雲端模式都會將影像傳送至伺服器。只有小型本機模型會留在本機。
適合使用: 輸入是照片,且物件數量多到不適合手動繪製。
不要使用: 影像不能離開您的電腦,本機外掛如 Deepness 或 Geo-SAM 可以處理。
方法 3:先 Reclassify,再 polygonize
對連續網格執行 Polygonize,會根據值的儲存方式產生兩種失敗結果之一。
以縮放後的整數儲存,NDVI 產品通常就是如此,您幾乎會為每個像素取得一個多邊形。我在 Sentinel-2 場景的 40,000 個像素中測得 39,801 個多邊形。
以 -1 到 1 之間的原始浮點值儲存,轉換為整數會在追蹤開始前把所有值壓平為 -1、0 或 1。同一個場景最後得到 238 個、分屬兩個分類的多邊形。結果看起來很乾淨,但值已經消失。

坡度、高程、溫度和原始反射率波段都會出現相同情況。工具會追蹤整數值之間的邊界,而連續網格沒有值得追蹤的邊界。因此,請使用 Reclassify by table 自行建立分類,id 為 native:reclassifybytable。
開啟 Reclassify by table
空間運算工具箱、網格分析。連續網格是輸入。
輸入分類表
三個欄位:最小值、最大值、新值。它接受 -inf、inf 和 nan 作為 NoData。植被遮罩有三列。
| 最小值 | 最大值 | 值 |
|---|---|---|
| -inf | 0.2 | 1 |
| 0.2 | 0.5 | 2 |
| 0.5 | inf | 3 |
設定輸出資料類型
在進階參數中,Output data type 預設為 Float32。將它設為 Byte 或 Int16,polygonize 才能正常運作。
檢查範圍邊界
Range boundaries 預設為 min < value <= max,這會決定像素值剛好為 0.2 時落在哪裡。請選擇符合分類定義的設定。
Polygonize 結果
在重新分類的網格上執行方法 1,然後執行四個清理步驟。

適合使用: 您能用數字說明一個分類在哪裡結束、下一個分類在哪裡開始。
不要使用: 您想要的是物件,而不是值的範圍。
方法 4:從 DEM 建立等高線
對於高程,不要使用 polygonize。請在 Raster > Extraction > Contour 使用 Contour,id 為 gdal:contour。
開啟 Contour
Raster > Extraction > Contour,以 DEM 作為輸入。
設定間隔
預設為網格單位中的 10.0,因此公制 DEM 每隔 10 m 產生一條線。
命名屬性
高程預設寫入 ELEV。保留它,並使用它產生標籤。
決定是否 Produce 3D vector
若要在每個頂點保留高度,請勾選。若是列印地圖,則保持關閉,因為許多軟體會丟棄 Z 值。
切換至 contour polygons 以建立填色帶
相鄰演算法 gdal:contour_polygon 會產生兩個高程之間的填色帶,每個多邊形都包含 ELEV_MIN 和 ELEV_MAX。這是製作分層設色圖或淹水範圍的工具,也省下手動將重新分類 DEM polygonize 的工作。


來自 LiDAR DEM 的等高線會很嘈雜,因為表面本身就很嘈雜。請在建立等高線前平滑網格,而不要在之後平滑線條:平滑後的線會彼此交叉。
適合使用: 您想要的是等級:高程、深度、降雨量、濃度。
不要使用: 網格已經包含分類。
方法 5:掃描紙本地圖
如果您是從 ArcGIS 來的,正在尋找 ArcScan 的 QGIS 對應工具,那麼沒有。互動式網格描圖,也就是在掃描圖上點擊一條線並讓工具跟隨它,是 QGIS 真正缺少的功能。我寧可直接說明這點,也不希望您在選單中到處尋找。
免費方法是使用 GRASS,而大多數 QGIS 安裝程式都會附帶它。
對掃描圖進行閾值處理
將掃描紙張轉換為二元網格:線條使用一個值,紙張使用另一個值。
細化線條
r.thin 將每條筆畫縮減為單一像素寬。
向量化
使用特徵類型 line 執行 r.to.vect。GRASS 說明文件警告,這會在交會點和懸垂支線產生過多節點,因此請預留清理時間。
另外還有兩條路徑。Potrace 和 AutoTrace 在 QGIS 外執行:輸入網格影像,輸出向量,然後對結果進行地理參照。它們適合高對比掃描圖,但不理解地理資訊。
在 QGIS 內,Bunting Labs AI Vectorizer(QGIS 外掛庫頁面)會在您數化時自動完成線條,目標是地質圖、竣工圖和圖則。它會將網格區塊傳送至其伺服器,試用期以外沒有免費方案,公開價格從每月 29 美元起,價格資料讀取於 2026 年 8 月 23 日。
如果只有少數特徵,使用 snapping 手動數化仍然最好。少於約 50 個特徵時,我不會建立描圖工作流程。
適合使用: 掃描圖包含清晰線條和數百個特徵。
不要使用: 紙張褪色、帶有陰影線,或線條上覆蓋了註記。
請記住
| 屬性顯示的內容 | 方法 |
|---|---|
| 整數波段,不同值少於一百個 | 方法 1,Sieve,polygonize,然後 Simplify coverage |
| 照片的三個波段 | 方法 2,分割模型 |
| 浮點波段,不同值數千個 | 方法 3,依表格重新分類,然後使用方法 1 |
| 以公尺表示的高程,或任何平滑表面 | 方法 4,contour 或 contour polygons |
| 完全沒有分類值的掃描紙張 | 方法 5,GRASS,或手動數化 |
不同值的數量會決定方法。少於一百個,表示某人已經將網格分類,polygonize 可以乾淨地追蹤這些分類。
如果有數千個,就表示沒有人進行分類,因此您可以在方法 3 中自行繪製閾值,或在方法 2 中將工作交給模型。
階梯是正確的輸出,polygonize 內沒有任何設定可以移除它。先對網格做 Sieve,再使用 Simplify coverage 而不是 Simplify,讓相鄰多邊形保有同一條共用邊緣。
每個清理步驟都會移動頂點,因此若面積要用於報告,請從網格而不是多邊形計算。
無論設定為何,polygonize 都無法讀取照片,因為分類存在於您的腦中,而不在檔案中。
常見問題
網格轉多邊形和網格轉向量是一樣的嗎?
不完全一樣。網格轉向量涵蓋多邊形、線和點。網格轉多邊形特別指 polygonize 路徑,也就是方法 1 的 Raster > Conversion > Polygonize。方法 4 的等高線也是網格轉向量,但輸出會是線。
為什麼 polygonize 會在所有內容外圍產生一個巨大多邊形?
背景分類沒有設定 NoData 值,因此 GDAL 將它當成真實資料進行追蹤。請在網格的屬性中為該分類設定 NoData,然後再次執行方法 1。
為什麼 polygonize 為幾乎每個像素都建立了一個多邊形?
網格是連續的,而不是已分類的,因此幾乎沒有兩個相鄰像素擁有相同值。請先重新分類:方法 3。
如何移除階梯狀邊緣?
先對網格做 Sieve 再 polygonize,接著以大約一個像素的容差執行 Simplify coverage,最後只對彎曲的特徵使用 Smooth。一般的 Simplify 是逐個多邊形處理,會在相鄰多邊形之間產生縫隙。如果面積要用於報告,請從網格計算。
QGIS 有 ArcScan 的對應工具嗎?
沒有。核心 QGIS 沒有互動式網格描圖。方法 5 提供免費路徑,使用 GRASS 的 r.thin 再接 r.to.vect;付費方案則是每月 29 美元起的 Bunting Labs 外掛。
我可以將航空照片或衛星影像 polygonize 嗎?
不行,輸出會像靜電雜訊,因為紅色屋頂和紅色汽車共享像素值。請使用分割模型:方法 2。
要如何移除 polygonize 產生的細小多邊形?
在 polygonize 之前,先對網格執行 Raster > Analysis > Sieve。它會把每個低於閾值的區塊,合併到其最大的相鄰區塊。事後再刪除小多邊形,只會留下孔洞。
在 QGIS 中網格轉向量是免費的嗎?
方法 1、3 和 4 是免費的:polygonize、重新分類、contour 和清理演算法都屬於核心 QGIS。只有照片案例和付費掃描 tracing 需要付費。
建物輪廓指南 會完整說明篩選步驟,QGIS 中的 SAM 文章 則介紹這些模型適合找出哪些物件。QGIS AI 專區 會並列比較這些外掛。如果您只需要建築物,我們的 免費建物輪廓工具 可以在瀏覽器中從開放資料擷取它們,不需要外掛。
,前往 

