使用gdal更新tif

时间:2015-02-03 08:52:53

标签: python gis gdal

我有一个geotif,想要更新一个像素/单元格的值。保存此更改的最佳方法(资源安全)是什么? 我是否必须使用WriteArray()函数或是否有更好的解决方案更新相同的tif?

ds = gdal.Open("test.tif")
data = ds.ReadAsArray()

data[0][0] = 1

1 个答案:

答案 0 :(得分:2)

如果您使用选项GA_Update打开数据集,而不是GA_ReadOnly,则可以直接更新。{p>另请注意,ReadAsArray()会返回一个numpy ndarray,您必须使用data[0, 0]而不是data[0][0]来添加。

ds = gdal.Open("test.tif", GA_Update)
data = ds.ReadAsArray()

data[0, 0] = 1

ds.GetRasterBand(1).WriteArray(data)

# close the dataset to flush it to disk
ds = None

如果您的图片有一个波段,则此代码可以使用。如果它有多个波段,比如5,ReadAsArray()将返回一个三维数组,你必须循环通过你的波段来编写它们。

for band in range(5):
    ds.GetRasterBand(band+1).WriteArray(data[band, :, :])