Додавання діапазону до існуючого GeoTiff за допомогою GDAL?


15

Це здається, що це має бути просто, але я не можу за все життя це зрозуміти.

З огляду на існуючий GeoTiff, що містить одну смугу, як ви можете додати ще одну смугу до цього GeoTiff? Є єдиний спосіб зробити це за допомогою GDALCreate (), щоб створити новий вихідний файл з додатковою смугою, а потім скопіювати існуючий діапазон з вихідного файлу в новий файл? Це єдине рішення, яке я придумав поки що, але, здається, повинен бути простий спосіб додати смугу до існуючого набору даних.


Привіт @TheOx, у мене така ж проблема. Я хочу зробити композитний колір зображення із смуги 2,3,4 одиночних діапазонів LDCM. У вас ще є рішення для вашого питання?
Джекі

1
@Jackie див. Коментар Кайла у прийнятій відповіді про використання драйвера vrt для створення копії, додавання смуги, а потім створення копії цього списку до геотифу з драйвером GeoTiff.
TheOx

Відповіді:


8

Якщо драйвер підтримує це, слід вирішити, щоб викликати GDALOpen () з доступом до GA_Update, тоді використовувати GDALAddBand або GDALDataset :: AddBand . Однак драйвер geotiff не підтримує AddBand.


2
Дуже мало водіїв підтримують додавання діапазону, я не вірю, що драйвер geotiff робить. Єдиний, кого я знаю, що підтримує це - сад.

Ну @kyle має рацію - драйвер geotiff не підтримує AddBand, але метод у цій відповіді правильний, якщо драйвер підтримує його і був те, що я шукав, тому я його приймаю.
TheOx

До! Забув про цю маленьку деталь. @TheOx Я не думаю, що ти повинен сприймати мою відповідь, оскільки це не правильно. первісне питання, яке конкретно стосується геотифів.
користувач2856

@Luke: Відредагуйте свою відповідь, щоб вказати, що це загальне рішення, якщо драйвер його підтримує, і я прийму його. Здається, що для мого початкового запитання GeoTiff не існує іншого способу зробити це для методу GeoTiff.
TheOx

1
Використовуйте драйвер саду, CreateCopy (), AddBand (), CreateCopy () з драйвером Geotiff.

8

Щоб розширити відповідь Луки і надати конкретний приклад в Python, ось фрагмент, який додає альфа-діапазон до вихідного растру і зберігає його як PNG.

from osgeo import gdal

src_ds = gdal.OpenShared(input_path)
mask_ds = gdal.OpenShared(mask_path)
mask = mask_ds.GetRasterBand(1).ReadAsArray()

tmp_ds = gdal.GetDriverByName('MEM').CreateCopy('', src_ds, 0)
tmp_ds.AddBand()
tmp_ds.GetRasterBand(4).WriteArray(mask)

dst_ds = gdal.GetDriverByName('PNG').CreateCopy(output_path, tmp_ds, 0)
del dst_ds

Я використовував MEMдрайвер замість того, VRTщо останній не підтримує WriteRaster()і WriteArray()(помилка "Запис через VRTSourcedRasterBand не підтримується."). Використовувати драйвер vrt, можливо, все-таки можливо через деякі інші методи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.