GDALを使用して既存のGeoTiffにバンドを追加しますか?


15

これは簡単なことのように思えますが、私の人生ではそれを理解することはできません。

単一のバンドを含む既存のGeoTiffがある場合、そのGeoTiffに別のバンドを追加するにはどうすればよいですか?GDALCreate()を使用して追加のバンドを持つ新しい出力ファイルを作成し、既存のバンドを元のファイルから新しいファイルにコピーする唯一の方法はありますか?これが私がこれまでに考案した唯一のソリューションですが、既存のデータセットにバンドを追加する簡単な方法があるはずです。


こんにちは@TheOx、同じ問題があります。LDCMシングルバンドのバンド2,3,4から合成画像の色を作りたいです。質問に対する解決策はまだありますか?
ジャッキー14年

1
@Jackieは、VRTドライバーを使用してコピーを作成し、バンドを追加し、GeoTiffドライバーを使用してジオティフにコピーを作成することについて、受け入れられた回答にあるkyleのコメントを参照します。
TheOx 14年

回答:


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.