Sejujurnya lebih mudah untuk melakukan ini dengan menggunakan gdalbuildvrt dalam subprocess
atau os.system
.
Jika Anda ingin melakukan ini melalui Python, itu bisa dilakukan. Menggunakan metode pembuatan dataset standar dalam GDAL Python kita dapat dengan mudah membuat basis data VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Perhatikan bahwa kami membuat dataset tanpa band pada awalnya. Dari dokumentasi di VRTs yang VRT dataset adalah salah satu dari beberapa jenis dataset yang dapat menerima AddBand
argumen.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Sekarang untuk setiap band kita harus mengatur item metadata secara manual:
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
mengambil dua argumen, pertama string item metadata, yang kedua item itu sendiri. Ini berarti bahwa Anda tidak dapat mengelompokkan item metadata, jadi untuk sumber data Anda harus mengatur seluruh konten sebagai string.
Perhatikan bahwa kita dapat menggunakan metode ini untuk membuat sumber kompleks ( ComplexSource
) yang berisi tabel nilai pencarian, sumber filter Kernel ( KernelFilteredSource
) dengan ukuran dan bentuk sewenang-wenang, dan Band Mask ( MaskBand
).