4

我正在尝试使用 GDAL 操作网格(ASCII 网格)中的栅格值。但在继续此之前,我无法将新值写入文件。当调用 slopeband.WriteArray(s) 时,我收到这些错误消息。

错误 6:slope.asc,波段 1:此数据集不支持 WriteBlock()。

错误 1:slope.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 无法写入的文件类型之一。正如您的错误消息所述:WriteBlock() not supported for this dataset.,因此您无法写入 Arc ASCII 网格。

作为替代方案,您可以将现有的 ASCII 数据集转换为不同的文件类型,即 GDAL 更全面支持的文件类型,例如 GeoTiff。要转换文件类型,您可以gdal_translate像这样使用命令行程序:

gdal_translate -of GTiff DGM_10_R.asc DGM_10_R.tif

我能够在我的计算机上重现您的错误,并且只需更改文件类型即可修复错误。

于 2012-05-23T18:44:45.400 回答