GDALはPythonでポリゴン化して空白のポリゴンを作成しますか?


12

PythonでPolygonize関数を使用すると問題が発生します。このためのクックブックの例はここにあります

私のコードの関連部分は次のとおりです。

sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
    driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None

私はバンドに関連情報があることを知っています、ここにスニペットがありbandArrayます:

array([[ 4.,  4.,  3.,  3.,  3.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,
         3.,  3.,  3.,  3.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
         4.,  4.,  4.,  4.],

QGISで属性テーブルを開くと、空です: QGISスクリーンキャプチャ

編集:

変換は、ラスター->変換->ポリゴン化ツールを使用してQGISでうまく機能します

ポリゴン化するラスターのスクリーンショット:

ポリゴン化するラスター

そして、QGISツールからの変換結果のスクリーンショット:

QGISツールからのポリゴン化されたラスター

Windows 7、GDALバージョン1.10.0-3でEnthoughtディストリビューションを使用しています

問題は、GDALとクックブックの例を使用してPythonでラスターをポリゴン化できないことです。QGISGUIでは問題なくこの同じラスターをポリゴン化できます


ラスターはどのように見えますか?本当にポリゴンが含まれていますか?代わりにgdal_polygonize.pyを使用すると動作しますか?
BradHards 14

QGISの作業プロセスのスクリーンショットを追加するために編集
camdenl 14

ここで実際の問題は何ですか?
フェスター

追加されました特定の問題
camdenl

3
同様の問題(空のシェープファイルが作成されている)があり、フィールドを作成しても役に立ちませんでした。私が間違っていたことは、polygonizeを呼び出す前に、コード内でシェープファイルを閉じていなかったことです。あなたはあなたの例でそれを閉じます、私はこれを他の人の参考のために投稿しています。
ステファニー

回答:


19

問題は、ラスターバンドを格納するフィールドを作成していなかったことです。gdal_polygonize.pyファイルを掘り下げた後、gdal.Polygonizeを呼び出すときにこれが自動的に行われないことに気付きまし。代わりにここにある関数が使用されます

フィールドを作成し、フィールドにバンドを書き込むために必要な追加の手順を次に示します。

newField = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
outLayer.CreateField(newField)

次に、インデックス0でこのフィールドにバンドを書き込むことができます。

gdal.Polygonize(band, None, outLayer, 0, [], callback=None )

また、gdal.Polygonize()関数を使用して、Pythonでラスターをポリゴンとして取得しようとしています。しかし、最終行にはランタイムエラーが表示されています!! どうして?
シウリパービン

ジオリファレンスされたラスターファイルでうまく機能します。結果はポリゴンが多すぎますが、ラスターのアウトラインを示す大きなポリゴンが1つだけ必要です。誰かがそれが同時にどのように機能するか考えていますか?
Shiuli Pervin

それでも私は空のシェープファイルを取得していますが、dbfファイルに行があります。クリアしてください!
サティヤチャンドラ

この問題が発生しましたが、ダミーフィールドを追加する代わりに、-1のインデックスを入力できます。インデックス> = 0の場合にのみフィールドが追加されることを確認てください。
jon_two
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.