Honestamente, é mais fácil fazer isso usando gdalbuildvrt em um subprocessor os.system.
Se você desejar fazer isso através do Python, isso pode ser feito. Usando os métodos de criação de conjuntos de dados padrão no GDAL Python, podemos criar facilmente o VRT do conjunto de dados base .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Observe que estamos criando o conjunto de dados sem bandas inicialmente. Na documentação dos VRTs, os conjuntos de dados VRT são um dos poucos tipos de conjuntos de dados que podem aceitar AddBandargumentos.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Agora, para cada banda, precisamos definir os itens de metadados manualmente:
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)
SetMetadatItemrecebe dois argumentos, o primeiro uma sequência do item de metadados, o segundo o próprio item. Isso significa que você não pode subconjunto de um item de metadados; portanto, para fontes de dados, é necessário definir todo o conteúdo como uma sequência.
Observe que podemos usar esse método para criar fontes complexas ( ComplexSource) que contêm tabelas de consulta de valores, fontes de filtro do Kernel ( KernelFilteredSource) de tamanhos e formas arbitrárias e Bandas de máscara ( MaskBand).