Honestamente, es más fácil hacer esto usando gdalbuildvrt en una subprocess
o os.system
.
Si desea hacer esto a través de Python, puede hacerlo. Usando los métodos de creación de conjuntos de datos estándar dentro de GDAL Python, podemos crear fácilmente el conjunto de datos base VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Tenga en cuenta que estamos creando el conjunto de datos sin bandas inicialmente. A partir de la documentación sobre VRTS que VRT conjuntos de datos son uno de los pocos tipos de conjuntos de datos que pueden aceptar AddBand
los argumentos.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Ahora para cada banda tenemos que configurar los elementos de metadatos 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)
SetMetadatItem
toma dos argumentos, el primero una cadena del elemento de metadatos, el segundo el elemento en sí. Esto significa que no puede subconjugar un elemento de metadatos, por lo que para las fuentes de datos debe establecer todo el contenido como una cadena.
Tenga en cuenta que podemos usar este método para crear fuentes complejas ( ComplexSource
) que contengan tablas de valores de búsqueda, fuentes de filtro de Kernel ( KernelFilteredSource
) de tamaños y formas arbitrarias y bandas de máscara ( MaskBand
).