GDAL을 사용하여 기존 GeoTiff에 밴드를 추가 하시겠습니까?


15

이것은 간단 해야하는 것처럼 보이지만 나는 내 인생에서 그것을 알아낼 수 없습니다.

단일 밴드를 포함하는 기존 GeoTiff가 있다면 해당 GeoTiff에 다른 밴드를 어떻게 추가 할 수 있습니까? GDALCreate ()를 사용하여 추가 밴드가있는 새 출력 파일을 만든 다음 기존 밴드를 원본 파일에서 새 파일로 복사하는 유일한 방법입니까? 이것이 지금까지 내가 찾은 유일한 솔루션이지만 기존 데이터 세트에 밴드를 추가하는 간단한 방법이 있어야합니다.


안녕하세요 @TheOx, 같은 문제가 있습니다. LDCM 단일 밴드의 2,3,4 밴드에서 합성 이미지 색상을 만들고 싶습니다. 질문에 대한 해결책이 있습니까?
재키

1
@Jackie는 vrt 드라이버를 사용하여 사본을 생성하고 밴드를 추가 한 다음 GeoTiff 드라이버를 사용하여 지오텍에 사본을 생성하는 방법에 대한 kyle의 의견을 참조하십시오.
TheOx

답변:


8

드라이버가 지원하는 경우 해결책은 GA_Update 액세스로 GDALOpen () 을 호출 한 다음 GDALAddBand 또는 GDALDataset :: AddBand를 사용하는 것 입니다. 그러나 geotiff 드라이버는 AddBand를 지원하지 않습니다.


2
추가 밴드를 지원하는 드라이버는 거의 없으며 지오 드라이버가 믿지 않습니다. 은 하나의 내가 알고 는 VRT입니다 지원합니다.

글쎄 @kyle이 맞습니다-geotiff 드라이버는 AddBand를 지원하지 않지만 드라이버가 지원하고 내가 찾고있는 것이라면이 답변의 방법이 정확합니다.
TheOx

도! 그 작은 세부 사항을 잊어 버렸습니다. @ TheOx 나는 내 대답이 정확하지 않기 때문에 내 대답을 받아 들여야한다고 생각하지 않습니다. 지오텍과 관련된 오리지널 질문.
user2856

@Luke : 드라이버가 지원하는 경우 일반적인 솔루션임을 지정하도록 답변을 편집하고 수락합니다. 내 원래 질문의 방법이 부족한 GeoTiff에 대해서는 다른 방법이없는 것 같습니다.
TheOx

1
Geotiff 드라이버와 함께 vrt 드라이버, CreateCopy (), AddBand (), CreateCopy ()를 사용하십시오.

8

Luke의 답변을 확장하고 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 드라이버를 사용하는 것은 여전히 ​​다른 방법을 통해 가능할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.