4

GDAL を使用してグリッド (ASCII グリッド) でラスター値を操作しようとしています。しかし、これに進む前に、新しい値をファイルに書き込むのに問題があります。これらのエラー メッセージは、slopeband.WriteArray(s) が呼び出されたときに表示されます。

エラー 6: 勾配.asc、バンド 1: このデータセットでは WriteBlock() はサポートされていません。

エラー 1: スロープ.asc、バンド 1: ダーティ ブロックの書き込み中にエラーが発生しました

これが非常に基本的なものである場合は申し訳ありませんが、特に python と GDAL にはまだ慣れていません。Mac OS X 10.6.8 および Python 2.7 で GDAL 1.9.0 を使用しています。ありがとうございました!

import numpy
import gdal
import gdalconst

dgm = gdal.Open("DGM_10_MR.asc", gdalconst.GA_ReadOnly)
driver = dgm.GetDriver()
geotransform = dgm.GetGeoTransform()
band = dgm.GetRasterBand(1)
data = band.ReadAsArray()

cols = dgm.RasterXSize
rows = dgm.RasterYSize
slope = driver.CreateCopy("slope.asc", dgm)
slope = None
dgm = None
slope = gdal.Open("slope.asc", gdalconst.GA_Update)
slope.SetGeoTransform(geotransform)
slopeband = slope.GetRasterBand(1)
s = slopeband.ReadAsArray()

for y in range(rows):
    for x in range(cols):
        s[y, x] = 0.0

slopeband.WriteArray(s)
slopeband.FlushCache()
del s

dgm = None
slope = None
print "done"
4

1 に答える 1

9

残念ながら、GDAL はすべてのファイルタイプで同じ程度に読み取りと書き込みを行うことはできません。Arc ASCII グリッドは、たまたま GDAL が書き込めないファイル タイプの 1 つです。エラー メッセージにあるように:WriteBlock() not supported for this dataset.であるため、Arc ASCII グリッドに書き込むことはできません。

別の方法として、既存の ASCII データセットを、GeoTiff などの GDAL がより完全にサポートする別のファイル タイプに変換することもできます。gdal_translateファイルタイプを変換するには、次のようにコマンドライン プログラムを使用できます。

gdal_translate -of GTiff DGM_10_R.asc DGM_10_R.tif

私のコンピューターでエラーを再現できました。ファイルタイプを変更するだけでエラーが修正されます。

于 2012-05-23T18:44:45.400 に答える