Onestamente è più facile farlo usando gdalbuildvrt in a subprocess
o os.system
.
Se desideri farlo tramite Python, puoi farlo. Utilizzando i metodi standard di creazione del set di dati all'interno di GDAL Python possiamo facilmente creare il set di dati di base VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Si noti che stiamo creando il set di dati senza bande inizialmente. Dalla documentazione in VRTS che dataset VRT sono uno dei pochi tipi set di dati che possono accettare AddBand
argomenti.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Ora per ogni banda dobbiamo impostare manualmente gli elementi dei metadati:
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
accetta due argomenti, il primo una stringa dell'elemento metadati, il secondo l'elemento stesso. Ciò significa che non è possibile sottoinsieme un elemento di metadati, quindi per le origini dati è necessario impostare l'intero contenuto come stringa.
Si noti che è possibile utilizzare questo metodo per creare origini complesse ( ComplexSource
) che contengono tabelle di ricerca di valori, origini di filtri del kernel ( KernelFilteredSource
) di dimensioni e forme arbitrarie e bande di maschere ( MaskBand
).