Skip navigation.
Home
Istituto Scienze della Terra - SUPSI

Image Mosaic per Geoserver

Queste poche righe di testo elencano la procedura per creare un mosaico d'immagini raster da utilizzare all'interno di un geoservizio con Geoserver. I vantaggi della mosaicizzazione o tiling delle immagini sono in particolare la velocità elevata quando queste si visualizzano in un webGIS e si rigenerano dopo ogni operazione sulla mappa (zoom, pan, query, ecc.).

Il tiling viene eseguito utilizzando i comandi di GDAL (vedi pagina relativa FWTools)

 

Imput : immagini raster utilizzabili per livelli informativi cartografici quali esempio carte nazionali, piani corografici, ortofoto, mappe d'esposizione solare, ecc.

Nel caso d'esempio si dispone di :

  • un reportorio o folder chiamato cn100bn che contiene carte nazionali svizzere (@swisstopo) georeferenziate al 1:100'000, bianco-nero. Per ognuna delle 6 mappe, 3 file imput ovvero *.tif, *.tfw, *.aux

Elenco delle procedure da svolgere :

  1. Comando in FWTools chiamato gdal_translate : operazione che va eseguita per ognuno dei 6 fogli della CN e che consente di trasformare il *tif in *.geotiff accorpando in quest'ultimo i file *.tfw ed *.aux. Ogni singolo foglio della CN o mappa viene pure "tilizzata" ("TILED=YES") anche se non ancora ben apurato se questa operazione renda il servizio più veloce oppure il contrario. Consiglio, provare con e senza TILED=YES
  2. Comando FWTools gdaladdo : va fatto per ognuno dei 6 fogli della CN e crea un piramidale d'immagine in modo tale che la risoluzione dell'immagine é diversa in funzione dello zoom o livello di zoom.
    Eseguendo gdaladdo 2 4 8 16 32 64 ho Levels=0.2,0.2 0.4,0.4 0.8,0.8 1.6,1.6 3.2,3.2 6.4,6.4 12.8,12.8 e
    LevelsNum=7

  3. gdalindex : comando sempre in FWTools che che genera lo *.shp dell'enclosig polygons per ogni foglio della CN ed in questo shapefile una colonna chiamata location dove l'attributo é il percorso per andare a cercare il foglio della CN (che é associato a un indice corrispondente). Questa operazione é indispensabile per la velocità perché il geoserver poi sa che quando faccio un'operazione come uno zoom all'interno di una certa area geografica lui ti va a considerare nel calcolo solo i polygons (quindi le mappe) coinvolte e non tutte le altre. Stessa operazione che fa anche l'ArcGIS quando si crea un RasterDataset

  4. Per il file *.shp generato nel gdalindex (esempio cn100bn_index.shp) creare un file *.prj con la proiezione SRS specifica ed un file *.properties con diverse info che servono a geoserver come una sorta di header. Le linee di comando gdalinfo cn42.tif (cn42 é in nome del raster) e ogrinfo -al cn100bn_index.shp (cn100bn_index.shp é il nome dello shape) informano rispettivamente sul raster per esempio risoluzione dei pixel e sullo shape come numero dei livelli LevelNum e Envelope2D

Esempio di *.prj : cn100bn_index.prj (sistema svizzero CH1903, SRS 21781) (vedi esempio_mosaic_geos.zip)

Esempio di *.properties : cn100bn_index.properties (vedi esempio_mosaic_geos.zip)

 

________________________________________________________________________________________________ ________________________________________________________________________________________________

esempio_mosaic_geos.zip

contiene la cartella cn100 che deve contenere : - cn100bn_index.prj, - cn100bn_index.properties, - GdalOptimizeFolder.sh (lo script per eseguire tutte le tappe all-in-one, vedi sotto), - le 6 mappe raster (i 6 .tif ed i 6 .aux e i 6 .tfw) che non sono state messe per motivi di spazio.

Dopo aver fatto girare lo script si ottiene :  - cn100bn_index.shp e le 6 carte raster .tiff (geotiff)

________________________________________________________________________________________________ ________________________________________________________________________________________________

Ora, per eseguire queste tappe sopra elencate in modo automatico su tutti i fogli della CN (ora ne abbiamo solo 6 ma immaginiamo di avere un folder con un centinaio di mappe) abbiamo creato uno script che consente di svolgere tutto in una volta sola. Questo script di nome GdalOptimizeFolder.sh va copiato ed eseguito all'interno del folder nel quale ci sono le mappe da trattare (va utilizzato con Linux (lanciarlo con sh GdalOptimizeFolder.sh)) e bisogna avere le librerie GDAL istallate ovviamente). Da notare che nella prima parte della script questo trasforma tif in geotiff accorpandogli gli aux ed i tfw che poi rimuove

Anche lo script lo si trova in esempio_mosaic_geos.zip

 

5. Ultima tappa : Caricare le mappe e gli altri file, nonché configurare geoserver per poterle utilizzare

**************************************************************************************************************************

Se si utilizzano i comandi di gdal con per esempio un FWTools che gira in Windows ovviamente non può essere eseguito uno shell script .sh come quello dell'esempio riportato sopra (funziona in ambiente linux tramite il bach di Grass). Ora in questo caso possiamo però scrivere in sequenza i comandi che dobbiamo eseguire e copiarli in un file di testo a cui daremo l'estensione .bat (esempio esegui.bat). Basterà poi chiamare nell' FWTools esegui.bat per eseguire in sequenza i comandi voluti. Esempio dei soliti comandi nel file .bat (esegue gdal_translate e gdaladdo per 1273, 1274, 1292, ...)

gdal_translate -of GTiff -co "TILED=YES" 1273.tif 1273.tiff
gdaladdo -r average 1273.tiff 2 4 8 16

gdal_translate -of GTiff -co "TILED=YES" 1274.tif 1274.tiff
gdaladdo -r average 1274.tiff 2 4 8 16

gdal_translate -of GTiff -co "TILED=YES" 1291.tif 1291.tiff
gdaladdo -r average 1291.tiff 2 4 8 16

gdal_translate -of GTiff -co "TILED=YES" 1292.tif 1292.tiff
gdaladdo -r average 1292.tiff 2 4 8 16

...

**************************************************************************************************************************

Esempi in linee di comando dei punti 1. 2. 3.

gdal_translate -of GTiff -co "TILED=YES" cn38.tif CN38.tiff
gdaladdo -r average CN38.tiff 2 4 8 16 32 64 128
gdaltindex -tileindex location CN100bn *.tiff

Punto 4. cioè i fili *.prj e *properties vanno scritti manualmente ma per aiutarci per sapere i parametri possiamo usare i comandi gdalinfo (per Levels e LevelsNum ed ogrinfo per Envelop2D)

Link Utili :

http://geoserver.org/display/GEOSDOC/Using+the+ImageMosaic+plugin

**************************************************************************************************************************

Altre info utili : per esperienza provata la versione di gdal (_translate o addo) 1.6.0 presenta dei problemi quando i file mosaici finali vengono poi caricati in Geoserver 1.7.4 . Problemi nel senso che i raster si visualizzano con delle righe fastidiosissime che lo rendono illeggibile.

 

 

Ing. Alessio Spataro