[gdal-dev] keep metadata tags when creating multiband file

Even Rouault even.rouault at mines-paris.org
Wed Oct 23 07:40:39 PDT 2013


Michele,

> 
> I have a number of individual Landsat bands that I'm converting to GeoTiff
> and would then like to merge to a multiband file using either
> gdal_merge.py or another gdal utility (gdalbuildvrt, gdal_translate).  In
> the individually derived geotif files, I am able to internally "label" the
> corresponding Landsat band by creating a metadata tag.  For example, in
> using the following gdal_translate command from a file that is Landsat
> data for Band 1 called landsat.b1.dat:
> 
> gdal_translate -of GTiff -strict -stats -mo "Band = LandsatBand ${f: -5:1}"
> -co "COMPRESS=LZW"  -co "PROFILE=GeoTIFF" $f $f.tif
> 
> This creates a metadata tag in the tif file:
> -------------------------------------------------
> Metadata:
>   AREA_OR_POINT=Area
>   Band =LandsatBand 1
> 
> And there is a separate .aux.xml for each of the tif files:
> -------------------------------------------------------------------
> <PAMDataset>
>   <Metadata>
>     <MDI key="Band ">LandsatBand 1</MDI>
>   </Metadata>
>   <PAMRasterBand band="1">
>     <Metadata>
>       <MDI key="STATISTICS_MAXIMUM">255</MDI>
>       <MDI key="STATISTICS_MEAN">40.826976974681</MDI>
>       <MDI key="STATISTICS_MINIMUM">0</MDI>
>       <MDI key="STATISTICS_STDDEV">31.471508896152</MDI>
>     </Metadata>
>   </PAMRasterBand>
> 

Instead of setting the band name at the dataset level, you should set it at 
the band level instead. There's currently no way to do that with 
gdal_translate. You have to edit the .aux.xml file manually :

For example let's consider band1.tif with band1.tif.aux.xml :

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="Band">LandsatBand 1</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

and band2.tif with band2.tif.aux.xml :

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="Band">LandsatBand 2</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

and then you would want to run "gdalbuildvrt -separate merged.vrt band1.tif 
band2.tif". Unfortunately I see that it also loses band metadata. I don't 
think there's a fundamental reason to explain that they are lost, except that 
it hasn't been coded yet.

You can still put then again by editing the merged.vrt and adding the     
<Metadata>      <MDI key="Band">LandsatBand X</MDI>     </Metadata> at 
appropriate place.

See below :

<VRTDataset rasterXSize="20" rasterYSize="20">
  <SRS>PROJCS["NAD27 / UTM zone 
11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 
1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","26711"]]</SRS>
  <GeoTransform>  4.4072000000000000e+05,  6.0000000000000000e+01,  
0.0000000000000000e+00,  3.7513200000000000e+06,  0.0000000000000000e+00, 
-6.0000000000000000e+01</GeoTransform>
  <VRTRasterBand dataType="Byte" band="1">
    <Metadata>
      <MDI key="Band">LandsatBand 1</MDI>
    </Metadata>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">byte1.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="20" RasterYSize="10" DataType="Byte" 
BlockXSize="20" BlockYSize="10" />
      <SrcRect xOff="0" yOff="0" xSize="20" ySize="10" />
      <DstRect xOff="0" yOff="0" xSize="20" ySize="10" />
    </SimpleSource>
  </VRTRasterBand>
  <VRTRasterBand dataType="Byte" band="2">
    <Metadata>
      <MDI key="Band">LandsatBand 2</MDI>
    </Metadata>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">byte2.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="20" RasterYSize="20" DataType="Byte" 
BlockXSize="20" BlockYSize="20" />
      <SrcRect xOff="0" yOff="0" xSize="20" ySize="20" />
      <DstRect xOff="0" yOff="0" xSize="20" ySize="20" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>


And then

$ gdal_translate merged.vrt merged.tif 

$ gdalinfo merged.tif 
Driver: VRT/Virtual Raster
Files: merged.tif 
Size is 20, 20
Coordinate System is:
PROJCS["NAD27 / UTM zone 11N",
    GEOGCS["NAD27",
        DATUM["North_American_Datum_1927",
            SPHEROID["Clarke 1866",6378206.4,294.9786982139006,
                AUTHORITY["EPSG","7008"]],
            AUTHORITY["EPSG","6267"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4267"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",-117],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","26711"]]
Origin = (440720.000000000000000,3751320.000000000000000)
Pixel Size = (60.000000000000000,-60.000000000000000)
Corner Coordinates:
Upper Left  (  440720.000, 3751320.000) (117d38'28.21"W, 33d54' 8.47"N)
Lower Left  (  440720.000, 3750120.000) (117d38'27.92"W, 33d53'29.51"N)
Upper Right (  441920.000, 3751320.000) (117d37'41.48"W, 33d54' 8.71"N)
Lower Right (  441920.000, 3750120.000) (117d37'41.20"W, 33d53'29.75"N)
Center      (  441320.000, 3750720.000) (117d38' 4.70"W, 33d53'49.11"N)
Band 1 Block=20x20 Type=Byte, ColorInterp=Gray
  Metadata:
    Band=LandsatBand 1
Band 2 Block=20x20 Type=Byte, ColorInterp=Undefined
  Metadata:
    Band=LandsatBand 2

Best rergards,

Even

-- 
Geospatial professional services
http://even.rouault.free.fr/services.html


More information about the gdal-dev mailing list