[gdal-dev] building a vrt to stack overlapping COGs with a mask/alpha band

Even Rouault even.rouault at spatialys.com
Wed Jul 8 04:23:01 PDT 2020


On mercredi 8 juillet 2020 10:12:31 CEST Landry Breuil wrote:
> Hi,
> 
> i'm converting a stock of tiled aerial pictures (from distinct
> years/campaigns) to COG (using gdal 3.1.0), and trying to stack them via
> a vrt. the COG arent 'full', in the sense that they have a bbox, but
> there isnt data *everywhere*. Some of those campaigns/COGs have
> overlapping BBOXes.
> 
> the COG are built from vrts (assembling all the tiles for the campaign)
> built with -addalpha, and then using gdal_translate -of COG -b 1 -b 2 -b
> 3 -mask 4 to have the mask band in the resulting COG, ie i get 3 bands
> with a 'per-dataset mask':
> 
> Band 1 Block=512x512 Type=Byte, ColorInterp=Red
>    Overviews: 148000x172000, 74000x86000, 37000x43000, 18500x21500,
> 9250x10750, 4625x5375, 2313x2688, 1157x1344, 579x672, 290x336
>    Mask Flags: PER_DATASET
>    Overviews of mask band: 148000x172000, 74000x86000, 37000x43000,
> 18500x21500, 9250x10750, 4625x5375, 2313x2688, 1157x1344, 579x672, 290x336
> 
> i have zero issue loading the separate COGs in QGIS (locally or via
> vsicurl), the nodata areas are properly displayed as transparent,
> loading several COGs on top of each other properly render the
> overlapping areas, ie if at some coords there's data in the lower COG
> and nodata in the toplevel COG, then the data from the lower COG is
> rendered. That can also be achieved via a mapserver GROUP, loading the
> layers on top of each other, as seen in https://imgur.com/9BgZSTH.png
> 
> Trying to achieve the same via a vrt file stacking the COGs fails (plain
> gdalbuildvrt img1.tiff img2.tiff), ie for the same coords, nodata will
> be rendered if there's nodata in the toplevel COG (even if there's data
> in the lower COG), and that for the complete BBOX of the toplevel COG
> (ie outside of the toplevel COG BBOX, data from the lower COGs is
> displayed). See https://imgur.com/a/HiEfjxY for an example (here, it's
> via WMS loading as jpeg, using png the white area would be transparent).
> 
> I tried playing with the various gdalbuildvrt (-addalpha, etc..) options
> but i still cant figure out what is the correct incantation to achieve
> my goal (ie tell gdalbuildvrt that there's some kind of 'cutline' around
> the given COGs ?), so i'm resorting to find hints on the list :)

Landry,

The behaviour you describe is indeed how VRT stacking works currently. Alpha / masks bands 
are dealt as regular bands. No blending is done. Long time wish / todo.

Your best option with VRT would be to use a NoData value instead if you can.
Or use gdalwarp to create a materialized mosaic.

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20200708/775a92a9/attachment.html>


More information about the gdal-dev mailing list