Supponiamo di avere un file grafico rappresentante una mappa, e di volerci aggiungere un qualcosa che permetta di comprenderne le proporzioni. Normalmente le mappe prevedono, oltre alla dicitura della scala, anche un simbolo grafico di dimensione nota, ad esempio un chilometro. E’ possibile aggiungere un simbolo del genere a una mappa di cui si conoscono solo le coordinate geografiche in modo semplice ed automatico.
Lavorando sotto Linux (Ubuntu, per l’esattezza) ci occorreranno le utility ImageMagick (una suite di tool grafici da riga di comando), bc (un’utility per eseguire operazioni matematiche da riga di comando) e il programmino in C “calcoladistanza” che ho descritto in un precedente post (che calcola la distanza tra due punti in km a partire dalle loro coordinate geografiche). Se non li abbiamo li possiamo scaricare così (sotto ubuntu):
sudo apt-get install bc imagemagick
Per compilare il programmino invece basta seguire le istruzioni riportate sul post originale.
Le operazioni da svolgere sono le seguenti:
MINLON=…
MAXLON=…
MINLAT=…
MAXLAT=…
scriviamo in quatto variabili numeriche i valori estremi di latitudine e longitudine della mappa
larghezza=$(./calcoladistanza $MINLON, $MAXLON, $MINLAT, $MINLAT )
salva nella variabile “larghezza” la larghezza in km della superficie riportata sulla mappa, come distanza tra due punti sugli estremi della mappa stessa (notare che ho usato lo stesso valore di latitudine, altrimenti avrei calcolato la distanza diagonale).
larghezzapixel=$(identify -format %w immagine.png)
misura la larghezza in pixel dell’immagine, utilizzando il tool “identify” contenuto nella suite ImageMagick.
pixel1km=$(echo “$larghezzapixel/$larghezza” | bc)
calcola la larghezza in pixel di un km effettivo sulla mappa, dividendo (con l’utility “bc”) i due risultati precedenti
convert xc:white -resize ${pixel1km}x15! -frame 2×2 blank.ppm
crea (usando l’utility “convert” di imagemagick) un’immagine di nome blank.ppm, alta 15 pixel e larga esattamente un chilometro (ovvero il numero di pixel calcolati prima); poi vi aggiunge una cornice di 2 pixel
convert blank.ppm -gravity “Center” -draw “text 0,0 ‘Un kilometro!!'” blank.ppm
scrive il testo “Un kilometro!!” nel file precedentemente creato
composite -geometry +10+30 -gravity southwest blank.ppm immagine.png immagine_scala.png
usando “composite” (sempre contenuta in imagemagick, ovviamente) sovrappone la scala creata all’immagine di partenza e salva il risultato nel file “immagine_scala.png”. Il risultato sarà una cosa del genere:
Che ve ne pare? Bello, eh? In realtà si può fare meglio.. ad esempio, invece di creare un rettangolo con una scritta si potrebbe usare un simbolo un pò più serio, tipo:
(ovviamente opportunamente scalato e con tutti i controlli del caso), ma questo ve lo lascio come compito a casa :-). Potete trovare un’infinità di informazioni ed esempi sull’utilizzo della suite ImageMagick qui. Ciao a tutti!
Pingback: Aggiungere testo in cima o in fondo a un’immagine « Appunti, scoperte e invenzioni
Pingback: Creare una mappa personalizzata da OSM: lo script « Appunti, scoperte e invenzioni