2015-02-03 2 views
0

У меня есть геотип и вы хотите обновить значение одного пикселя/ячейки. Каков наилучший способ (безопасный ресурс), чтобы сохранить это изменение? Должен ли я использовать функцию WriteArray() или есть лучшее решение для обновления того же tif?Обновление tif с помощью gdal

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

data[0][0] = 1 

ответ

1

Если открыть набор данных с опцией GA_Update, вместо GA_ReadOnly вы можете обновить его непосредственно. Также имейте в виду, что 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() вернет 3-мерный массив, и вам придется перебирать полосы для их записи.

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