I gioielli più preziosi spesso stanno nascosti dentro una scatola di latta, sotto un paio di calze, nell’angolo del cassetto del mobile vecchio della nonna.
Non avrei (forse) mai scritto il tutorial che sto per scrivere, se non fossi “caduto” per caso in questo sito, un forum italiano dedicato al mondo delle mountain bike. Non ricordo esattamente come ci sia finito, probabilmente mentre facevo ricerche su qualcosa di collegato ad Atlante Italiano (il Portale Cartografico Nazionale). Il sito del forum di cui sopra è ovviamente in qualche modo legato al mondo dei GIS – oggi i ciclisti usano spesso GPS e cartine – ma non mi sarei mai aspettato di trovare un tutorial su come utilizzare gdal_translate in batch da riga di comando. Ma andiamo al tutorial.
Immaginate di avere una cartella con decine di file GeoTiff (o anche delle orribili coppie .tif/.tfw) , ed di volere convertire in batch (ovvero una conversione in blocco di tutti questi file) in un formato raster GIS compresso come il jpg2000 o l’ECW. Il cuore del processo sarà per l’appunto gdal_translate, un’utility che si trova in FWTools, e il cervello saranno i “cicli for” a partire dal prompt dei comandi.
Il funzionamento di gdal_translate è molto semplice. Immaginiamo di voler convertire un file GeoTiff in formato ECW; questi i passi da seguire:
- aprite la shell di FWTools (si trova in Avvio>Tutti i Programmi>FWTools 1.x.x)
- scrivete un comando di questo tipo
>gdal_translate -of ECW c:tantotiftopografica1.tif c:tantoecwtopografica1.ecw
Come vedete è un comando potente e di semplice utilizzo:
- prima il nome del comando (gdal_translate)
- poi bisogna fissare il formato di output con “-of” (output format)
- poi il nome del file di input (metto le virgolette per evitare di avere problemi con nomi di cartelle e file con spazi)
- ed in fine il nome del file di output (come sopra)
In pochi secondi avrete così convertito il vostro singolo file GeoTiff in formato ECW, mantenendo inalterate le informazioni geografiche. Lo potrete verificare con il comando gdalinfo.
Come faccio a convertirne ad esempio 40 senza scrivere 40 volte il comando di cui sopra? Mi viene in aiuto un “classico” ciclo for che eseguirò da riga di comando.
Immaginiamo di avere creato due cartelle, una con i file di input (C:\tanto\tif\) ed un’altra per i file di output (C:\tanto\ecw\). Il comando per convertire in solo colpo le vostre 40 immagini GeoTiff in formato ECW sarà il seguente:
>for %i in (c:tantotif*.tif) do gdal_translate -of ECW "%i" "c:tantoecw%~ni.ecw"
Anche questo comando lo lancerete dalla shell di FWTools. Anche questo è un comando semplice, ma richiede delle spiegazioni. Il comando di sopra tradotto in lingua italiana, potrebbe suonare così: “per (for) ogni file (%i) tif (*.tif) contenuto nella cartella c:\tanto\tif\, esegui (do) gdal_translate, e scegli ECW come formato di output (-of ECW)”. Ecco un esploso dei comandi:
- for (dichiarate l’inizio del ciclo)
- %i (è una variabile che creerete grazie al ciclo e conterrà, per ogni ciclo, il percorso completo del file della cartella di input)
- (c:\tanto\tif\*.tif) (specificate quale sia la cartella ed il formato di input)
- do (è il comando che fa eseguire una determinata operazione)
- gdal_translate -of ECW (sapete già cosa vuol dire)
- “%i” (il percorso completo del file di input)
- c:\tanto\ecw\ (la cartella di output)
- %~ni.ecw (solo il nome del file di input senza estensione, seguito dall’estensione di output)
Scritto il comando e dato invio, inizierà il processo di conversione; vi andate a fare un caffé ed al ritorno troverete tutti i file ECW nella cartella di output.
Ma torniamo al forum sulle mountail bike. Il thread che mi ha stimolato e che mi ha fatto capire diverse cose è questo: è composto da molte pagine, e contiene diverse “chicche”. Se ne scoprite qualcuna di interessante, perché non ci scrivete un post e lo pubblichiamo su TANTO. Colgo l’occasione per fare i complimenti agli utenti di questi forum.
Per saperne di più sui “cicli for” nel prompt del dos ecco alcuni link:
- Windows XP Professional Product Documentation
- Daily Cup of Tech » Quickly Perform a Function on Several Files
- Still More Windows Command Shell Goodies – the FOR Command
Tutte le utility di FWTools, sono opencource e disponibili anche per Linux. Tutto quello di cui abbiamo parlato si può fare anche in Linux, con tutte le possibilità che da in più la riga di comando in questo ambiente. Il mio problema è che non sono tanto bravo con Linux.
Tutti i comandi di sopra possono essere raffinati. Si possono scegliere molte cose oltre al formato di output: le dimensioni di output, il tipo di compressione, l’assegnazione del corretto sistema di coordinate, etc. Per tutte queste opzioni vi rimando alla pagina ufficiale di gdal_translate.
Per convertire in formato jpg2000 basterà scrivere “-of jp2kak”. Potrete fare anche conversioni in senso inverso da ECW a GeoTiff, ed in questo caso “-of Gtiff”.
Buon divertimento!!
Post correlati
I contenuti potrebbero non essere più adeguati ai tempi!

By francesca on Giu 11, 2007
caro andrea,
sono in tesi e uno dei punti che devo affrontare riguarda proprio il GIS applicato alle problematiche archeologiche. sono all’univ. di Lecce, beni culturali ad indirizzo archeologico e la mia materia di tesi è INFORMATICA APPLICATA ALL’ARCHEOLOGIA. Puoi aiutarmi dandomi delle indicazioni sulla bibliografia? io non so che pesci prendere..perchè internet mi aiuta nella mia ricerca, ma in realtà non posso basare i miei dati solo sull’etere. ho bisogno di qualche testo. in italiano, possibilmente. Spero di non chiederti la luna e, al di la di tutto, grazie per l’attenzione. Buon lavoro. Francesca
By maerco on Giu 29, 2007
sai per caso come fare nel caso in cui, il file tif da convertire sia maggiore di 500 MB?
By andrea on Giu 29, 2007
ciao maerco,
apri il file frmt_ecw.html che trovi nella cartella html di FWTOOLS. Scoprirai che esiste il parametro LARGE_OK=YES da accoppiare -co. Insomma una cosa del tipo gdal_translate -co LARGE_OK=YES.
Dovrebbe funzionare, anche se non dirti se infrangi i termini legali.
Fammi sapere
By Maerco on Giu 30, 2007
Grazie Mille.
Provo subito
Marco
By alfonso on Feb 10, 2009
ciao, in ritarto di un paio di anni, ma volevo chiedere se sai un modo per far si che fwtools scarichi in automatico una determinata porzione di mappa a tasselli di 2km. non ci capisco nulla di programmazione.
By Andrea Borruso on Feb 10, 2009
Benvenuto Alfonso,
dovresti essere più preciso. Che mappa vuoi “scaricare” e da dove? Cosa vuoi fare con fwtools?
Ciao,
a
By alfonso on Feb 11, 2009
ciao, niente mi chiedevo se era possibile aggiungere alla stringa ” gdal_translate -of GTiff -co “TILED=YES” -co “TFW=YES” -projwin 574945 4492811 577945 4489811 ecwp://ww3.file.ecw temp28.tif” del codice che gli dicesse scarica il quadrato definito dalle coordinate(es)574945 4492811 594945 4512811(quindi di lato 20km) dividendolo in tanti quadrati di 2km di lato salvati ciascuno con un nome (es. temporaneo001.tif)con la cifra finale che si incrementa automaticamente.
il perchè di tutto questo è che ho notato che a scaricare immagini di 2km li lato è+ velocissimo(roba di secondi)ma immagini più grandi i tempi diventano biblici, per un’immagine 10km*10 ci mette più di 3 ore.
grazie
By alfonso on Feb 15, 2009
non me la dai una mano?
By Andrea Borruso on Feb 15, 2009
Ciao Alfonso,
ho riflettuto un po’ su come automatizzare il processo di cui parli, senza essere “programmatori”.
Ti propongo una soluzione che richiede che tu sappia usare un foglio elettronico, e che sappia applicare delle semplici formule di base. Più semplicemente di così, non saprei come fare.
Ho preparato un foglio elettronico che puoi visualizzare qui:
http://www.editgrid.com/user/aborruso/gdal
Dal menu File, lo potrai esportare sul tuo pc (in moltissimi formati).
Con questo foglio, in pochi passi ed adattandolo alle tue esigenze, riuscirai a generare i comandi necessari a scaricare le porzioni di cartografia che desideri.
Il mio esempio è impostato per il download di due strisciate di file .tif, ognuna composta da 5 elementi. Ogni elemento è largo 0.25 gradi decimali. Le celle sono quasi tutte calcolate, eccetto quelle in blu. In queste imposto:
- l’ampiezza geografica della mia immagine (cella D1)
- il numero di partenza del mio contatore (cella A4) per generare in automatico il nome del file di output (es. temporaneo1.tif)
- longitudine e latitudine dei vertici in alto a sinistra ed in basso a destra della prima immagine di ogni strisciata (celle B4,C4 e B9 e C9).
Nella colonna GDAL vengono generati in automatico i comandi necessari per scaricare queste 10 immagini. Se copi soltanto queste 10 celle di questa colonna, e le incolli nella shell di fwtools, patirà il download delle 10 immagini. Nel mio esempio utilizzo come output la cartella “c:\temp”; se non esistesse sul tuo pc, creala.
E’ un esempio molto semplificato. Se sai usare excel, e con un po’ di copia e incolla, riuscirai in pochi minuti ad estenderlo di molto.
Buona domenica e fammi sapere,
a
By alfonso on Feb 15, 2009
grande hai avuto proprio una bella idea, avevo completamente rimosso excel dal mio cervello.
grazie