[gdal-dev] creating .VRT files with the python bindings

Even Rouault even.rouault at mines-paris.org
Tue Feb 1 13:50:25 EST 2011


Ricardo,

Basically the XML you pass with SetMetadataItem() is deserialized and 
serialized again, but the relativeToVRT element isn't part of the internal 
model of the VRT driver and is "recomputed" at serialization time, so this 
explains why it can change behind your back.

I think however that this has been fixed in GDAL 1.8.0 in 
http://trac.osgeo.org/gdal/changeset/20939

Best regards,

Even

Le mardi 01 février 2011 02:27:36, Ricardo Filipe Soares Garcia da a écrit :
> Hello list
> I am trying to create a .VRT file to mosaic a bunch of HDF5 files. It
> is starting to work, except for the fact that I can't seem to set the
> relativeToVRT attribute of the SourceFilename tag to "0".
> 
> I've been adapting the online vrt tutorial[1] from C++ to Python. The
> tutorial says that relativeToVRT will default to "0", but I'm getting
> the exact opposite. It is defaulting to "1", and even if I try to set
> it to "0" explicitly when using the SetMetadataItem method, it will
> still be saved as a "1". I have included an excerpt of the code at the
> end of this message. I'll post the rest of it if it is relevant.
> 
> After saving the file, I can open a text editor and replace all the
> "1" with "0" and this fixes it, allowing me to get the desired
> visualization (on QGIS).
> 
> Am I doing something wrong here? Or is this possibly a bug? I'm using
> gdal 1.7.3, as available on the ubuntugis-unstable repository.
> 
> 
> Another question: is it possible to use derived bands via python
> bindings? I guess I'll have to write a pixel function and somehow
> register it with gdal...
> 
> [1] - http://www.gdal.org/gdal_vrttut.html
> 
> [2] - python code follows:
> 
> 
> def get_xml_source(fileName, dataSet, xSize, ySize, dType, blockX,
>                    blockY, sXOff, sYOff, sXSize, sYSize, dXOff,
>                    dYOff, dXSize, dYSize, relToVRT=0, band=1):
>     template = """
>     <SimpleSource>
>     <SourceFilename relativeToVRT='%i'>HDF5:%s://%s</SourceFilename>
>     <SourceBand>%i</SourceBand>
>     <SourceProperties RasterXSize='%i' RasterYSize='%i' DataType='%s'
> BlockXSize='%i' BlockYSize='%i' />
>     <SrcRect xOff='%i' yOff='%i' xSize='%i' ySize='%i' />
>     <DstRect xOff='%i' yOff='%i' xSize='%i' ySize='%i' />
>     </SimpleSource>
>     """
>     return template % (relToVRT, fileName, dataSet, band, xSize, ySize,
>                        dType, blockX, blockY, sXOff, sYOff, sXSize, sYSize,
>                        dXOff, dYOff, dXSize, dYSize)
> 
> .... somewhere down the code...
> 
> xmlSource = get_xml_source(lit, dataSet, xResolution, yResolution,
>                                    "Int16", blockXSize, blockYSize, 0, 0,
>                                    xResolution, yResolution, xOff, yOff,
>                                    xResolution, yResolution)
> outBand.SetMetadataItem("teste", xmlSource, "new_vrt_sources")


More information about the gdal-dev mailing list