Tutoriel: Introduction à GDAL

Site: OpenCourseWare for GIS
Cours: Programmation pour les applications hydrologiques géospatiales
Livre: Tutoriel: Introduction à GDAL
Imprimé par: Guest user
Date: dimanche 21 avril 2024, 12:07

1. Introduction

Qu'est-ce que GDAL ?

GDAL est une bibliothèque de traduction pour les formats de données géospatiales raster qui est publiée sous une licence X/MIT style Open Source par Open Source Geospatial Foundation. En tant que bibliothèque, il présente un modèle de données abstrait unique à l'application en relation avec tous les formats pris en charge. Il est également livré avec une variété d'utilitaires de ligne de commande utiles pour la traduction et le traitement des données. Voir pour plus d'informations: http://www.gdal.org

Objectifs d'apprentissage

Après ce cours, vous pourrez:

  • Récupérer des informations à partir de données SIG
  • Reprojeter les données SIG
  • Modifier les propriétés du raster
  • Convertir les formats raster
  • Convertir les formats vectoriels
  • Appliquer des requêtes spatiales sur des vecteurs
  • Convertir les fichiers de valeurs séparées par des virgules
  • Effectuer une conversion par lot

Logiciel

Pour ces exercices, GDAL doit être installé, de préférence en utilisant le package de distribution OSGEO4W. Si vous avez installé QGIS, la distribution OSGEO4W est déjà là.

Sinon vérifiez:

Le site Web de GDAL: http://www.gdal.org

Le site Web OSGEO4W: http://trac.osgeo.org/osgeo4w/

Données d'exercise

Les données d'exercice peuvent être téléchargées depuis la page principale. Il contient:

roads.shp: feuille de route d'OpenStreetMap ( http://openstreetmap.org )

srtm_37_02.tif: tile d'un modèle numérique d'élévation (DEM) de la Shuttle Radar Topography Mission (SRTM) (http://www2.jpl.nasa.gov/srtm/)

gem_2011_gn1.shplimites des communes néerlandaises, disponible gratuitement auprès de CBS (Statistics Netherlands) et Kadaster (http://www.cbs.nl).

Locations.csv: table avec les emplacements des objets.

landuse.zip: contient des séries chronologiques d'utilisation des terres au format IDRISI.

2. Récupération d’informations à partir de données SIG

Dans ce chapitre, vous apprendrez à:

  • Récupérer des informations à partir de données raster
  • Récupérer des informations à partir de données vectorielles
Nous allons introduire les commandes gdalinfo et ogrinfo.

2.1. Récupérer des informations à partir de données raster

L'une des commandes les plus simples et les plus utiles de GDAL est gdalinfo. Lorsqu'on lui donne une image comme argument, il récupère et imprime toutes les informations pertinentes connues sur le fichier. Ceci est particulièrement utile si l'image contient des données de balises supplémentaires, comme c'est le cas avec les fichiers TIF. Lorsque vous travaillez avec des images satellite, c'est un moyen extrêmement utile de garder une trace de l'emplacement des images en coordonnées long / lat ainsi que la projection d'image.

1. Ouvrez l'invite où vous avez configuré GDAL. Si vous avez installé QGIS, vous pouvez utiliser OSGeo4W Shell.

2. Avec l'invite de commande, accédez au répertoire dans lequel vous avez enregistré les données d'exercice, par ex. Z:\gdal_exercises

3. Exécutez la commande suivante:
gdalinfo srtm_37_02.tif <ENTER>



4. Essayez de répondre à ces questions en vous basant sur les informations imprimées à l'écran:
  • Quelle est la taille de l'image?
  • Quel est le système de coordonnées?
  • Quel est le code EPSG?
  • Quelles sont les valeurs minimales et maximales?
Vous trouverez plus d'informations sur l'utilisation de la commande gdalinfo à l'adresse https://gdal.org/programs/gdalinfo.html

2.2. Récupérer des informations à partir de données vectorielles

Pour récupérer des informations à partir de données vectorielles, nous utilisons la commande ogrinfo.

1. Exécutez la commande suivante:
ogrinfo -al roads.shp | more <ENTER>
ogrinfo -al gem_2011_gn1.shp | more <ENTER>

2. Répondez à ces questions:

  • Quelles sont les projections de ces deux fichiers shapefile?
  • Quels sont les codes EPSG?
Comme vous pouvez le voir, plusieurs codes EPSG sont signalés. En effet, différents éléments de la projection ont leur propre code EPSG. La règle de base est que vous pouvez prendre le dernier code EPSG. Ainsi, la projection de roads.shp est EPSG: 4326, ce qui signifie qu'elle est en système de coordonnées géographiques (GCS) avec des coordonnées en latitude / longitude.
Pour gem_2011_gn1.shp, la projection est EPSG: 28992, qui est la projection néerlandaise (Amersfoort RD / New).


Plus d'informations sur la commande ogrinfo peuvent être trouvées ici:

Plus d'informations sur les codes EPSG dans cette vidéo:


3. Reprojeter des données SIG

Dans ce chapitre, vous apprendrez à:

  • Reprojeter les données raster
  • Reprojeter les données vectorielles
Vous utiliserez les commandes gdalwarp et ogr2ogr.

Dans cet exercice, nous voulons faire une carte de la commune de Delft avec les routes principales et le relief. Comme les jeux de données sont dans des formats différents, nous devons les reprojeter dans un système de coordonnées commun. Ici, nous reprojetons tous les jeux de données à la projection néerlandaise Amersfoort / RD New.

3.1. Reprojeter des données raster

GDAL a la capacité de modifier un système de coordonnées raster en utilisant la syntaxe suivante:

gdalwarp -t_srs EPSG:... <input> <output>

L'argument -t_srs spécifie le système de coordonnées cible. Si le système de coordonnées source est inconnu, il doit être spécifié avec l'argument -s_srs. EPSG:... spécifie le code EPSG de la projection. <input> et <output> sont respectivement les données d'entrée et de sortie.

Nous allons maintenant reprojeter un modèle numérique d'élévation (DEM) acquis par la Shuttle Radar Topography Mission (SRTM). Vous pouvez utiliser ce site Web pour télécharger des DEM pour votre domaine d'intérêt: http://srtm.csi.cgiar.org/index.asp

Afin de reprojeter le DEM de WGS-84 lat / lon à Amersfoort / RD New, nous utilisons cette commande:

gdalwarp -t_srs EPSG:XXXXX srtm_37_02.tif dem_rd.tif

1. Remplacez XXXXX par le code EPSG approprié pour Amersfoort / RD New (voir l'une de vos réponses précédentes en utilisant ogrinfo).

2. Exécutez la commande:

gdalwarp -t_srs EPSG:28992 srtm_37_02.tif dem_rd.tif <ENTER>

3. Visualisez le résultat dans QGIS.

Plus d'informations sur la commande gdalwarppeuvent être trouvées ici.

3.2. Reprojeter des données vectorielles

Pour les données vectorielles, la commande ogr2ogr est utilisée. La syntaxe est:

ogr2ogr -t_srs EPSG:XXXXX <output> <input>

Notez que <output> et <input> sont dans un ordre différent de celui de gdalwarp!

Ici, nous allons convertir les données de route OpenStreetMaps en projection Amersfoort/RD New.

1. Exécutez:
ogr2ogr -t_srs EPSG:28992 roadsreprojected.shp roads.shp

La commande est exécutée (cela prend un certain temps), mais donne un avertissement.

2. Que signifie l'avertissement?

Pour plus d'informations sur la commande ogr2ogr clickez ici.

4. Convertir des formats SIG

Dans ce chapitre, vous apprendrez à

  • Effectuer des conversions entre différents formats raster
  • Effectuer des conversions entre différents formats de vecteurs
Vous utiliserez les commandes gdal_translate et ogr2ogr.

4.1. Convertir des formats raster

La fonction principale de gdal_translate st d´effectuer des conversions entre différents formats d'image. La syntaxe de base est:

gdal_translate -of FORMAT inputFile outputFile

Tous les formats pris en charge peuvent être trouvés ici.

Nous allons maintenant convertir le DEM du format geoTiff au format SAGA. SAGA est un SIG qui a son propre format binaire -soutenu par gdal- avec l'extension .sdat.

1. Exécutez la commande suivante:
gdal_translate -of SAGA dem_rd.tif dem_rd.sdat

Certains formats nécessitent plus d'arguments. PCRaster par exemples a besoin d'une spécification du type de données (booléen, nominal, scalaire, etc.). Convertissons les mêmes données au format PCRaster.

2. Exécutez la commande suivante:
gdal_translate -of PCRaster -ot Float32 -mo "VS_SCALAR" dem_rd.tif dem_rd.map

Pour convertir au format PCRaster, vous devez connaître le type de données du raster. Dans l'exemple ci-dessus, le DEM est en données continues, le type de données est donc scalaire. Si la couche était discrète (classes), le type de données serait nominal.

Data Type
-of -mo
Boolean Byte "VS_BOOLEAN"
Nominal Int32 "VS_NOMINAL"
Ordinal Int32 "VS_ORDINAL"
Scalar Float32 or Float64
"VS_SCALAR"
Direction Float32 or Float64
"VS_DIRECTION"
LDD Int32 "VS_LDD"

4.2. Convertir des formats vecteur

GDAL permet les conversions entre les formats vectoriels à l'aide de la commande ogr2ogr.
Voici une liste des formats vectoriels pris en charge.

La syntaxe générale est:
ogr2ogr -f <"Format"> <output> <input>
Le "Format" est le nom court dans la table des pilotes de vecteur et doit être indiqué entre guillemets.

Nous allons convertir gem_2011_gn1.shp en un fichier Google KML file qui peut être ouvert dans Google Earth.

1. Exécutez la commande suivante:
ogr2ogr -f "KML" gem.kml gem_2011_gn1.shp

Ignorez les avertissements. Ils sont liés à des formats et des caractères qui ne sont pas pris en charge.
Vous trouverez ici toutes les options de la commande ogr2ogr. Notez que vous pouvez également reprojeter et convertir en même temps en utilisant -t_srs.  Il y a beaucoup d'autres choses que vous pouvez faire, mais que nous n´allons pas pouvoir couvrir tutoriel de base.

2. Ouvrez le fichier dans Google Earth pour vérifier le résultat.

4.3. Requêtes spatiales de données vectorielles

Pour notre carte de Delft, nous voulons faire l'analyse SIG suivante:

  • Sélectionnez la commune de Delft sur la carte des communes et l´enregistrez dans un nouveau fichier de formes;
  • Intersectez les limites de la commune de Delft avec la carte routière des Pays-Bas.
Nous pouvons utiliser une requête spatiale pour sélectionner une entité à partir d'une carte vectorielle.

1. Quel est l'attribut de la carte des communes contenant les noms des communes? Vous pouvez utiliser ogrinfo ou QGIS pour répondre à cette question.

2. Exécutez la commande suivante:
ogr2ogr -f "ESRI Shapefile" -where GM_NAAM='Delft' -a_srs EPSG:28992 delft.shp gem_2011_gn1.shp

Cela enregistrera la fonctionnalité avec GM_NAAM Delft dans un nouveau fichier appelé delft.shp. L'argument -a_srs EPSG:28992 est utilisé pour affecter la projection Amersfoort / RD New au fichier de sortie. L'argument -f définit le format de sortie.

3. Ouvrez maintenant dans QGIS le DEM reprojeté (dem_rd.tif), la carte de route reprojetée (roadsreprojected.shp) et la commune de Delft (delft.shp).

Result GDAL

4.4. Convertir des valeurs séparées par des virgules (CSV)

Parfois, vous souhaitez reprojeter des coordonnées dans un fichier ASCII, par ex. qui a été enregistré sous forme de texte dans un tableur. Ici, nous allons convertir les coordonnées dans un fichier ASCII séparé par des virgules locations.csv en un nouveau fichier ASCII locations_reprojected.csv.

Il est recommandé d'afficher d'abord le contenu d'un fichier CSV et de vérifier (1) les coordonnées et (2) le séparateur de colonnes. Le séparateur n'est pas toujours une virgule et dépend parfois des paramètres de langue utilisés lors de l'exportation à partir d'un tableur.

1. Affichez le contenu de locations.csv . Vous pouvez utiliser la commande type à partir de l'invite de commande comme vous l'avez appris dans le tutoriel du Ligne de Commande.

Nous pouvons voir que les coordonnées sont en lat / lon, ce qui signifie que nous pouvons utiliser EPSG: 4326. Le séparateur de colonne est une virgule. La dernière colonne donne les objets entre guillemets.

Pour modifier la projection du CSV, nous devons d'abord créer une source de données virtuelle en créant un fichier de contrôle XML.

2. Sur votre ordinateur Windows, ouvrez le bloc-notes et tapez / copiez le code XML ci-dessous. Utilisez des indentations de trois espaces.

<OGRVRTDataSource>
   <OGRVRTLayer name="locations">
      <SrcDataSource>locations.csv</SrcDataSource>
      <GeometryType>wkbPoint</GeometryType>
      <LayerSRS>EPSG:4326</LayerSRS>
      <GeometryField encoding="PointFromColumns" x="lon" y="lat"/>
   </OGRVRTLayer>
</OGRVRTDataSource>

3. Enregistrez le fichier sous le nom locations.vrt dans le dossier gdal_exercises.

Quelques explications sur le fichier XML:

  • <OGRVRTLayer name="locations"> doit correspondre à <SrcDataSource>locations.csv</SrcDataSource>
  • <LayerSRS>EPSG:4326</LayerSRS> doit correspondre au code EPSG des colonnes de coordonnées
  • <GeometryField encoding="PointFromColumns" x="lon" y="lat"/> indique les colonnes avec les coordonnées que
    vous souhaitez convertir.

4. Exécutez la commande suivante:
ogr2ogr -t_srs EPSG:28992 -f "CSV" locations_reprojected.csv locations.vrt -lco GEOMETRY=AS_XY

Dans cet exemple, locations.csv avec des coordonnées WGS-84 est converti en locations_projected.csv avec projection Amersfoort/RD New .

5. Utilisez Bloc notes pour vérifier locations_reprojected.csv. Qu'est-ce qui est enregistré dans chaque colonne?

De la même manière, nous pouvons convertir le fichier séparé par des virgules en un fichier shapefile.

6. Exécutez la commande suivante:
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:28992 locations.shp locations.vrt

7. Vérifiez le résultat avec ogrinfo.

8. Visualisez le fichier de formes dans QGIS en le mettant au-dessus du DEM, la carte routière et la délimitation de la commune de Delft. Faites une belle carte.

9. Convertissez le fichier locations.shp en Google KML, ouvrez-le dans Google Earth et découvrez en quoi consiste les objets de localisations.

5. Conversion de lot (batch)

Les programmes SIG sur les ordinateurs de bureau sont très utiles pour les opérations SIG, mais sont difficiles à utiliser si nous devons répéter la même tâche pour de nombreuses couches SIG. Ainsi, les scripts peuvent être une solution.

Nous avons ici par exemple des données d'un modèle d'utilisation des terres de Dublin. Les données sont au format raster IDRISI
(.rst),avec une couche pour chaque année entre 1990 et 2030. Notre tâche est de convertir toutes les couches au format GeoTiff (.tif ).

1. Décompressez landuse.zip fourni avec les données de cours dans un nouveau dossier et vérifiez le contenu.

Rappelez que pour une conversion de fichier raster, nous utiliserions ceci:
gdal_translate -of GTiff 01_State19900101.rst 01_State19900101.tif

Nous allons maintenant créer un fichier batch (voir le tutoriel Ligne de Commande) qui comprend une boucle pour convertir tous les fichiers du dossier.

2. Ouvrez un éditeur de texte, par ex. Bloc notes
3. Ajoutez le code suivant:

for %%f in (*.rst) do (
   echo %%~nf
   gdal_translate -of GTiff %%f %%~nf.tif
)

4. Enregistrez le fichier batch sous rst2tif.bat dans le dossier contenant les rasters d'utilisation du sol (n'oubliez pas de changer l'extension si vous utilisez Bloc notes, erreur classique!).

Essayez de comprendre le code. Il s'agit d'une boucle for loop qui visite à tour de rôle tous les fichiers
*.rst du dossier. %%f est la variable qui contient le nom de fichier de chaque fichier. Avec echo nous pouvons imprimer quelque chose à l'écran. Ici, nous imprimons %%~nf, qui est la partie du nom de fichier avant le point qui le sépare de l'extension. Ensuite, nous utilisons la commande gdal_translate avec le format de sortie t GeoTiff. À la fin de la ligne, nous ajoutons l'extension .tif au nom de fichier.

5. Exécutez le fichier batch. Tapez:
rst2tif <ENTER>

6. Vérifiez les résultats.

6. Conclusion

Dans cette leçon, vous avez appris à:

  • Récupérer des informations à partir de données SIG
  • Reprojeter des données SIG
  • Changer les propriétés d’un raster
  • Convertir des formats de raster
  • Convertir des formats vectoriels
  • Appliquer des requêtes spatiales à des vecteurs
  • Convertir des fichiers de valeurs séparées par des virgules
  • Effectuer une conversion par lots
Cette vidéo montre les résultats du tutoriel GDAL: