我有一个geotif,想要更新一个像素/单元格的值。保存此更改的最佳方法(资源安全)是什么? 我是否必须使用WriteArray()函数或是否有更好的解决方案更新相同的tif?
ds = gdal.Open("test.tif")
data = ds.ReadAsArray()
data[0][0] = 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, :, :])