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
).
overviews
élément, mais gdalbuildvrt ne l'utilise pas. Merci d'avoir fourni un stub sur la façon dont cela pourrait être ajouté en python.Depuis GDAL 2.1, les outils CLI sont disponibles en tant que fonctions de bibliothèque, et c'est en fait ce que les outils CLI appellent désormais en interne.
Par exemple:
Est l'équivalent de:
Les options CLI disponibles correspondent directement aux paramètres de BuildVRTOptions , plus il y a quelques extras comme les rappels de progression disponibles.
la source
RegenerateOverviews()
etWarp()
dans la référence API . Les arguments correspondent généralement aux commandes CLI.BuildOverviews()
(qui est en fait ce que je cherchais quand j'ai trouvéRegenerateOverviews
) - peut-être essayer?La réponse de @rcoup n'a fonctionné que pour moi, si vous la modifiez comme suit:
Sinon, le fichier n'est pas écrit sur le disque.
la source
closing
de python, vous devez sortir votrevrt
champ d'application en l'attribuant àNone
.