Pyramide avec GDAL et GEOSERVER

Retour d’expériences

Pyramide tuilé avec GDAL
Suite à un travail faite sur l’optimisation d’ortho photos de Rennes Métropole, je partage avec vous mon expérience sur la valorisation et la production d’images tuilées avec des overview et la mise en place d’une structure pyramidale d’image tuilées

Pour plus de documentation complète je vous renvoie à Geoserver Stéroide
Pour commencer télécharger gdal

Il y a un bug dans la version du script gdal_retile.py dans FWTOOLS 2.4.7.
Si vous rencontrer cette erreur
File "C:\PROGRA~1\FWTOOL~1.7\bin\gdal_retile.py", line 273
print("Building internal Index for %d tile(s) ..." % len(inputTiles), end=' ')
^
SyntaxError: invalid syntax

Remplacer la ligne 273 par
print "Building internal Index for %d tile(s) ..." % len(inputTiles)
Test GDAL avec FWTOOLS : 1329_7218.tif
Je ferais mes tests à partir une dalle geotiff : 1329_7218.tif
Dans un premier temps nous allons consulter l’information de base contenue dans notre image.
Pour ce faire nous allons utiliser la commande :
Gdalinfo 1329_7218.tif

gdal_info

Comme vous pouvez le constater nous avons en gros une Geotiff avec une projection en Lambert93, des block de 5000*5000

Pour optimiser les données, la bibliographie conseil d’utiliser des des blocks de 256*256 avec des overview internes ou externes.

Pour créer des blocks vous devez utiliser Gdal_translate qui est l’outil de transformation de GDAL (to translate = transformer, convertir), il sert principalement à changer le format, mais aussi à extraire une dalle à partir d’un raster existant.
gdal_translate -co "TILED=YES" -co "BLOCKXSIZE=256" -co "BLOCKYSIZE=256" "C:\Documents and Settings\a.diouck\Bureau\GDAL\ortho_15cm\assemblage\beton\depart\20cm.tif" "C:\Documents and Settings\a.diouck\Bureau\GDAL\ortho_15cm\assemblage\beton\depart\20cmblock256.tif"
gdaltranslate

Pour vérifier la transformation vous faites

Gdalinfo 1329_7218.tif

gdalinfo2

Maintenant avec notre image nous avons à la fois des block de 256*256 mais aussi des overview internes que l’on peut directement utiliser dans un serveur cartographique pour créer des tuiles performantes.
Mais avant cela je vais vous montrer quelque chose de pratique c’est-à-dire la reprojection des données avec la commande gdalwarp, utile si on veut changer de coordonnées.
Gdalwarp est l’outil de « déformation » de GDAL (to warp = déformer), il sert principalement à reprojeter, mais aussi à modifier les pixels de l’image.

* -of pour préciser le format (ex : -of ECW)
* -co pour appeler une option de création et en préciser la valeur (ex : -co TARGET=90)
* -projwin dans gdal_translate, pour extraire une dalle d’un raster (ex : -projwin 575000 325000 576000 322000)

* -s_srs dans gdalwarp, pour spécifier la projection du fichier source (ex: -s_srs EPSG:27562)
* -t_srs dans gdalwarp, pour spécifier la projection du fichier en sortie (ex: -s_srs EPSG:3948)

Example passage de rgf 93 par defaut de notre image source vers le CC48 utilisée par Rennes Métropole
gdalwarp -t_srs EPSG:3948 1329_7218.tif 1329_7218_3948.tif
gdalinfo 3

Visualisation avec Qgis
qgis gdal

Structure pyramidal
Maintenant que vous savez comment manipuler gdal pour optimizer vos tuiles, je vais vous montrer une autre facon plus traditionnelle de creation de tuiles .
Gdal nous permet de créer des pyramides d’apres mon expériance encore plus performant que ce qu’on vient de voir.
Pour ce faire j’ai regroupé les commande de tout à l’heure plus gdal_retile pour générer une pyramide avec une reéchantillonnage bilineaire, sur 4 niveau, des dalles de 2048*2048 , des block de 256*256 dans un dossier bmpyramid
gdal_retile.py -v -r bilinear -levels 4 -ps 2048 2048 -co « TILED=YES » -co « COMPRESS=JPEG » -co « BLOCKXSIZE=256 » -co « BLOCKYSIZE=256 » -targetDir bmpyramid 1329_7218_3948.tif

gdal_retile

Comme vous pouvez le constater nous avons 4 niveaux et le reste c est le niveau “0”
pyramide

Construction d’un pyramide avec Geoserver
Un autre example

gdal_retile -v -ps 500 500 -s_srs EPSG:3948 -levels 7 -tileIndex 20cm_optimise.shp -tileIndexField tilename -targetDir « C:\FWTools2.4.7\geotif\pyramide\arrivee » « C:\FWTools2.4.7\geotif\pyramide\depart\20cm.tif »
gdal_retile 2
Tous les images en dehors des dossiers sont le niveau « 0 » . En important le dossier depuis Geoserver avec « imagepyramid » Geoserver va créer un dossier “0” pour regrouper ltous les images en dehors des dossiers.pyramide

pyramide 2

Il crée également des indexes spatiales et fichiers de projection pour chaque dossier.
Et enfin à la racine il crée un fichier de propriété qui fera le lien entre chaque dossier.
geoserver