Il lavoro di ogni giorno è spesso routinario; spesso anche per chi si occupa di sistemi informativi geografici. Non parlo dell’analisi spaziale, ma di quelle cose che facciamo quasi ogni giorno: leggere le metainfomazioni di un file (e scoprire che sono povere), convertire il formato di un file, estrarre una porzione di una raster, etc.
Si tratta di operazioni in genere molto semplici, che siamo in grado di portare a termine con molti strumenti. Questo blog parla de “le cose che ci piacciono TANTO”; una di queste sono quelle utility che alleggeriscono il lavoro di ogni giorno, con un click del mouse ed un menu contestuale.
Vi parlerò di due applicazioni di questo tipo, una per Windows ed una per Ubuntu (e per tutte le distribuzioni che sfruttano Gnome), che sono in grado di “trasferire” sul tasto destro del mouse alcune comuni operazioni utili ad un utente GIS.
Il prerequisito è che nel nostro sistema operativo siano installate le librerie GDAL, che sfrutteremo come motore delle operazioni “spaziali”. Per installarle su Windows basterà scaricare ed installare FWTools, mentre su Ubuntu basterà installare gdal-bin tramite synaptic o tramite riga di comando.
Alla fine del post saremo in grado di fare click con il destro su una TIFF del nostro hard-disk, ed eseguire queste due semplici (ma comodissime operazioni):
- convertirla in un altro formato spaziale (in questo esempio eseguirò la conversione in formato JPG2000, un eccellente formato compresso che può avere attributi geografici)
- leggerne le metainformazioni (anche quelle spaziali)
Se dovessi ottenere questi due risultati con le librerie GDAL, dovrei aprire il prompt dei comandi e scrivere rispettivamente:
-
> gdal_translate -of JP2ECW input.tif output.jp2
-
> gdalinfo input.tif
Vedremo come convertire questi comandi testuali, in operazioni da eseguire con il mouse.
Su Windows
Su Windows sfrutteremo Open++, un’utility di 200kb che consente di personalizzare l’elenco di comandi presenti nel menu contestuale, che si apre quando si clicca con il tasto destro del mouse su un file (o su una cartella).
Una volta che lo avrete scaricato ed installato, troverete una nuova voce nel menu che si aprirà al click con il destro su un file; è visibile nella figura sottostante (“Open++”).
L’utilizzo è immediato e quasi autoesplicativo, in quanto Open++ è già configurato per eseguire delle comode operazioni di base: ade esempio copiare il percorso assoluto di un file (Copy Path), o aprire il prompt dei comandi a partire dalla cartella selezionata (Command Prompt). Questi due stupidi comandi, sono già un ottimo esempio di alleggerimento del lavoro.
Il primo comando che voglio aggiungere, ci consentirà di convertire in formato JPG2000 un’immagine TIFF. Per inserire questo nuovo comando, tra quelli disponibili in Open++, dovrò cliccare sull’ultima opzione del suo menu a tendina: “Customize” (vedi figura poco sopra).
Mi si aprirà la finestra sottostante:
Questi i passi da eseguire:
- cliccare in alto a destra sul tasto “Add”, e scegliere l’opzione “Command”
- cliccare sulla cella “Title”, ed aggiungere un nome descrittivo al comando che si sta creando (ad esempio “Convert to JPG2000”)
- inserire nella cella “Program” il programma che si vuole lanciare. Nel nostro caso vogliamo lanciare il prompt dei comandi e basterà scrivere “%ComSpec%”
- scrivere nella cella “Arguments” gli argomenti che vogliamo passare al nostro comando. Nel nostro caso inseriremo la seguente stringa ‘/c “C:\Programmi\FWTools2.2.6\bin\gdal_translate -of JP2ECW” $(TargetName)$(TargetExt) $(TargetName).jp2′
- il parametro “/c” fa sì che il prompt dei comandi venga chiuso al termine dell’operazione
- “C:\Programmi\FWTools2.2.6\bin\gdal_translate” è il percorso assoluto (nel mio pc) dell’utility GDAL – gdal_translate – che gestisce le conversioni tra formati di file spaziali
- “-of JP2ECW” è il parametro necessario per impostare JPG2000 come formato di output
- $(TargetName)$(TargetExt) sono delle variabili che coincidono con il nome e con l’estensione del file su cui cliccheremo con il destro, e che verranno valorizzate dinamicamente al lancio del comando. Se ad esempio il file su cui farò click sarà “c:\dati\input.tif”, la variabile “$(TargetName)” verrà sostituito da “c:\dati\input” e “$(TargetExt)” da “.tif”.
- lo stesso si dica per $(TargetName).jp2, che verrà sostituito da “c:\dati\input.jp2”
- cliccare sulla cella “Associate with Files” e scrivere *.tif
- in questo modo il comando di conversione formato sarà disponibile soltanto per i file con estensione .tif (è possibile aggiungere altre estensioni, separandole tramite “;”)
- impostare gli altri parametri come nella figura soprastante e cliccare su “OK”
A questo punto aprite una cartella in cui avete un file TIFF, fateci click sopra con il destro del mouse, e selezionate Open++/Convert to JPG2000. Si aprirà il prompt dei comandi e verrà lanciato il comando gdal_translate; a comando eseguito il prompt dei comandi si chiuderà automaticamente e troverete il file JPG2000 (con estensione .jp2) nella stessa cartella in cui è presente il file TIFF.
Quello di sopra è soltanto un esempio; si può di più, meglio e diversamente. Consideratelo come un primo tutorial, dopo il quale iniziare a dare sfogo alla vostra fantasia ed alla vostra competenza.
Per ottenere le metainformazioni spaziali di un file TIFF, utilizzando soltanto il tasto destro del mouse, dovrete un creare un nuovo comando. La procedura è quasi identica alla precedente, salvo per la cella “Arguments”: dovrete inserire la stringa ‘/k “C:\Programmi\FWTools2.2.6\bin\gdalinfo $(TargetName)$(TargetExt)’.
La differenza più importante è il parametro “/k”, che farà in modo che il prompt dei comandi non venga chiuso al termine del comando gdalinfo. Nella finestra del prompt potrete quindi leggere le metainformazioni del file che avrete selezionato.
In questo filmato vedrete i due comandi in azione:
Su Linux
In questo caso sfrutteremo Nautilus-actions, un’utility analoga a Open++ in ambiente GNOME e quindi anche in Ubuntu. E’ installabile tramite synaptic o digitando nella shell:
>sudo apt-get install nautilus-action
Una volta installato lo troverete nel menu Sistema/Preferenze/Nautilus Actions Configuration.
Creiamo un’azione (action) che estragga le metainformazioni da un tif selezionata.
Questi i passi da seguire:
- cliccare su Add
- inserire nella cella “Label” un nome descrittivo del comando (ad esempio “gdal_info”)
- scegliere – è opzionale – un tooltip per il comando (ad esempio “cliccare qui per avere le metainformazioni del file selezionato”)
- scegliere – è opzionale – un’icona per il comando
- definire il comando da lanciare, tramite la cella “Path”
- inserire la stringa “bash -c”
- impostarne la stringa “gdalinfo %d/%f > %d/%f.txt && gedit %d/%f.txt” nella cella “Parameters
- “%d “e “%f ” sono delle variabili che verrano sostituite dinamicamente dal percorso (senza estensione) e dall’estensione del file selezionato
- il carattere “>” farà sì che l’output del comando – le metainformazioni – possano essere scritte e memorizzare in un file di testo
- “%d/%f.txt” faranno si che il file di testo venga salvato nella stessa cartella del file selezionato (%d), con lo stesso nome (%f) e con estensione .txt
- “&&” fa si che venga esguito il comando successivo – gedit – ma soltanto dopo la fine del primo
- “gedit %d/%f.txt” per aprire con l’editor di testo di Ubuntu il file di testo appena creato
- cliccare sul Tab “Conditions” e scrivere nella cella “Filenames” la stringa “*.tif” (in questo modo il comando gdal_info sarà visibile soltanto per file con estensione .tif)
- selezionare il radio botton “Only files”
- e cliccare su OK
A questo punto non ci resta che fare click con il destro su un file .tif e provare il comando appena creato. Aggiungo però qualche spiegazione dovuta. Cosa è bash?
Si tratta di un interprete di comandi che permette all’utente di comunicare col sistema operativo attraverso una serie di funzioni predefinite, o di eseguire programmi.
Il parametro “-c” forza bash a leggere i comandi dalla stringa di testo che segue, che nel nostro caso è quella del punto 6 di sopra.
Nel filmato sottostante vedrete (male, è saltata una parte) il comando in azione:
Nautilus-actions è a mio avviso un gioiellino. Una caratteristica che lo fa brillare è la facilità di condividere i comandi creati. Lo si fa con il tasto “Import/Export” presente nella finestra principale. Qui ad esempio una serie di “azioni” già pronte. Il comando di conversione in JPG2000 è di facile implementazione e non lo svilupperò.
In chiusura
Prendete quanto scritto soltanto come spunto per “piegare” (ad esempio) le librerie GDAL/OGR al vostro tasto destro. Sono quasi un’analfabeta di istruzioni da riga di comando, e quelle che vi ho indicato possono sicuramente essere scritte meglio e più elegantemente. Mi piacerebbe molto che qualcuno condividesse qui la propria esperienza, con qualche comando “de paura”.
Software/servizi usati per scrivere il post
- TipCam per registrare il filmato su windows
- ScreenToaster per farlo su Linux
- Zotero per gestire e generare la sitografia sottostante
Sitografia letta, consigliata e disordinata
- “BASH Help – A Bash Tutorial,” http://www.hypexr.org/bash_tutorial.php.
- “Bash – Wikipedia,” http://it.wikipedia.org/wiki/Bash.
- “Beginners/BashScripting – Community Ubuntu Documentation,” https://help.ubuntu.com/community/Beginners/BashScripting.
- “COMMAND.COM, SHELL and COMSPEC,” http://www.robvanderwoude.com/command.html.
- “Eseguire programmi e comandi DOS – Cenati Giovanni VbScript WSH,” http://digilander.libero.it/Cenati/esegui.htm.
- “Nautilus-actions: GUI è bello! » Ubuntu block notes,” http://www.aldolat.it/guide-e-howto/nautilus-actions-gui-e-bello/.
I contenuti potrebbero non essere più adeguati ai tempi!
By Andrea Antonello on gen 20, 2009
Andrea, questa e’ proprio una delle tue!
Bellissimo posto!
Di certo poi contribuira’ a rendere piu’ gradevole il mio utilizzo di windows.
Grazie,
Andrea
By Andrea Borruso on gen 20, 2009
Caro Andrea,
ed io l’ho fatto proprio per questo!!
Che test hai fatto? Lanci JGrass e gli fai fare un calcolo di pendenze?
Se fai qualcosa di carino, mi piacerebbe che la condividessi qui.
Prova anche Nautilus-actions, ne vale la pena.
ciao e grazie,
a
By Andrea Antonello on gen 20, 2009
lol, grande l’idea di “JGrass al volo”!!
Ho in mente di fare un lancia JGrass in console standalone mode su uno script. che brivido!!
Se ci arrivo condivido.
Potresti fare la stessa cosa per konqueror? Io sono un kde-ista
By Andrea Borruso on gen 20, 2009
Andrea, non ho idea di come si possa fare in kde.
Quando mi allontano da windows, lo voglio fare il più possibile e kde me lo ricorda più di gnome
Speriamo che qualche lettore abbia una dritta per il right-click power su kde.
Ti aspetto per JGrass!
By Alessio on gen 21, 2009
Andrea, grande post!
Non avevo neanche finito di leggerlo tutto che il mio nautilus aveva già il suo bel gdal_info da tasto destro
By Andrea Borruso on gen 21, 2009
Ciao Alessio,
grazie mille.
Se crei qualche altro comando utile, che ne dici di esportarlo ed inviarmelo? Lo metterei in fondo all’articolo citando la fonte
A presto,
a
By Chiara on ott 5, 2011
Ciao,
ho provato a impostare i comandi personalizzati (per ora solo in Windows) ma non funzionano. Forse perche’ la nuova versione di Open++ richiede una sintassi leggermente diversa? ho provato ad adattarla ma senza successo, probabilmente questioni di lana caprina…sarebbe grandioso se riusciste ad aggiornare la stringa da inserire visto che l’help di Open++ e’ a dir poco essenziale per una profana come me…
grazie
chiara
By Antonio Falciano on ott 9, 2011
Ciao Chiara,
l’help di Open++ è abbastanza criptico, sono d’accordo. L’unico esempio mostrato nelle FAQ è tuttavia illuminante, se si è abbastanza pratici di DOS. Infatti, poiché le opzioni degli argomenti attualmente sono ridotte rispetto alla versione di cui si parla nel post (mancano ad es. Target Name e Target Extension), nei casi in cui occorra gestire i nomi dei file conviene sfruttare le variabili DOS all’interno di un ciclo for. A titolo dimostrativo, ho riprodotto gli esempi del post in questo OpenXX.ini da sostituire all’interno della cartella di OpenXX e reinstallare il tutto.
In particolare, per gestire i nomi dei file all’interno dei cicli for ho utilizzato le variabili %~nxi (nome ed estensione del file) e %~ni.jpg (nome del file + estensione .jpg), quest’ultima quando occorre specificare l’estensione del file di output.
Spero di essere stato abbastanza chiaro, altrimenti ad Andrea toccherà scrivere un bel update al suo post!
ciao
By Andrea Borruso on ott 9, 2011
Caro Antonio,
grandissimo!!
A questo punto credo tocchi a te aggiornare il post
Grazie
By Antonio Falciano on ott 9, 2011
Caro Andrea,
ti ringrazio per il “grandissimo”, ma in realtà il merito è tutto tuo nell’aver scovato Open++. L’ho scoperto anch’io grazie a te, anche se devo ammettere che non lo utilizzo molto spesso, in quanto la CLI esercita su di me ancora tutto il suo fascino! Grazie inoltre per aver configurato in Open++ anche …l’effetto boomerang! Vorrà dire che, d’ora in poi, mi guarderò bene dal commentare i tuoi post e dal cliccare col tasto …destro!
ciao