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
).
overviews
elemento, pero gdalbuildvrt no lo usa. Gracias por proporcionar un código auxiliar de cómo se podría agregar esto en Python.Desde GDAL 2.1, las herramientas CLI están disponibles como funciones de biblioteca, y de hecho eso es lo que las herramientas CLI ahora llaman internamente.
Por ejemplo:
Es el equivalente de:
Las opciones de CLI disponibles se asignan directamente a los parámetros de BuildVRTOptions , además de que hay algunos extras como devoluciones de llamada de progreso disponibles.
fuente
RegenerateOverviews()
yWarp()
en la referencia de la API . Los argumentos generalmente coinciden con los comandos de la CLI.BuildOverviews()
(que en realidad es lo que busqué cuando encontréRegenerateOverviews
), ¿tal vez intentarlo?La respuesta de @rcoup solo funcionó para mí, si la modifica de la siguiente manera:
De lo contrario, el archivo no se escribe en el disco.
fuente
closing
python, debe poner suvrt
fuera de alcance asignándolo aNone
.