回答:
正直なところ、またはでgdalbuildvrtを使用すると、これを簡単に実行できます。subprocess
os.system
Pythonでこれを行いたい場合は、それを行うことができます。GDAL Python内の標準のデータセット作成方法を使用して、ベースデータセットVRTを簡単に作成できます。
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
最初にバンドのないデータセットを作成していることに注意してください。VRT に関するドキュメントによると、VRTデータセットはAddBand
引数を受け入れることができる数少ないデータセットタイプの1つです。
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
バンドごとに、メタデータアイテムを手動で設定する必要があります。
simple_source = '<SourceFilename relativeToVRT="1">%s</SourceFilename>' % source_path + \
'<SourceBand>%i</SourceBand>' % source_band + \
'<SourceProperties RasterXSize="%i" RasterYSize="%i" DataType="Real" BlockXSize="%i" BlockYSize="%i"/>' % (x_size, y_size, x_block, y_block) + \
'<SrcRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (x_offset, y_offset, x_source_size, y_source_size) + \
'<DstRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (dest_x_offset, dest_y_offset, x_dest_size, y_dest_size)
band.SetMetadataItem("SimpleSource", simple_source)
band.SetMetadataItem("NoDataValue", -9999)
SetMetadatItem
2つの引数を取ります。1つ目はメタデータアイテムの文字列、2つ目はアイテム自体です。これは、メタデータアイテムをサブセット化できないことを意味します。したがって、データソースの場合は、コンテンツ全体を文字列として設定する必要があります。
このメソッドを使用してComplexSource
、値のルックアップテーブルKernelFilteredSource
、任意のサイズと形状のカーネルフィルターソース()、およびマスクバンド(MaskBand
)を含む複雑なソース()を作成できることに注意してください。
overviews
要素をサポートしますが、gdalbuildvrtはそれを使用しません。スタブを提供してくれてありがとう、これをPythonに追加する方法を教えてください。
GDAL 2.1以降、CLIツールはライブラリ関数として使用できます。実際、これはCLIツールが内部的に呼び出すものです。
例えば:
gdalbuildvrt -r cubic -addalpha my.vrt one.tif two.tif
以下と同等です:
from osgeo import gdal
vrt_options = gdal.BuildVRTOptions(resampleAlg='cubic', addAlpha=True)
gdal.BuildVRT('my.vrt', ['one.tif', 'two.tif'], options=vrt_options)
利用できるCLIオプションは、直接のパラメータにマッピングBuildVRTOptions、プラス利用できる進捗のコールバックのようないくつかの特典があります。
@rcoupの答えは、次のように変更した場合にのみ機能しました。
from osgeo import gdal
vrt_options = gdal.BuildVRTOptions(resampleAlg='cubic', addAlpha=True)
my_vrt = gdal.BuildVRT('my.vrt', ['one.tif', 'two.tif'], options=vrt_options)
my_vrt = None
それ以外の場合、ファイルはディスクに書き込まれません。
closing
python がないのでvrt
、に割り当ててスコープから外しなければなりませんNone
。