Georeferenziazione Mappe... aggiornamento!

Dopo alcuni anni, sono stati pubblicati aggiornamenti ai tools utilizzati nel precedente tutorial (sempre valido, posto che si usino le versioni indicate), e sono ovviamente state fatte nuove esperienze nell'uso degli stessi e di altri strumenti... per cui un update era d'obbligo!

La struttura del tutorial è la stessa... i contenuti anche, fin dove possibile, per non alterare una abitudine all'uso già consolidata... tuttavia vi sono anche molte differenze (e semplificazioni!), per i motivi sopra esposti.

L'obiettivo è quello di utilizzare le immagini satellitari di Google Maps per identificare con precisione dei punti di mappe storiche ancora riconoscibili, e assegnare ad essi una coordinata; dopo di che la mappa deve essere automaticamente ridimensionata, posizionata e deformata in modo da coincidere perfettamente con il territorio. Il risultato dell'operazione deve essere visualizzabile, zoomabile e stampabile con Google Earth. Il tutto con software libero e gratuito...

NOTA IMPORTANTE - Bisogna sempre essere connessi a Internet.

Innanzitutto bisogna installare i seguenti pacchetti:

Google Earth: http://www.google.com/earth/download/ge/agree.html

Quantum GIS 2.2: http://qgis.org/downloads/QGIS-OSGeo4W-2.2.0-1-Setup-x86.exe

[ATTENZIONE... a qualcuno potrebbe venire voglia di installare la versione a 64bit... MA ALCUNI COMPONENTI CHE CI SERVONO SONO PRESENTI/FUNZIONANTI SOLO NELLA VERSIONE A 32bit !!!]

(Se era stata installata una versione precedente di QGIS, disinstallarla prima di procedere all'installazione della nuova versione; inoltre, se era stato installato MapTiler con il precedente tutorial, può essere disinstallato: non lo useremo più.)

Dopo aver installato tutto (e può essere una operazione piuttosto lunga e noiosa...), lanciare QGIS Desktop 2.2.0.

Da menu Plugins scegliere la voce 'Manage and Install Plugins...', e cliccare su 'Not installed'.

Si connetterà alle sue repository, e presenterà una lunga lista con tutti i plugins installabili. Sono ordinati per nome; scegliere 'OpenLayers plugin'.

Quindi cliccare su 'Install plugin'.

Alla fine nel menù Plugins apparirà una voce in più: 'OpenLayers Plugin', con la possibilità di utilizzare tra gli altri anche i layer della cartografia di Google.

Da qui in poi iniziamo a georeferenziare, e sono operazioni che si ripeteranno per ogni progetto.

1) - scegliere Plugins/OpenLayers Plugins/Add Google Satellite Layer (o Hybrid Layer, o qualunque altro che si reputi più adatto)

Compare una mappa del pianeta un po' strana... con i continenti duplicati. Occorre zoomare verso il nostro continente usando come riferimento la zona PIU' A SINISTRA della mappa - (è importante per la determinazione delle coordinate geografiche)

e via via fino alla zona interessante...

 

Qualche cenno tecnico...

Le google maps utilizzano il sistema spaziale di riferimento (CRS) EPSG:3857 (Web Mercator) in proiezione, mentre Google Earth usa l'EPSG:900913 (NON PIU' RICONOSCIUTO come standard - del resto non era che 'google' scritto 'in numeri'... - e ora sostituito dall'equivalente EPSG:4326), in coordinate geografiche.

In altri termini, EPSG:4326 usa un sistema di coordinate SULLA superficie di una sfera o di un'ellissoide di riferimento, mentre EPSG:3857 usa un sistema di coordinate proiettato DALLA superficie di una sfera o ellissoide verso una superficie piana.

Tutto questo è ulteriormente confuso dal fatto che anche se la mappa è in EPSG:3857, le coordinate effettivamente utilizzate sono comunemente espresse in latitudine/longitudine (come se fosse in EPSG:4326, su un piano).

In breve, per questo motivo dovremo essere sicuri di convertire la mappa finale in coordinate geografiche EPSG:4326... ma la georeferenziazione dovrà sempre avvenire utilizzando EPSG:3857.

Quindi...

2) - click destro sul layer che è comparso a sinistra, 'Google...' e selezionare 'Set Layer CRS'.

3) - scrivere nel campo Filter il numero 3857.

4) - Selezionare nella tabella "Coordinate reference systems of the world" la riga 'WGS84 / Pseudo Mercator', e cliccare su Apply.

Per coerenza, anche tutto il progetto dovrà essere impostato sul sistema EPSG:3857.

- scegliere Settings/Options, e nella finestra che si aprirà, cliccare sul tab 'CRS', quindi premere il bottone 'Select...'

- scrivere nel campo Filter il numero 3857.

- Selezionare la riga 'WGS84 / Pseudo Mercator', e cliccare su Apply.

- settare il check su 'Automatically enable 'on the fly' reprojection' , e 'Use Project CRS' (ignorando il CRS indicato nel campo subito sotto, anche se diverso... non è selezionato...)

SALVARE IL PROGETTO, con 'Project/Save As...'

-----------------

Abbiamo creato il CRS di riferimento, e si può passare al lavoro serio.

Da menù Raster, selezionare 'Georeferencer/Georeferencer'.

Compare una nuova finestra; dal menù File del Georeferencer, selezionare OpenRaster.

Si aprirà una finestra in cui selezionare la mappa storica che vogliamo georeferenziare... i formati supportati sono incredibilmente TANTI (anche perchè da qui si possono fare trasformazioni su set di dati di ogni genere...). Probabilmente la nostra mappa sarà quasi sempre un jpg.

Compare la SOLITA finestra che chiede quale sia il CRS da adottare... anche qui scegliamo l'EPSG:3857 e clicchiamo OK.

Il CRS eventualmente si può anche cambiare/verificare in seguito, da Settings/RasterProperties/General:

La mappa si apre... con i soliti tasti di zoom (o il menu View, o la rotella del mouse), come in tutti i sw di grafica, zoomare su un punto noto; selezionare Edit/Add Point (o CTRL/A, o il bottone evidenziato sotto), e cliccare con la massima precisione sul punto desiderato. Si apre la finestrella di inserimento coordinate...

Qui se si è in vena di masochismo, si possono inserire a mano latitudine e longitudine del CENTRO del pixel... ma noi invece clicchiamo sul tasto 'From map canvas'...

La finestra si minimizza, e torniamo sul layer di riferimento. Zoomiamo a piacimento, se non l'abbiamo già fatto (qui torna utile la rotella del mouse), fino a raggiungere lo stesso punto ai giorni nostri. Quindi ci clicchiamo sopra.. sempre con la massima cura... e si ritorna al georeferencer, ma le caselle di latitudine e longitudine si sono automagicamente riempite. Con OK, il punto è piazzato, e compare simultaneamente sia sul livello di riferimento che sulla mappa da referenziare.

RIPETERE L'OPERAZIONE A PIACIMENTO... Alla fine otterremo qualcosa del genere:

Conviene decisamente studiarsi la mappa per bene, prima di iniziare... perchè ci serviranno quanti più punti noti possibili, anche se in teoria TRE bastano, per una mappa già molto precisa. Più punti ci sono, più il risultato è perfetto.

Bisogna fare MOLTA attenzione ad alcuni aspetti:

1) Se la mappa è molto grande e non ben orientata rispetto al layer di riferimento, occorrono molti più punti per non far 'confondere' il geolocalizzatore - con soli 3 punti potrebbero ottenersi effetti curiosi di deformazione e rotazione.

2) NON invertire la disposizione dei punti fra sinistra e destra / sopra e sotto tra il layer di riferimento e la mappa... altrimenti il software proverà a 'piegare e accartocciare' la mappa deformandola al punto di renderla irriconoscibile!

3) Utilizzare il buon senso... ci vorranno più punti in zone interessanti, ne basteranno molti meno dove la mappa non è dettagliata/utile

4) I punti dovrebbero essere posizionati in modo omogeneo attraverso tutta la mappa

5) Se la mappa originale è 'montata' come più pannelli su tela, il risultato migliore si otterrà preprocessandola con un programma di grafica in modo da 'avvicinare' tutti i fogli che la compongono (l'immagine deve essere quanto più possibile continua, senza deformazioni dovute al montaggio o alla rilegatura).

6) Più la mappa è antica, più punti serviranno... la precisione nella cartografia è aumentata molto gradualmente nel corso dei secoli...

Finita l'operazione di mappatura (e magari a intervalli regolari...) SALVARE I PUNTI! (File/Save GCP Points As...)

 

Quindi, al termine, premere il pulsante PLAY (o File/Start Georeferencing).

Comparirà un messaggio: "Please set transformation type." Click OK, e si aprirà una nuova finestra...

Questa è la parte più complicata... nel senso che i settaggi dipendono dalle circostanze.

Il campo Transformation Type è il fondamentale, perchè indica quale algoritmo utilizzare per 'rettificare' la mappa. Mi sembra che il più 'flessibile' sia il Thin Plate Spline, che utilizza la mappa come un foglio di gomma inchiodato sui punti noti... ma c'è AMPIO spazio per la sperimentazione...

Il resampling method è probabilmente OK lasciato a Nearest Neighbour. Ma ci si può divertire con Wikipedia a capire come funzionano gli altri... è un parametro che impatta sulla qualità dell'immagine finale nel caso in cui le deformazioni siano molto grandi.

La compressione è OK a NONE. a meno che la mappa sia così ENORME da creare problemi.

Target SRS DEVE essere... il solito EPSG:3857.

 

L'unica cosa ancora da fare è cliccare sul tasto accanto a 'Output Raster', e selezionare la directory in cui mettere il risultato dell'operazione, che sarà un file APPARENTEMENTE 'solo' .tif (e apribile anche come semplice immagine, modificata rispetto a quella di partenza), ma con all'interno anche dei metadati con le coordinate dei punti noti nel sistema di riferimento selezionato. E' quelllo che si definisce un GEOtiff...

Premendo OK, si parte a fare la trasformazione.

Alla fine, nella directory indicata in Output Raster, ci sarà il file .tif di cui sopra.

[ Se è stato selezionato "Load in QGIS when done", la mappa verrà anche caricata in qgis come layer georeferenziato; e ci si può giocare ulteriormente... potrebbe diventare il riferimento per una geolocalizzazione di un'altra mappa... o si può renderla (con questa versione di qgis!) più o meno trasparente... si veda 'Settings/Layer Properties' ! ]

Possiamo salvare i nostri punti con File/Save GCP points, chiudere il georeferencer, salvare il progetto con file/save project dandogli un nome, ed eventualmente chiudere anche QuantumGIS.

-----------------

Ora nel tutorial precedente lanciavamo il software MapTiler...

Però con il tempo ho scoperto che :

1) La versione ultima è diventata a pagamento per mappe di grandi dimensioni

2) La versione precedente NON FUNZIONA con mappe di grandi dimensioni

3) C'è già tutto il necessario messo a disposizione dall'installazione di qgis, anche se un po' scomodo da usare. Insieme a qgis viene installato un insieme di librerie e scripts python, denominato OSGEO4W, in grado tra l'altro (molto, molto altro) di esportare la nostra mappa in GoogleEarth...

Quindi qui ci biforchiamo rispetto al tutorial precedente.

-----------------

- Lanciare OSGeo4W:

 

Comparirà un command prompt...

 

Come prima azione occorre 'spostarsi' nella directory dove risiede la mappa generata da qgis (il .tif):

Nel caso di questo esempio:

CD "Z:\Georeferenced\TutorialCaccia\"

Poi controlleremo che la mappa sia effettivamente ben formata e non ci siano errori di conversione... la mappa di questo esempio si chiama 1762 Carta Della Caccia 3_modified.tif, quindi scriveremo:

GDALINFO "1762 Carta Della Caccia 3_modified.tif"

e si otterrà un output simile:

Occorre controllare che i dati indicati in rosso corrispondano.

Se tutto è a posto, si può lanciare la vera esportazione:

GDAL2TILES --profile=raster --s_srs=epsg:3857 --force-kml "1762 Carta Della Caccia 3_modified.tif"

Questo passo può richiedere da qualche minuto nel caso di mappe piccole, fino a circa 1 ora per mappe enormi... è possibile che al termine si apra una finestra di errore python, ma ho verificato che si tratta di un errore in uscita dall'applicazione quando tutte le operazioni sono comunque completate con successo (fa fede la barra di avanzamento - se si è arrivati al "100% - done." delle Overview Tiles, tutto bene).

Se tutto è andato per il meglio, sarà stata creata una directory con il nome della mappa, contenente tutto quello che serve per la visualizzazione in Google Earth: un file doc.kml (rinominabile), e una piramide di tiles suddivisa in cartelle per ogni livello di zoom:

(Attenzione, però... per una mappa di dimensioni notevoli, occorre parecchio spazio su disco!) :

Ora si può chiudere anche OSGeo4W.

-----------------

Facendo doppio click sul doc.kml generato, si aprirà finalmente Google Earth... con la nostra mappa aperta e posizionata nei luoghi temporanei...ma un po'... TROPPO opaca! Allora, cliccando sul 'rettangolo' sotto i luoghi, abilitiamo lo slider della trasparenza... e la regoliamo a piacimento:

Ora la mappa e' perfettamente integrata in Google Earth, a qualunque livello di zoom, tilt, etc... e anche georeferenziata!!!!

Per questo esempio ho usato solo una decina di punti... e la precisione è già buona. Con un centinaio di punti, la perfezione è assicurata...

-----------------

Come 'bonus', gdal2tiles genera anche un file openLayers.html...

Con doppio click sul file, si aprirà la mappa nel browser di default (e lo stesso file, se inserito insieme alle tiles su un http server, può essere usato per visualizzare la mappa via web... evidentemente però non ci può essere la funzionalità di rotazione):

-----------------

(Update 14/03/2014)

OSGEO4W interface

Quanto sopra se si vogliono fare le cose 'a mano'.

Per chi invece è un po' allergico ai command prompt, ho preparato una piccola utility in grado di fare tutto in modo 'grafico', scaricabile qui: OSGEO4W interface.

E' un pacchetto Microsoft OneClickInstall zippato; va installato con il suo setup, e può essere disinstallato come qualunque altra applicazione da pannello di controllo. Se ci fosse bisogno di installare anche il framework .NET associato (4.0 client profile), ci penserà autonomamente.

Alla partenza, ci sono due possibilità: QGIS Valmiera è stato installato (ed è nella sua directory di default), oppure no - in effetti OSGEO4W può anche essere installato separatamente, o fare parte di altri kit GIS. Nel primo caso l'interfaccia parte normalmente; nel secondo invece della lista dei comandi disponibili comparirà un pulsante "FIND OSGEO4W", che se premuto aprirà una finestra in cui bisognerà indicare qual'è la directory che contiene gli eseguibili di riferimento, e solo se trovati verrà abilitata la lista dei comandi. Comunque se si è seguito il tutorial fin qui non dovrebbe essere assolutamente il nostro caso!

Quindi si vedrà la drop down list <Select a GDAL function>, da cui si possono scegliere per il momento le seguenti funzionalità:

- GDALINFO - Displays various information about a GDAL supported raster dataset

Apre una finestra in cui scegliere una immagine GeoTiff (o qualunque altra togliendo il filtro). Appena selezionata, verranno visualizzate le sue caratteristiche

- GDAL2TILES - Generates a Google Earth KML Superoverlay from a GeoTIFF

Apre una finestra in cui scegliere una mappa georefenziata. Appena selezionata, verrà iniziata la creazione del KML Superoverlay (GDAL2TILES --profile=raster --s_srs=epsg:3857 --force-kml etc) nella stessa directory della mappa.

- Interface test - Executes a DIR C:\

Come dice il nome... solo per verificare che l'interfaccia funzioni correttamente (è un po' più complicata di quanto sembri in superficie, effettivamente, e volevo essere sicuro...)

(Inoltre, per evitare fastidiosi messaggi di errore 'fittizi' in uscita da parte di Python quando esegue gli script di OSGeo4W, al lancio dell'interfaccia viene settata la chiave di registry HKCU:Software\Microsoft\Windows\Windows Error Reporting\DontShowUI a 1, se le autorizzazioni di sicurezza dell'utente lo consentono. All'uscita viene rimessa a 0 come di default).

 

BUON DIVERTIMENTO....

 

PS: Se si vogliono utilizzare i dati cartografici del comune di torino per la georeferenziazione, si veda questa pagina: Utilizzo dei dati cartografici del comune di Torino

 

MQCVisions home page