コンテンツへスキップ
ブログに戻る
QGIS
チュートリアル
GeoAI

QGISでラスタをベクターに変換する全手法と、それぞれが機能する場面

3つのパネル。色付きピクセルのグリッドとして描かれた土地被覆ラスタ、polygonizeで階段状にトレースされた同じ境界、そしてdissolve、面積フィルター、simplify、smoothの後に滑らかな緑の線になった同じ境界。
3つのパネル。色付きピクセルのグリッドとして描かれた土地被覆ラスタ、polygonizeで階段状にトレースされた同じ境界、そしてdissolve、面積フィルター、simplify、smoothの後に滑らかな緑の線になった同じ境界。

でラスタをベクターポリゴンに変換するには、Raster > Conversion > Polygonize (Raster to Vector)を開き、バンドを選択し、出力フィールド名を指定して実行します。値を共有するピクセルの連結グループごとに1つのポリゴンが作成され、その値が属性テーブルに書き込まれます。これは分類済みラスタには適切な方法ですが、写真には適していません。多くの問題は、自分がどちらを扱っているのかを把握していないことから起こります。

TerraLabでは、AI SegmentationというQGIS pluginを開発しています。このページの最後の表にある1行として、他のツールと同じ形式で説明しています。

ラスタからベクターへの変換とは

ラスタはピクセルのグリッドです。ベクターは、座標と属性を持つ点、線、ポリゴンの集合です。一方を他方に変換するとは、境界がどこにあるかを決めることです。ピクセルグリッドには、各セルの端以外に固有の境界はありません。

以下の各手法の違いは、何をエッジとして扱うかだけです。Polygonizeは隣接する2つのピクセルが異なる値を持つ場所を使い、contourは選択した標高を使い、セグメンテーションモデルはオブジェクトが終わる場所を使います。そのため、写真に使えるのは最後の方法だけです。

方法を選ぶ

手元にあるもの機能する方法コスト
分類済みまたは主題ラスタ(土地被覆、傾斜の再分類、マスク)Raster > Conversion > Polygonize (Raster to Vector)無料、QGISのコア機能
連続ラスタ(NDVI、傾斜、反射率バンド)先にReclassify by tableを実行してからpolygonize無料、QGISのコア機能
DEMまたは標高サーフェスRaster > Extraction > ContourまたはContour Polygons無料、QGISのコア機能
スキャンした紙地図または図面GRASSのr.thinr.to.vect、またはQGIS外部のトレースツール。QGISのコア機能だけではうまく処理できない無料だが低速。有料のAIトレースも存在
オルソフォト、ドローンまたは衛星画像セグメンテーションモデル。Polygonizeは適用できない無料pluginにはNVIDIAカードが必要。クラウドpluginには無料枠があり、その後はサブスクリプション

ほとんどの読者は最初の行に該当するため、次の2セクションまで読めば十分です。

Polygonize、標準的な答え

QGISのアルゴリズムはPolygonize (raster to vector)で、IDはgdal:polygonizeです。GDALユーティリティのgdal_polygonizeをラップしています。共通の値を持つピクセルの連結領域ごとに1つのポリゴンを作成し、その値を属性に書き込みます。

GDALラスタ変換のQGIS 3.44ドキュメントページ。Polygonize (raster to vector)の項目、デフォルトメニュー、INPUT、BAND、FIELD、EIGHT_CONNECTEDNESSを含むパラメータテーブルが表示されている
以下で引用するすべてのデフォルト値の参照元。2026年8月23日に取得した、gdal:polygonizeのQGIS 3.44ドキュメント。デフォルトメニューはRaster、続いてConversion。

ツールを開く

Raster > Conversion > Polygonize (Raster to Vector)です。Processing ToolboxのGDAL、Raster conversionからも開けます。

バンドを選択する

クラスが別の場所にない限り、Band 1を選びます。使用できるバンドは1つだけなので、RGBラスタはこの手順の前に単一のクラスバンドへ変換する必要があります。

フィールド名を付ける

デフォルトはDNです。landcover_codeのように、6か月後にも意味を理解できる名前に変更しましょう。

8-connectednessを決める

デフォルトではオフなので、ピクセルが完全な境界を共有している場合だけ連結します。オンにすると、対角線上で接しているピクセルも連結されます。細い斜めの地物では、オフのままだと1つの地物がポリゴンの連鎖に分割されます。

実ファイルに保存する

デフォルトは一時layerです。大きなラスタでは数万のフィーチャが作成されるため、直接GeoPackageに書き込みます。

QGISのPolygonize (Raster to Vector)ダイアログ。入力layerはLand cover 10 m [EPSG:32631]、Band numberはBand 1 (Palette)、作成するフィールド名はlandcover_code、Use 8-connectednessは未選択、出力はGeoPackageに書き込まれている
重要な4つのパラメータ。Drome valleyのESA WorldCover 10 mクリップを使用しています。フィールド名はDNからlandcover_codeに変更し、出力は一時layerではなくGeoPackageに直接保存しています。

ここで2つの設定を行うと時間を節約できます。

不要なクラスにNoData値を設定します。GDALはバンドの有効性マスクを使用するため、NoDataピクセルはスキップされ、他のすべてを囲む巨大な背景ポリゴンにはなりません。これはpolygonizeの出力で最もよくある不満であり、ツールの設定ではなくラスタのプロパティに関する問題です。

gdal.orgのgdal_polygonizeリファレンスページ。概要と-8、-nomask、-maskオプションが表示されている
QGISアルゴリズムの下で動作しているGDALユーティリティ。2026年8月23日に取得。-nomaskフラグが有効性マスクの動作に関係しています。

バンドが整数型であることを確認します。gdal:polygonizeは常に整数フィールドを書き込むため、入力時にfloatバンドをキャストします。ラスタが値を保存する方法によって、これは2通りの異なる問題を引き起こし、どちらの場合も警告は表示されません。Float32の場合は、先にReclassify by tableを実行します。次のセクションで説明します。

階段状の問題と修正方法

Polygonizeはピクセルの境界をトレースします。それ以外は何もしません。そのため、斜めの圃場境界は、ピクセルごとに直角の段差が続く形で戻ってきます。10 mのSentinel分類では、10 m間隔の階段になります。

約1:1,500で表示した10 m土地被覆ラスタ上のPolygonize出力。ピンク色の耕作地パッチが、緑色の樹木被覆と黄色の草地の間にあり、斜めの境界はすべて1ピクセル幅の四角い段差になっている
元になったESA WorldCoverラスタ上の生のgdal:polygonize出力。ポリゴン数は3,551です。斜めの境界に沿った段差を数えると、それぞれが10 mのピクセルであることがわかります。

これは正しい出力です。ツールはラスタに書かれている内容を正確に描いています。ただし、地図としては見栄えがよくありません。polygonize内部の設定でこれを変えることはできません。修正には、次の順番で4つのベクタージオメトリアルゴリズムを実行します。

1. Dissolvenative:dissolve)。先ほど作成したクラスフィールドをdissolveフィールドに設定します。同じクラスの隣接ポリゴンを結合し、クラスごとに1つのフィーチャにします。共有境界を簡略化した後に結合すると、すべての共有境界に沿って細長い隙間が残るため、ジオメトリが正確な状態である最初に実行します。クラスごとに1つのマルチパートフィーチャではなく、各パッチを個別にしたい場合は、詳細パラメータのKeep disjoint features separateにチェックを入れます。

2. 面積でフィルターnative:extractbyexpressionVector selection内)。式:

$area > 500

単位はlayerのCRS単位なので、投影CRSを使用してください。そうしないと数値に意味がありません。しきい値は、データ内で実際のパッチとみなせる大きさに設定します。10 m分類では500 m2は5ピクセルで、斑点が減り、地物が現れ始めるおおよその境目です。下の図では同じラスタに2,000 m2を使用しています。500では、簡略化後に残った細長いポリゴンが互いに交差したためです。どちらの数値もそのまま使わず、自分の面積ヒストグラムを確認してください。ラスタによってパッチ内部に別クラスの単一ピクセルが残る場合は、この手順の後にnative:deleteholesを実行すると削除できます。

3. Simplifynative:simplifygeometries)。許容値のデフォルトはlayer単位で1.0です。おおよそ1ピクセルのサイズに設定すると、段差が直線的な形にまとまり、境界の移動は読者が見分けられない程度に収まります。方法のドロップダウンには、Douglas-Peucker(距離ベース)、Visvalingam(面積ベース)、snap to gridがあります。許容値を大きくする場合、Visvalingamの方が小さな地物の形状を保ちやすくなります。

4. Smoothnative:smoothgeometry)。河川、海岸線、植生パッチなど、本当に曲線的なものだけに使用します。オフセットのデフォルトは0.25で、反復回数によって丸みが変わります。Maximum node angle to smoothを90に設定すると、それより鋭い角は鋭いまま残ります。これにより、建物や区画の角が丸くなるのを防げます。

内部に隙間のない塊も必要な場合は、native:deleteholesで最小面積未満の穴を削除できます。0.0を指定するとすべての穴を削除します。

クリーンアップ後の同じ土地被覆範囲。ポリゴンの外形は、下に見えているピクセルグリッド上を滑らかな曲線として走り、小さな斑点ポリゴンはなくなっている
同じ範囲、同じシンボロジーで、Dissolve、2,000 m2の面積フィルター、deleteholes、10 mのSimplify、最大ノード角90のSmoothを適用した後の状態。ポリゴン数は3,551から724に減り、段差が曲線として見えるようになります。

ラスタが連続値なら先にReclassifyする

連続ラスタにpolygonizeを実行すると、値の保存方法によって2通りの問題のどちらかが起こります。

スケーリングされた整数として保存されている場合。NDVI製品が実際に配布される形式です。ほとんどのピクセルが異なる値を持つため、ほぼすべてのピクセルに1つずつポリゴンが作成されます。Sentinel-2のシーンでは、40,000ピクセルから39,801ポリゴンが作成されました。

-1から1のraw floatとして保存されている場合。トレースが始まる前に、整数へのキャストによってすべての値が-1、0、1に平坦化されます。同じシーンは2クラス、238ポリゴンとして戻ってきました。きれいな結果に見えますが、正しくありません。データが失われています。

傾斜、標高、温度、raw反射率バンドでも同じです。どちらの場合もツールが失敗したわけではありません。整数値の境界をトレースしているだけであり、連続ラスタにはトレースに使える有用な整数値がありません。

約1:1,000で表示した農地上のNDVIラスタの拡大表示。濃い緑色の森林パッチが淡い色の圃場に接している。10 mの各ピクセルに独自のポリゴン境界があるため、画面全体がグリッドのように見える。layerパネルの項目名はndvi_polygonizedで、フィーチャ数は39801
2025年8月11日のSentinel-2シーンから取得したNDVI。NDVI製品で使われる形式のスケーリングされた整数として保存され、そのままpolygonizeしています。ほとんどのピクセルが同じ値を持たないため、40,000ピクセルから39,801ポリゴンが作成されています。

まずReclassify by table、ID native:reclassifybytableを使って、連続サーフェスをクラスに変換します。再分類テーブルには最小値、最大値、新しい値の3列があり、NoDataには-infinfnanを使用できます。植生マスクは3行です。

MinimumMaximumValue
-inf0.21
0.20.52
0.5inf3
QGISのReclassify by Tableダイアログ。入力にFloat32 NDVIラスタを指定し、Advanced Parametersを開いている。Range boundariesはmin less than value less than or equal to max、Output data typeはByteに設定されている。上部の固定テーブルエディターには3行があり、minus infinityから0.2は1、0.2から0.5は2、0.5からinfinityは3になっている
固定テーブルに入力した3行の植生マスク。変更する価値のある2つのデフォルト値は、その背後の詳細セクションにあります。ここではOutput data typeをByte、Range boundariesを設定しています。

詳細パラメータで変更するデフォルト値は2つです。Output data typeのデフォルトはFloat32なので、ByteまたはInt16に設定するとpolygonizeが正しく動作します。Range boundariesのデフォルトはmin < value <= maxで、値がちょうど0.2のピクセルをどちら側に入れるかを決めます。

その後、再分類したラスタをpolygonizeし、上記のクリーンアップを実行します。

DEMにはContours

標高にはpolygonizeを使わないでください。ContourRaster > Extraction > Contourで使用します。IDはgdal:contourです。Intervalのデフォルトはラスタの単位で10.0で、標高はデフォルトでELEVというフィールドに書き込まれます。

QGISのContourダイアログ。入力layerはCopernicus DEM 30 m、等高線間隔は10、属性名はELEV、Advanced Parametersが開いていてProduce 3D vectorは未選択になっている
Drome上のCopernicus DEM 30 mタイルにgdal:contourを実行した状態。ラスタの単位でIntervalは10、標高はELEVに書き込み、Produce 3D vectorはオフにしています。

すべての頂点に高さを持たせたい場合は、Produce 3D vectorにチェックを入れます。印刷用の地図ではオフのままにしてください。多くのソフトウェアはZを黙って削除するためです。

兄弟アルゴリズムのgdal:contour_polygonを使うと、線ではなく2つの標高の間を埋めた帯が作成され、各ポリゴンにELEV_MINELEV_MAXが付与されます。これは段彩図や浸水範囲に使う方法で、再分類したDEMを手作業でpolygonizeする必要がありません。

同じ丘陵地の2つのパネル。左は灰色の陰影起伏図上に10 m間隔の茶色の等高線があり、50 m間隔の線が太く描かれ、400、450、500、550、600、650とラベル付けされている。右は同じ地形を、谷の緑色から頂上の茶色まで塗り分けた帯として表示している
同じDEM、同じ10 m間隔で2つのアルゴリズムを比較。gdal:contourはELEVからラベルを付ける線を作成します。gdal:contour_polygonはELEV_MINとELEV_MAXを持つ塗りつぶし帯を作成し、段彩図に必要な形式になります。

lidar DEMのContourは、サーフェスがノイジーなためノイズが出ます。Contourの後に線を平滑化するのではなく、Contourの前にラスタを平滑化してください。線を平滑化すると、線同士が交差します。

スキャンした紙地図。QGISにArcScanはない

ArcGISから来て、QGISにおけるArcScan相当の機能を探しているなら、そのようなものはありません。スキャン上の線をクリックするとツールが追従するインタラクティブなラスタトレースは、実際に不足している機能です。メニューを探し回らせるより、そう伝える方がよいでしょう。

実際に使われているものを、うまくいく順のおおまかな順序で紹介します。

  • GRASS。ほとんどのQGISインストーラーに同梱されています。 スキャンを二値ラスタにしきい値処理し、r.thinで細線化した後、r.to.vectをフィーチャタイプlineで実行します。GRASSのドキュメントは、接合部やぶら下がった枝に過剰なノードが作成されると警告しているため、クリーンアップの時間を見込んでください。無料で、きれいな線画には有効です。
  • PotraceまたはAutoTrace。QGISの外部で使用します。 ビットマップをベクターに変換し、結果をQGISに戻してジオリファレンスします。高コントラストのスキャンには適していますが、地理に関する情報は一切考慮しません。
  • Bunting Labs AI VectorizerQGIS repository listing)。デジタイズ中の線を自動補完するQGIS pluginで、地質図、as-built図面、計画図を主な対象にしています。制限として、ラスタのチャンクをサーバーに送信します。トライアル以外の無料枠はなく、公開価格は2026年8月23日時点で月29ドルからです。

1枚のシートにある少数の地物なら、スナップをオンにした手動デジタイズが今でも最も優れています。およそ50未満の地物のためにトレースワークフローを構築することはおすすめしません。

Polygonizeが間違ったツールになる場合

オルソフォトにpolygonizeを適用すると、しきい値を設定できないためノイズが出ます。赤い屋根と赤い車は似たピクセル値を持ちます。灰色の屋根と灰色の道路も似たピクセル値を持ちます。クラスは頭の中に存在するのであって、ファイルの中にはありません。

写真画像からオブジェクトを抽出するには、オブジェクトがどのように見えるかを学習したモデルが必要です。これらのツールはベクターを直接書き込むため、polygonizeは登場しません。インストールするものと、必要なものを以下に示します。

ツールインストールするものGPUアカウント画像はマシン外に出るか出力コスト
DeepnesssourcePlugin manager、その後にPythonパッケージとONNXモデル任意、CPUで動作不要いいえポリゴンlayer、バウンディングボックス、またはラスタ無料
Geo-SAMPlugin manager、その後に依存関係とモデルウェイトを独自の設定ダイアログから導入任意、クリック操作はCPUで実行不要いいえピクセルレベルまたは簡略化されたポリゴンlayer無料
samgeo自分の環境にPythonパッケージを導入。QGISパネルはなし推奨不要いいえ自分で読み込むGeoJSON、Shapefile、またはGeoPackage無料
MapflowsitePlugin manager不要必要必要。アップロードしたGeoTIFF、または指定したタイルサービスポリゴンlayerクレジット制、有料
Bunting Labs AI VectorizerPlugin manager不要必要必要。ラスタチャンクとして送信デジタイズ中のlayerに頂点を書き込むトライアル、その後月29ドル
AI Segmentation、TerraLab製Plugin manager不要必要2つのクラウドモードでは必要、小規模なローカルモデルでは不要label、class、score、area_m2、perimeter_mを持つ、プロジェクトCRS内のポリゴンlayer無料枠、その後VATを除いて月39ユーロ

それぞれに1つずつ制限があります。

  • Deepnessは渡されたモデルを実行するため、まず自分でモデルを見つけるかトレーニングする必要があります。
  • Geo-SAMは、一度に1つのオブジェクトについてクリックとボックスを受け取ります。
  • samgeoにはQGISインターフェースがありません。Pythonを書く必要があります。
  • Mapflowは建物、森林、道路、建設現場など、固定されたモデルカタログを提供するため、学習されていないオブジェクトは見つけられません。
  • Bunting Labs AI Vectorizerはデジタイズ中の線を追従します。ゾーン内のすべてのオブジェクトを検出するものではありません。
  • AI SegmentationはTerraLab製で、2つのクラウドモードではどちらも画像をサーバーに送信します。小規模なローカルモデルだけがマシン上に留まります。

コストと無料枠は2026年8月23日時点のものです。

QGISのGoogle Satellite画像上にある郊外の道路。道路の右側にある6軒の家の屋根が赤い輪郭と塗りつぶしで表示され、左側の家々にはさまざまな色の追加ポリゴンが重なっている
2026年8月23日に取得した、Google Satellite画像上でのQGISにおけるモデルベースの抽出。各屋根が個別のポリゴンになっており、他のベクターフィーチャと同じように編集できます。ピクセル値から屋根と私道を分離する情報がないため、Polygonizeではこれを作成できません。

どのツールでも、モデルの生の出力にはpolygonizeの出力と同じようにフィルターが必要です。パリ中心部を対象にしたある実行では、635ポリゴンのうち82ポリゴンを残し、それでも建築面積の84パーセントを保持していました。building footprints guideでは、このフィルター処理を最初から最後まで説明しています。SAM in QGIS postでは、これらのモデルがどのオブジェクトをうまく検出できるかを解説しています。

QGISで無料で試す。カード不要

2分でわかる要点

ラスタのプロパティを開き、バンドタイプと値の範囲を確認します。100未満の異なる値を持つ整数なら、Raster > Conversion > Polygonize (Raster to Vector)を直接実行し、その後にDissolve、面積フィルター、Simplifyを実行します。異なる値が数千あるFloatなら、先にReclassify by tableを実行します。写真ならこれらの方法はどれも適用できません。次に見るべきページはQGIS AI plugin comparisonです。

建物だけが必要なら、free building footprints toolを使えば、pluginなしでブラウザ上のオープンデータから建物フットプリントを取得できます。