[Gfoss] Raster batch clipping

Paolo Corti pcorti a gmail.com
Gio 20 Ott 2011 15:44:11 CEST


2011/10/20 Michele Beneventi <mbeneventi a gmail.com>:
> Grazie per le risposte!!!
> Per ora ho trovato una soluzione intermedia, considerando che sono un umile
> " utente finale", che raggiunge il suo scopo:
> la sintassi che ho usato è la seguente:
> gdalwarp -q -cutline /path/dello/shape
>               -cwhere "AttributoPerSQLClip = 'valoreAttributo'"
>               -crop_to_cutline /path/immagine/da clippare
>              /path/dell'/output/
> il parametro -cwhere è stata una bella sopresa!
> grazie ancora
> a presto
> Michele

Ciao Michele
senza dover pre-trattare lo shapefile, potresti farti uno script
Python tipo questo, veramente molto semplice (usando ogr da codice e poi il
comando gdal_translate):

import os
from osgeo import ogr

def ClipRasterWithShape(raster, shapefile):
    driver = ogr.GetDriverByName('ESRI Shapefile')
    dataset = driver.Open(shapefile, 0)
    layer = dataset[0]
    for feature in layer:
        geom = feature.GetGeometryRef()
        envelope = geom.GetEnvelope()
        print 'Clipping feature %s with extent: %s' %
(feature.GetFID(), envelope)
        os.system('gdal_translate -projwin %s %s %s %s  %s out%s' %
(envelope[0], envelope[3], envelope[1], envelope [2], raster,
feature.GetFID()))

ClipRasterWithShape('myraster.tif', 'myshape.shp')

salva tutto come myprog.py e lancia:
$ python myprog.py

se hai il supporto Python per gdal dovrebbe andare senza problemi

ciao
P

-- 
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti


Maggiori informazioni sulla lista Gfoss