如何使用GDAL将操作的栅格值写入ASCII网格?

Luc*_*cia 4 python gis raster geospatial gdal

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

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

错误1:slope.asc,band 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"
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 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
Run Code Online (Sandbox Code Playgroud)

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

  • 好吧,深入挖掘这看起来是正确的,AAIGrid驱动程序只能CreateCopy,但不能更新/修改值.显示GDAL 1.9的错误,但不显示以前的版本(它默默地不修改值).我同意使用GTiff驱动程序要简单得多. (2认同)