Honestamente, é mais fácil fazer isso usando gdalbuildvrt em um subprocess
or os.system
.
Se você desejar fazer isso através do Python, isso pode ser feito. Usando os métodos de criação de conjuntos de dados padrão no GDAL Python, podemos criar facilmente o VRT do conjunto de dados base .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Observe que estamos criando o conjunto de dados sem bandas inicialmente. Na documentação dos VRTs, os conjuntos de dados VRT são um dos poucos tipos de conjuntos de dados que podem aceitar AddBand
argumentos.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Agora, para cada banda, precisamos definir os itens de metadados 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
recebe dois argumentos, o primeiro uma sequência do item de metadados, o segundo o próprio item. Isso significa que você não pode subconjunto de um item de metadados; portanto, para fontes de dados, é necessário definir todo o conteúdo como uma sequência.
Observe que podemos usar esse método para criar fontes complexas ( ComplexSource
) que contêm tabelas de consulta de valores, fontes de filtro do Kernel ( KernelFilteredSource
) de tamanhos e formas arbitrárias e Bandas de máscara ( MaskBand
).
overviews
elemento, mas o gdalbuildvrt não o usa. Obrigado por fornecer um esboço sobre como isso pode ser adicionado em python.Desde o GDAL 2.1, as ferramentas CLI estão disponíveis como funções de biblioteca e, de fato, é o que as ferramentas CLI chamam agora internamente.
Por exemplo:
É o equivalente a:
As opções disponíveis da CLI são mapeadas diretamente para os parâmetros de BuildVRTOptions , além de alguns extras, como retornos de chamada de progresso disponíveis.
fonte
A resposta de @rcoup só funcionou para mim, se modificada da seguinte maneira:
Caso contrário, o arquivo não será gravado no disco.
fonte
closing
para python, você deve tirar seuvrt
escopo, atribuindo-o aNone
.