2017-06-20 10 views
0

、私は次のコード行を使用している場合に使用私のシェイプファイル 'Shp'は、文字列(クラス名)を格納する 'landuse'という名前のフィールドを持っています。 別のクラス名の番号を書き込む必要があります。 「土地利用」=「新しい譲歩」:認識されていないようです「」gdal.RasterizeLayer:</p> <p>gdal.RasterizeLayer(OUTDS、[1]のShp、burn_values = [II])</p> <p>:パラメータPythonで

for ii in range(class)):  
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="class[ii]"') 

パラメータ私は「どこで」句、などを使用することを考えていました。どうすればこの関数に渡すことができますか? C APIによれば、それが利用可能であると思います。doc:http://gdal.org/python/osgeo.gdal-module.html#RasterizeOptions

答えて

1

RasterizeLayerは「すばやく」実行するのに苦労するので、これはテストなしです。

私は2つの潜在的な問題を発見します。あなたのサンプルコードに基づいて、実際に土地利用価値を設定するのではなく、"class[ii]"を文字列として渡します。つまり、GDALは土地利用属性が"class[ii]"(文字通りその文字列)の地物を選択します。使用した実際の値を挿入するには書式設定文字列、そのような何か:RasterizeLayerを使用しているとき、あなたが示唆するように見えるように

for ii in range(class)):  
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="{class}"'.format(class=class[ii])) 

は第二に、あなたはおそらく入力、ないシェープファイルとして層を提供する必要があります。 Shapefileからレイヤーをロードするか、Rasterizeを使用することを検討してください。

gdal.Rasterize(outds, dataset) 
gdal.RasterizeLayer(outds, layer) 
0

私はRasterizeOptionsと動作しない(無効なキーワード)についてはよく分からないんだけど、あなたはSetAttributeFilterでのShpにWHERE句を追加することができますようにそれはそう:

for ii in range(class)): 
    Shp.SetAttributeFilter("landuse='{}'".format(class[ii])) 
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii]) 
関連する問題