I often need to generate polygons that trace the outline of the valid data area of an image. I used to use gdal_trace_outline
from dans-gdal-scripts (https://github.com/gina-alaska/dans-gdal-scripts), but that package isn’t actively maintained and I’ve had trouble getting it to compile against recent versions of GDAL installed from conda-forge.
Instead, I’ve figured out how to use GDAL to make a virtual raster mask and then use GDAL’s own gdal_polygonize.py
to draw the footprint.
Here’s an example:
# Say you have an 8-bit image with a NoData value of 0,
# use gdal_translate to stretch values [1,255] to [1,1],
# and assign 0 to represent the NoData value on output,
# save result as VRT rather than writing a new raster to disk.
gdal_translate -scale 1 255 1 1 -ot Byte -of vrt -a_nodata 0 input_ortho.tif input_ortho_mask.vrt
# Create a polygon shapefile that outlines the valid (DN==1)
# regions of the VRT just created
gdal_polygonize.py -8 input_ortho_mask.vrt -f "ESRI Shapefile" mask_footprint.shp mask_footprint DN