QGISでラスターを滑らかな輪郭ポリゴンに変換する


14

ラスターレイヤーから滑らかな輪郭ポリゴンを作成することに成功したのは限られています。

等高線と境界ポリラインを作成し、QGIS Unionを使用しました。次に、QGIS Polygonizeを使用します。次に、元のラスタのゾーン統計を使用して、ポリゴンの値を取得します。

私が試した2番目の方法は、ラスターをポリゴンに変換することでした。次に、希望する輪郭に丸められた新しい属性列を作成します。次に、同じ値の間の線をディゾルブします。次に、v.generalizeを使用します。この方法は少し高速ですが、一部のポリゴンがギザギザになったり、滑らかにならない場合があります。

ここに画像の説明を入力してください

実際に常に機能する簡単な方法はありますか?プロセス全体を実行する単純なコマンドがあるはずです。


2
なぜPolygonizeを使用しているのですか?入力ラスターは連続していますか(浮動小数点DEMのように)?QGISには、GDAL_Contourへのショートカットである輪郭ツールがあります。qgistutorials.com /en/docs/working_with_terrain.html輪郭または低湿度領域を取得しようとしていますか?
マイケルスティムソン

入力ファイルはtifであり、必要な出力ファイルは、特定の増分のポリゴンのみを含むシェープファイルです。ポリラインを作成するツールは多数ありますが、ポリゴンは作成していません。
Rx_

結構です、あなたは低湿度領域を取得しようとしています。(ほとんど)Esriを使用します。これには、ラスターによって作成されたポリゴンをポリゴンに単純化するオプションがありますが、ここでは役に立ちません。DEMから等高線を作成し、境界ボックスを追加してからポリゴン化すると、どのようになりますか?次に、ラベルポイントを作成し、値を交差/サンプリングし、ポリゴンに属性でラベルを付けることができます...おそらく、いくつかの同じ値のポリゴンが溶解される可能性がありますが、大きな問題は間隔を超えてジャンプしています。私は輪郭から属性hypsoにコードを持っているが、それはArcInfoのカバレッジ上で動作します
マイケル・スティムソン

あなたが説明するのは、私が最初の方法でやっていると思うことです。その面倒。各ファイルにid属性が設定されていることを確認してから、一度ポリゴン化されたゼロを超える領域を含まないポリゴンを削除する必要があります。ポリゴンに転送するラインの一貫した正しいラベルを取得できませんでした。2番目の方法は、私が望むものに非常に近いですが、v.generalizeは100%の時間は機能しないようです。あなたが指摘したように、ESRIがポリゴンを単純化することがQGISのオプションであったことを願っています。
Rx_

回答:


12

私はあなたがあなたの第二の方法で持っている同じ問題を経験しました。RasterをVectorにエクスポートし、v.generaliseを使用しようとすると、アルゴリズムの影響を受けていないように見える「階段状の」境界のある滑らかなポリゴンがほとんど得られます。

私は自分のタスクに合ったプロセスを見つけましたが、それが最善の方法かどうかはわかりませんが、それがあなたを助けた場合に備えて共有したいと思いました。

私が始めたのは、BoMの asciiグリッドで、次のようなものでした: ここに画像の説明を入力してください

BoMが次のように生成するものに似たものが欲しかったのです。 ここに画像の説明を入力してください

次の手順を使用して、(満足した)結果を得ることができました。

  • グリッド(私の場合はBoMのASCIIグリッド)をQGISにロードします。
  • 離散クラスに再コーディングされました。(Processing Toolbox> Grass> Raster> r.recode)
  • マジョリティフィルターを実行して「クリーンアップ」します。(処理ツールボックス> SAGA>ラスターフィルター>マジョリティフィルター)
  • フィルターされたグリッドから1の間隔で等高線を作成し、属性「クラス」に保存しました(私のクラスは1,2,3,4などであったため)。(ラスター「メニュー」>「抽出」>「輪郭」)
  • 出力コンターはやや一般化されていますが、v.generalisedと「snakes」アルゴリズムを使用して滑らかにしました(Processing Toolbox> Grass> Vector> v.generalize)
  • 次に、ラインをポリゴンに変換しました(処理ツールボックス> QGISジオアルゴリズム>ベクトルジオメトリツール>ラインからポリゴンへ)
  • 最後に、すべてのポリゴンがうまく描画されるように、単一パートのポリゴンを複数のパーツに変換する必要がありました。(Processing Toolbox> QGISジオアルゴリズム> Vector Geometry Tools> Singleparts to Mulitpart)。

スタイリング後の出力は次のとおりです。 ここに画像の説明を入力してください

誰かがもっと簡単な方法を知っているなら、私も聞きたいです。もともと、@ Rx_と同様に、ラスターをベクターに変換してから一般化すればよいと考えていました。私がしなければならなかったことは、はるかに長かった。


3

私はここでの答えが好きですが、QGISにはまだこれをすばやく簡単に行う方法がないとは信じられません。MapInfoは、指定可能な間隔でポリゴンまたはラインとして輪郭を生成できます。

このような基本的なタスクのようで、エクステントを取得するためにも重要です。誰かがこれを行うための更新されたまたはより速い方法を持っている場合は共有してください!


1

より直接的な方法はgdal_countour、「ポリゴンモード」で(つまり、-pオプションを使用して)直接(コマンドラインプログラムとして)使用することです。

例:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

ドキュメント:https : //gdal.org/programs/gdal_contour.html

このオプションは、バージョン2.4以降でのみ使用できます(これはで確認できますgdalinfo --version)。Ubuntu 18.4を使用している場合、UbuntuGISからインストールする必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.