The April-June 2005 issue of ArcUser contains an article by Hobu on pages 34-36. It's an introduction to Python and GIS, and vector, grid, and raster processing with ogr.py and gdal.py for users of ArcGIS 9 -- which includes Python and makes a small subset of its functionality scriptable. Good writing, too bad he seems to have retired from blogging ;)
I ventured further into the magaine and found myself comparing the agility of ArcGIS and the GDAL/OGR Python modules while reading the tutorial on pages 46-49 ("Creating Accurate Footprints of Registered Aerial Images"). It's a rather involved and round-about manual process requiring an expensive ArcGIS add-on (Spatial Analyst). I'm sure that one could also manage to open a beer bottle using dentistry tools, but not as readily as with a bottle opener. Consider the following Python script:
# Create footprint shapefile
import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
footprints_shp = driver.CreateDataSource('footprints.shp')
footprints = footprints_shp.CreateLayer('footprints',
geom_type=ogr.wkbPolygon)
fd = ogr.FieldDefn('FILENAME', ogr.OFTString)
fd.SetWidth(30)
footprints.CreateField(fd)
# Loop over a number of georeferenced images
import glob
import gdal
files = glob.glob('*.jpg')
for file in files:
# Get georeferencing and size of imagery
dataset = gdal.Open(file)
g = dataset.GetGeoTransform()
pixels = dataset.RasterXSize
lines = dataset.RasterYSize
minx = g[0]
maxx = minx + pixels * g[1]
maxy = g[3]
miny = maxy + lines * g[5]
# append to the 'footprints' layer
wkt = 'POLYGON ((%f %f, %f %f, %f %f, %f %f, %f %f))' \
% (minx, miny, minx, maxy, maxx, maxy, maxx, miny, minx, miny)
g = ogr.CreateGeometryFromWkt(wkt)
f = ogr.Feature(feature_def=footprints.GetLayerDefn())
f.SetField(0, file)
f.SetGeometryDirectly(g)
footprints.CreateFeature(f)
f.Destroy()
# destroy footprints_shp to flush and close
footprints_shp.Destroy()
No fooling about -- directly to the imagery bounds and write a polygon. Simple and straight-forward, the right tool for the job.