Honnêtement, il est plus facile de le faire en utilisant gdalbuildvrt dans un subprocess
ou os.system
.
Si vous souhaitez le faire via Python, cela peut être fait. En utilisant les méthodes de création de jeux de données standard dans GDAL Python, nous pouvons facilement créer le jeu de données de base VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Notez que nous créons initialement l'ensemble de données sans bandes. De la documentation sur VRTS que les ensembles de données sont calorMATIC l' un des rares types de jeux de données qui peuvent accepter des AddBand
arguments.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Maintenant, pour chaque bande, nous devons définir les éléments de métadonnées manuellement:
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
prend deux arguments, le premier une chaîne de l'élément de métadonnées, le second l'élément lui-même. Cela signifie que vous ne pouvez pas sous-définir un élément de métadonnées, donc pour les sources de données, vous devez définir l'intégralité du contenu sous forme de chaîne.
Notez que nous pouvons utiliser cette méthode pour créer des sources complexes ( ComplexSource
) qui contiennent des tables de recherche de valeurs, des sources de filtre noyau ( KernelFilteredSource
) de tailles et de formes arbitraires et des bandes de masque ( MaskBand
).