跳至內容
QGIS
教學
GeoAI

QGIS 網格轉向量:5 種方法與階梯邊緣修正

發布於 更新於

三個面板:畫成彩色像素方格的土地覆蓋網格資料、經 polygonize 追蹤成階梯狀的同一條邊界,以及經過 Sieve、簡化與平滑後變成平滑綠線的同一條邊界。

若要將網格轉換為向量多邊形,請開啟 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。

QGIS 3.44 的 Polygonize 說明文件頁面,包含 INPUT、BAND、FIELD 和 EIGHT_CONNECTEDNESS 參數
以下每個預設值的來源:QGIS 3.44 的 gdal:polygonize 說明文件,擷取於 2026 年 8 月 23 日。

開啟工具

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。
10 m ESA WorldCover Drome valley 裁切圖中最重要的四個參數。DN 已重新命名為 landcover_code,並直接輸出至 GeoPackage。

有兩件事可以節省時間。首先,為不想要的分類設定 NoData 值:GDAL 接著會讀取波段的有效性遮罩,略過那些像素,而不是在所有內容外圍包住一個巨大的背景多邊形。這是 polygonize 輸出最常見的問題,而且它是網格屬性,不是工具設定。

gdal.org 上的 gdal_polygonize 參考頁面,包含 -8、-nomask 和 -mask 選項
QGIS 演算法底層使用的 GDAL 工具,擷取於 2026 年 8 月 23 日。有效性遮罩的行為來自其 -nomask 旗標。

其次,注意波段類型。gdal:polygonize 一律寫入整數欄位,因此會在輸入時將浮點波段轉換為整數;根據網格儲存值的方式,這會導致兩種失敗結果。兩者都不會顯示警告。Float32 波段應先經過方法 3。

階梯狀邊緣與細碎斑點:先 Sieve,再以覆蓋方式簡化

Polygonize 會追蹤像素邊界,因此斜向的田地邊緣會以直角階梯返回,每個像素形成一階。10 m Sentinel 分類會產生 10 m 階梯。

約 1:1,500 比例尺下,10 m 土地覆蓋網格上的 Polygonize 輸出。綠色樹木覆蓋與黃色草地之間是粉紅色農地,每條對角線邊界都是一段由單像素階梯組成的階梯。
原始 gdal:polygonize 輸出,共 3,551 個多邊形,位於產生它的 ESA WorldCover 網格上。沿著任意對角線數階梯:每一階都是 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,221200,6564.9 MB0%0
Polygonize,8 連通7,284200,6564.7 MB0%0
Sieve 5 px,再 polygonize3,886168,0603.6 MB0.94%0
Sieve 10 px(預設值),再 polygonize2,660155,9203.2 MB1.75%0
Sieve 50 px,再 polygonize1,001122,4402.4 MB5.36%0
Sieve 10 px,再以 10 m Simplify2,66057,8961.5 MB4.11%169 ha
Sieve 10 px,再以 10 m Simplify coverage2,66084,9841.9 MB2.63%0

Sieve 勝過 $area 篩選,原因相同。刪除所有小於 500 m2 的多邊形,會移除 5,263 個細小斑點,也就是 5 像素的 Sieve 會吸收的那些,但會留下 94 ha 的孔洞;Sieve 則把這些像素交給最大的相鄰區塊,因此地圖仍然完整無縫。在我們研究資料中提到 Polygonize 的 51 部 QGIS YouTube 教學裡,沒有一部在它之前執行 Sieve。

同一個 1.2 km 見方的土地覆蓋多邊形範圍,分成三個面板。左:原始 polygonize,邊緣呈階梯狀,有許多單像素斑點。中:先 Sieve,再逐個多邊形簡化,共用邊緣上出現黑色細縫。右:先 Sieve,再以覆蓋方式簡化,共用邊緣乾淨,沒有細縫。
Drôme 的 Crest 西南方的 1.2 km 見方範圍,河流位於上緣。ESA WorldCover 2021,10 m。中間面板:黑色標示逐個多邊形以 10 m 做 Simplify 時,在相鄰多邊形之間產生的縫隙和重疊。測量於 2026 年 9 月 23 日。

在 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% 的建成區域。

QGIS 中 Google Satellite 影像上的郊區街道。道路右側有六個房屋屋頂以紅色輪廓標示,左側房屋上還有更多多邊形。
在 Google Satellite 影像上進行基於模型的擷取,擷取於 2026 年 8 月 23 日。每個屋頂都是自己的多邊形,可以像任何向量特徵一樣編輯。Polygonize 無法產生這個結果:像素值中沒有任何資訊能將屋頂與車道分開。

另外五個外掛可以完成這項工作,我們的工具位於最後一列。成本和免費方案資料讀取於 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 可以處理。

在 QGIS 免費試用,不需要信用卡

方法 3:先 Reclassify,再 polygonize

對連續網格執行 Polygonize,會根據值的儲存方式產生兩種失敗結果之一。

以縮放後的整數儲存,NDVI 產品通常就是如此,您幾乎會為每個像素取得一個多邊形。我在 Sentinel-2 場景的 40,000 個像素中測得 39,801 個多邊形。

以 -1 到 1 之間的原始浮點值儲存,轉換為整數會在追蹤開始前把所有值壓平為 -1、0 或 1。同一個場景最後得到 238 個、分屬兩個分類的多邊形。結果看起來很乾淨,但值已經消失。

約 1:1,000 比例尺下,農田上的 NDVI 網格,每個 10 m 像素都有自己的多邊形輪廓。圖層面板顯示 ndvi_polygonized,包含 39801 個特徵。
2025 年 8 月 11 日 Sentinel-2 場景的 NDVI,以縮放後的整數儲存,直接進行 polygonize。40,000 個像素中產生 39,801 個多邊形。

坡度、高程、溫度和原始反射率波段都會出現相同情況。工具會追蹤整數值之間的邊界,而連續網格沒有值得追蹤的邊界。因此,請使用 Reclassify by table 自行建立分類,id 為 native:reclassifybytable。

開啟 Reclassify by table

空間運算工具箱、網格分析。連續網格是輸入。

輸入分類表

三個欄位:最小值、最大值、新值。它接受 -inf、inf 和 nan 作為 NoData。植被遮罩有三列。

最小值最大值值
-inf0.21
0.20.52
0.5inf3

設定輸出資料類型

在進階參數中,Output data type 預設為 Float32。將它設為 Byte 或 Int16,polygonize 才能正常運作。

檢查範圍邊界

Range boundaries 預設為 min < value <= max,這會決定像素值剛好為 0.2 時落在哪裡。請選擇符合分類定義的設定。

Polygonize 結果

在重新分類的網格上執行方法 1,然後執行四個清理步驟。

QGIS Reclassify by Table 對話框,使用 Float32 NDVI 網格:Output data type 設為 Byte,Range boundaries 為 min 小於 value 小於或等於 max,並包含三列分類表。
修正後表格中的三列植被遮罩。值得修改的兩個預設值位於其後:Output data type,此處為 Byte,以及 Range boundaries。

適合使用: 您能用數字說明一個分類在哪裡結束、下一個分類在哪裡開始。

不要使用: 您想要的是物件,而不是值的範圍。

方法 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 的工作。

QGIS Contour 對話框,使用 Copernicus DEM 30 m:間隔 10、屬性名稱 ELEV,未勾選 Produce 3D vector。
Copernicus DEM 30 m 圖磚在 Drome 上的 gdal:contour。網格單位中的間隔為 10,高程寫入 ELEV,Produce 3D vector 關閉。
相同丘陵範圍的兩個面板:棕色 10 m 等高線覆蓋灰色山體陰影,50 m 等高線較粗並標示 400、450、500、550、600 和 650;接著是相同地形由綠色谷地至棕色山頂的填色帶。
相同 DEM、相同 10 m 間隔、兩個演算法。gdal:contour 產生以 ELEV 標示的線。gdal:contour_polygon 產生包含 ELEV_MIN 和 ELEV_MAX 的填色帶,這正是分層設色圖所需要的內容。

來自 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 專區 會並列比較這些外掛。如果您只需要建築物,我們的 免費建物輪廓工具 可以在瀏覽器中從開放資料擷取它們,不需要外掛。