Creazione di super overlay con gdal2tiles

Mano Marks, team delle API di Google Geo
settembre 2009

Obiettivo

Questo tutorial illustra le nozioni di base per creare un super-overlay, un insieme di overlay del terreno che utilizzano NetworkLinks basati sulla regione, utilizzando le utilità open source Geospatial Data Abstraction Library.

Introduzione

I browser web come Google Earth e Google Maps forniscono immagini satellitari e riquadri delle mappe. Tuttavia, a volte potresti voler utilizzare le tue. Le immagini o i dati radar sono di vario tipo e per molti utilizzi.

  • Inserire immagini satellitari o aeree personalizzate in un geobrowser
  • Inserimento di mappe storiche sopra immagini esistenti, come il livello Rumsey Maps in Google Earth
  • Importazione di dati GIS in formato raster
  • Inserire LIDAR o immagini a infrarossi nel geobrowser

Uno dei problemi dei dati raster ad alta risoluzione, tuttavia, è che richiede molta memoria per visualizzarli. E se state eseguendo il push on-premise, ci sono anche problemi di larghezza di banda. Per risolvere il problema, devi creare riquadri.

Il riquadro suddivide il file immagine in molte immagini diverse che vengono caricate quando vengono visualizzate. Puoi creare un'immagine a bassa risoluzione da mostrare quando l'utente diminuisce lo zoom. Nella stessa area, crei quattro immagini con risoluzione più elevata per visualizzarle più da vicino. Per ogni area sovrapposta a un'immagine, crei altre quattro immagini a risoluzione più elevata per aumentare lo zoom e così via. Questa operazione è nota come metodo quadtree ed è la modalità di piastrellamento delle immagini per Google Earth e Google Maps. La procedura è descritta più nel dettaglio nell'articolo della Guida per gli sviluppatori KML relativo alle regioni.

Puoi farlo manualmente con un'applicazione di modifica grafica come Adobe's PhotoShop o GIMP, ma questa operazione può essere complessa, noiosa ed è soggetta a errori. Ci sono anche svariate applicazioni disponibili, principalmente per Windows, come SuperOverlay, Arc2earth e MapCruncher, combinate con CrunchUp2 KML.

Se vuoi automatizzare il processo o aggiungere funzionalità alla tua applicazione, GDAL ti offre una serie di strumenti per lavorare con dati raster e vettori. Questo articolo illustra le opzioni della riga di comando. Tuttavia, le librerie possono essere facilmente incorporate nelle tue applicazioni. Per questo tutorial, utilizzerai le utilità gdalinfo, gdal_translate, gdalwarp e gdal2tiles. L'output finale è un super-overlay.

Passaggi dalla riga di comando

L'utilizzo di GDAL nella riga di comando prevede sei passaggi.

  1. Scaricare e installare GDAL
  2. Scaricare un'immagine
  3. Utilizzare gdalinfo per determinare le informazioni sull'immagine
  4. Usa gdal_translate per fare riferimento geografico all'immagine
  5. Usa gdalwarp per modificare la proiezione dell'immagine
  6. Usa gdal2tiles per suddividere l'immagine in riquadri e creare il codice KML associato

Passaggio 1: scarica e installa GDAL

Inizia scaricando e installando la GDAL come descritto qui.

Passaggio 2: scarica un'immagine

Puoi utilizzare qualsiasi immagine. Sul Web sono disponibili diverse fonti di dati geografici. Puoi utilizzarne uno qualsiasi, ma dovresti conoscere i confini dell'immagine, ovvero la latitudine e la longitudine di ciascuno degli angoli. Questo tutorial utilizza un'immagine del NASA Blue Marble, disponibile per il download sul sito web della NASA. Queste immagini sono state scattate nel 2004 e presentano una bellissima immagine della Terra dallo spazio. Scegli uno dei file in basso a destra nella barra di navigazione a destra.

Se utilizzi una tua immagine e sai che è già rettificata, puoi andare direttamente al passaggio 5. In caso contrario, vai al passaggio 3.

Passaggio 3: ottieni informazioni sull'immagine

Dopo aver installato le librerie GDAL e selezionato l'immagine, devi recuperare alcune informazioni sull'immagine per poterla utilizzare come riferimento geografico. Nello specifico, sono necessarie le posizioni dei pixel e delle linee di ogni angolo dell'immagine. Se immagina l'immagine come una tabella, con colonne e righe, i pixel sono le colonne e le linee sono righe.

GDAL fornisce un'utilità utile, gdalinfo, per acquisire queste informazioni. Nella riga di comando, digita gdalinfo filename, sostituendo filename con il percorso del file. Dovrebbe essere visualizzato un output simile al seguente:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

Le informazioni importanti per questo tutorial sono: In alto a sinistra, In basso a sinistra, In alto a destra, In basso a destra. Indicano i valori dei pixel e delle linee di ogni angolo. In alto a sinistra, in questo caso, è a 0,0 e in basso a destra è a 21600,10800.

Passaggio 4: fai riferimento all'immagine tramite geolocalizzazione

In questo caso, fare riferimento a un elemento geografico significa creare metadati che descrivono la posizione geografica di ogni angolo dell'immagine. Utilizzando le informazioni ottenute nei passaggi 3 e gdal_translate, puoi assegnare al file le informazioni di riferimento geografico. Viene creato un file VRT a partire dall'immagine world_200401.jpg bluemarble1.vrt. I file VRT sono file XML contenenti le informazioni relative a una determinata trasformazione, in questo caso il passaggio gdal_translate. La utilizzerai di nuovo nel passaggio successivo per creare il tuo insieme di riquadri finale. gdal_translate consente di eseguire più tipi di output dei file, inclusi i principali formati di file immagine. L'utilizzo di output VRT ti permette sostanzialmente di rimandare la creazione dei file di output fino all'ultimo passaggio. Ciò aumenta l'efficienza e riduce il tempo di attesa per i singoli passaggi se esegui la riga di comando. Ecco il comando da eseguire:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

Ci sono molte informazioni in merito, pertanto di seguito viene fornita una descrizione dettagliata:

  • -of è il formato di output, in questo caso VRT.
  • -a_srs assegna un sistema di riferimento spaziale al file. Questo indica a qualsiasi applicazione che lo utilizza quale sistema di coordinate viene utilizzato. In questo caso utilizza EPSG:4326, che equivale a WGS84, il sistema di coordinate utilizzato da Google Earth.
  • -gcp, ovvero il punto di controllo del terreno, assegna le coordinate alle posizioni nel file. In questo caso, ti servono solo tre punti, dato che l'immagine è un rettangolo e di conseguenza il quarto punto è facilmente identificabile. Per -gcp, definisci la gcp impostando il pixel e poi il numero di riga, quindi la longitudine e la latitudine. che sono separati da uno spazio.
  • Gli ultimi due parametri sono il file di origine e il file di destinazione.

Passaggio 5: descrivi l'immagine

L'immagine originale non è stata creata per un globo rotondo, ma per sembrare piatta. In termini di GIS, è previsto, il che significa che è una rappresentazione bidimensionale di un oggetto tridimensionale. La proiezione richiede distorsioni dell'immagine in modo che appaia come dovrebbe essere un'immagine piatta della Terra.

Per farlo apparire correttamente, devi deformare l'immagine per adattarla al globo. Fortunatamente GDAL è anche un ottimo strumento per farlo. Digita semplicemente gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. Verrà creato un nuovo file, bluemarble2.vrt, che fornisce i metadati sulla procedura di deformazione.

Passaggio 6: crea le schede

Ci siamo quasi, ma questa parte richiederà più tempo. Per creare i riquadri, digita gdal2tiles.py -p geodetic -k bluemarble2.vrt. -k impone un output KML. Verrà creata una struttura di directory con un super-overlay. Poiché ciascuno di questi file immagine deve essere creato separatamente, l'esecuzione richiede un po' di tempo. Per le immagini di grandi dimensioni, ora puoi andare a prendere una tazza di caffè, fare un pisolino, ma anche un pasto leggero. Quando hai finito, apri doc.kml e osserva i risultati.

Conclusione

Questo tutorial non fa altro che presentare la superficie di GDAL, ma offre un pratico meccanismo per generare riquadri. Le librerie GDAL principali sono scritte in C++, ma offrono associazioni per Perl, Python, VB6, R, Ruby, Java e C#/.NET, il che significa che puoi incorporare facilmente GDAL nelle tue applicazioni. Inoltre, molte utilità, tra cui gdal2tiles, sono scritte in Python e, di conseguenza, sono facili da incorporare nelle applicazioni Python. gdal2tiles è anche in grado di generare pagine API di Google Maps e OpenLivelli.