From f53e4c91e7882d31425f0022c5f9690c2ed0999b Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:46:21 +0100 Subject: [PATCH 01/19] Add files via upload Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- .../2026/2026-03-23_nouvelle_cli_gdal.md | 245 ++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 content/articles/2026/2026-03-23_nouvelle_cli_gdal.md diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md new file mode 100644 index 0000000000..29e07c76ee --- /dev/null +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -0,0 +1,245 @@ +--- +title: La nouvelle CLI GDAL 3.11 +subtitle: Elle a tout d'une grande +authors: + - Thomas SZCZUREK-GAYANT +categories: + - article +comments: true +date: 2026-03-23 +description: "Principes et fonctionnement de la nouvelle CLI GDAL. " +icon: simple/gdal +image: +license: default +robots: index, follow +tags: + - GDAL +--- + +# La nouvelle CLI GDAL 3.11 + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +> "Oh non, pas gdal_translate ! C'était mon préféré !" +> *Un photogramètre anonyme en détresse* + +Depuis sa version 3.11 (et son intégration à QGIS 3.44), la CLI (Command Line Interface / Interface en Ligne de Commande) de `GDAL` a été entièrement revue. On va ici présenter cette nouvelle interface et brosser un aperçu de ce qu'on peut réaliser avec `GDAL` dans un court article. *Nota bene : COURT on a dit.* + +## Gdal qu'est ce que c'est ? + +`GDAL` est une librairie de programmes open source en C/C++ permettant de réaliser des convertion de fichier vecteur/rasteur, et des traitements raster. Cette librairie se cache derrière à peu près tous les logiciels contenant "SIG" dans leur description. Quand vous demandez à QGIS d'enregistrer votre fichier `geopackage` en `flatgeobuf` ou en `geoparquet` pour les amateur.trices de formats modernes mais étranges (perso je ne travaille plus qu'en [DuckLake](https://duckdb.org/2025/05/27/ducklake.html) Spatial pour embêter mes collègues), en réalité QGIS *demande* à GDAL de réaliser l'opération. + +Les anciens noms des programmes dédiés au vecteur font référence à ogr, une ancienne librairie depuis *absorbée* par GDAL. + +On ne le répétera jamais assez mais sans GDAL, presque rien n'existerait dans le monde de la géomatique, qu'elle soit libre ou propriétaire. A tout ces égards, cette librairie fait partie de la sainte trinité [gdal](https://gdal.org/en/stable/)/[geos](https://libgeos.org/)/[proj](https://proj.org/en/stable/). + +Maitriser `GDAL`, c'est être capable de remplacer des ~~interfaces graphiques~~ logiciels coutant des dizaines de milliers d'euros. + +Cependant, historiquement les programmes `GDAL` étaient ... comment dire ... peut normés entre eux, par exemple `gdal_translate` (le programme servant aux conversions raster) demandait ses fichiers d'entrée / sortie dans cet ordre : in -> out alors qu'`ogr2ogr` (le programme servant aux conversions vecteur) lui demandait : out -> in. De plus les plus gros programmes, ceux qui "faisaient tout" on été supprimés et remplacés des équivalents plus spécifiques. +Pas de panique, les anciennes commandes restent disponibles pour garder vos scripts existants en vie. + +## Principes de la nouvelle CLI + +- Les gros programmes sont divisés en plusieurs (au revoir `gdal_translate` qui convertissait mais faisait aussi tout pareil que `gdalwarp`, bonjour `gdal raster convert` et `gdal raster reproject`) +- Les positions des fichiers d'entrées et de sorties sont cohérentes entre les programmes et les noms des options sont normés ! +- On fait appel aux nouvelles commandes GDAL *git style*. + +```mermaid +flowchart + A(["gdal"]) + A --> B(["Vector/Raster"]) + B --> C(["Programme"]) + C --> D(["Options"]) + D --> E(["In / Out"]) +``` + +Vous pourrez retrouver l'intégralité des programmes disponibles et leurs options [ici](https://gdal.org/en/stable/programs/index.html) + +Exemple : + +```sh +gdal raster convert --overwrite in.jp2 out.tif +``` + +Commande pour convertir un fichier in.jp2 au format geotiff en autorisant l'écrasement d'un potentiel fichier out.tif déjà existant. + +Pour du vecteur on peut aussi importer un shape (beurk) dans une base Postgis + +```sh +gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin123' schemas='my_schema'" +``` + +Une différence par rapport à l'ancienne CLI est l'obligation de l'utilisation de l'option `append`, même pour créer une table non existante. + +On peut même copier le contenu d'un flux wms vers un geopackage. + +```sh +gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"https://data.geopf.fr/wfs/ows?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=BDTOPO_V3:arrondissement_municipal" bdtopo.gpkg +``` + +On pourrait imaginer combiner les commandes précédantes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). + +Si certain.nes d'entre vous ont envie de remplacer le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédetection, laissez bien sur toutes les options en *par défaut* et ne vous embêtez pas avec car si elles sont là, c'est bien sur qu'elles ne servent à rien. D'ailleurs on vous ne les montrera même pas dans notre superbe interface graphique pour "ne pas afficher des interfaces barbares à l'utilisateur et que le bouton *suivant* soit bien visible". + +```sh +gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif +``` + +On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.cloudnativegeo.org/cloud-optimized-geotiffs/intro.html). Voir cet [article de geotribu par Nicolas Rochard](https://geotribu.fr/articles/2025/2025-02-11_bonnes-pratiques-generation-raster-cog-avec-gdal/) pour les options qui vont bien utilisées par la région Hauts de France. + +```sh +gdal raster convert --ouput-format=COG -co COMPRESS=ZSTD -co BIGTIFF=IF_NEEDED in.tif out.tif +``` + +Avec les `-co` qui servent à passer les options spécifiques au driver de sortie. On retrouvera ces différents drivers [ici](https://gdal.org/en/stable/drivers/raster/index.html) pour le raster, et [ici](https://gdal.org/en/stable/drivers/vector/index.html) pour le vecteur. + +Ou bien simplement pour demander des informations sur une couche : + +```sh +gdal raster info ma_couche.tif +``` + +Voir même créer des ombrages : + +```sh +gdal raster hillshade --zfactor=2 in.tif out.tif +``` + +## Les pipelines + +Une autre nouveauté fait partie de cette mise à jour : Les pipelines [vecteurs](https://gdal.org/en/stable/programs/gdal_vector_pipeline.html#gdal-vector-pipeline) ou [raster](https://gdal.org/en/stable/programs/gdal_raster_pipeline.html#gdal-raster-pipeline). +Ils permettent d'appeler un programme nommé `pipeline` qui va enchainer les traitements de plusieurs programmes `GDAL` avant d'écrire le fichier de sortie. + +Les commandes utilisant un pipeline doivent toutes commencer par `read` et se terminer par `write`, les différentes opérations étant séparées par des `!`. + +```mermaid +flowchart + A(["gdal"]) + A --> B(["vector / raster"]) + B --> C(["pipeline"]) + C --> D(["read"]) + D --> E(["programme 1"]) + E --> F(["programme 2"]) + F --> G(["write"]) +``` + +Exemple simple n'appliquant qu'une reprojection : + +```sh +gdal vector pipeline --progress ! read in.gpkg ! reproject --dst-crs=EPSG:2154 ! write out.gpkg --overwrite +``` + +On peut aussi écrire le `pipeline` au format `gdalg.json` et son [driver dédié](https://gdal.org/en/stable/drivers/vector/gdalg.html). Attention, ne pas confondre `gdalg` et`gdalf` qui invoquera un magicien bourru et surtout ces cochoncettés de Hobbits qui vous viderons le frigo. Ce format rappelera le pipeline à chaque appel sur le fichier ! + +```sh +gdal vector pipeline --progress ! read in.gpkg ! reproject --dst-crs=EPSG:2154 ! write in_epsg_2154.gdalg.json --overwrite +``` + +Qu'on lira ensuite avec : + +```sh +gdal vector info in_epsg_2154.gdalg.json +``` + +(exemple issu de la documentation officielle de GDAL) + +On peut ainsi imaginer un pipeline qui reprojetera une couche, avant de la filtrer sur la valeur d'un de ses attributs. + +```sh +gdal vector pipeline ! read in.gpkg ! reproject --dst-crs=EPSG:2154 ! filter --where "mon_champ = 'valeur'" ! write out.gdalg.json +``` + +Cette manière de faire est certes plus verbeuse qu'un classique : + +```sh +ogr2ogr --t_srs=EPSG:2154 --sql "WHERE mon_champ='valeur'" --option_3 --option_4 --option_n -lco option1_diver=YES -lco option2_diver=NO out.gpkg in.shp +``` + +Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` n'est que la description d'une succession de traitements sur la couche source, et peut être appelé comme n'importe qu'elle autre entrée par n'importe quel programme de `GDAL` et non écrit sur un fichier qui devrait être mis à jour à chaque modification de la couche d'origine comme dans ce dernier exemple. + +## L'Interface Système Virtuelle (VSI) + +C'est ici le moment magique où votre schéma interne de pensée va être modifié. Désormais quand vous vous poserez la question "comment je fais pour *insert random bidule* ?", vous vous direz alors "en fait je vais le faire avec gdal, ça sera plus simple". On peut ainsi donc dire que `GDAL` est vecteur (ah ah ah !) de manipulations [mémétiques](https://fr.wikipedia.org/wiki/M%C3%A9m%C3%A9tique). C'est qu'on en apprend des trucs dans les [vieux bouquins de jdr](https://www.legrog.org/jeux/cops). Pour peu on y verrai une invention des reptiliens mais je n'en dirai pas plus de peur de représailles, ou de voir mes droits de douanne personnels vers les Etats-Unis augmenter. Quoiqu'avec *Drill baby , drill*, peut-être que les reptiliens y passeront aussi. Oh ... wait. Mais tout est calculé ! C'est ça leur grand plan, s'assurer que les reptiliens ne controlent pas le monde ! Tout est clair maintenant ! Quoique c'est tout de même un gros pari puisqu'il y a de fortes probabilités que les reptiliens aient le sang froid. On est toujours pas plus avancé. Sur ce, l'interface système virtuelle de `GDAL` (VSI : Virtual System Interface). + +`GDAL` possède une mécanique ([le VSI](https://gdal.org/en/stable/programs/index.html#virtual-system-interface-vsi-commands)) qui lui permet de lire des fichiers *à travers* un autre média (fichier zip, serveur http...). + +Pour l'invoquer, on utilisera `vsi` à la place de `vector`/`raster` pour on ajoute le préfixe `/vsi*quelque_chose*/` devant notre fichier. + +Exemple : + +```sh +gdal vsi info /vsizip/my_file.zip/my_layer_in.shp +``` + +Lire un fichier contenu dans un zip et le convertir (on peut s'en servir juste pour dézipper) : + +```sh +gdal vsi copy /vsizip/my_file.zip/my_layer_in.gpkg my_layer_out.gpkg +``` + +Convertir un fichier stocké sur un serveur http : + +```sh +gdal vsi copy /vsicurl/https://www.ign.fr/bd_topo/my_layer_in.gpkg my_layer_out.gpkg +``` + +Et on peut combiner pour convertir un fichier zip stocké sur un serveur web ! (attention à chainer les `vsi` avec `//`) : + +```sh +gdal vsi copy /vsizip//vsicurl/https://www.ign.fr/bd_topo/my_file.zip/my_layer_in.shp my_layer_out.gpkg +``` + +`GDAL` possède même des pilotes `S3` ou `AWS` pour son système VSI ! + +Enfin, on peut aussi profiter de `GDAL` pour générer des `SOzip` (Seek-Optimized Zips), grace au programme `sozip`. Des zips faits pour qu'on cherche vite à l'intérieur. C'est bizarre, ça parait être le penchant de "lire une donnée dans un zip sans avoir à le dezipper" vu juste haut dessus ;). + +```sh +gdal vsi sozip create my_gpkg.zip my.gpkg +``` + +## l'API Python + +Enfin, toute cette modernisation impacte evidemment les API, et celle qui nous interesse ici, l'[API Python](https://gdal.org/en/stable/programs/gdal_cli_from_python.html). + +On rappelle que de façon curieuse, l'api Python de GDAL s'installe et s'importe comme ceci : + +```sh +pip install gdal +``` + +```python +from osgeo import gdal + +gdal.Run(...) +``` + +Chaque programme `GDAL` est implémenté sous forme d'instances de la classe `osgeo.gdal.Algorithm`, qu'on appelle en utilisant la méthode `osgeo.gdal.Run()` ou plutôt `gdal.Run()` si on a importé `GDAL` comme dans l'exemple ci-dessus. + +Ensuite, c'est simple, ils s'appellent comme ceci : + +```python +gdal.Run("vector"/"raster"/"vsi", "programme", option(s), input="in.tif", output="out.tif) +``` + +exemple pour importer un fichier csv dans une base Postgres (plutôt que d'utiliser `COPY` de postgres, plus fastidieux): + +```python +gdal.Run("vector", "convert", append=True, format="PostgreSQL", lco="LAUNDER=NO", input=my_file.csv, output="PG:dbname='insee' schemas='wip' user='me' password='admin123'") +``` + +Le driver PostgreSQL possède une option **LAUNDER** activée par défaut qui va normaliser votre import (mettre les noms de champs en minuscule ...), que je désire désactiver ici. + +Exemple pour dézipper un fichier car c'est pénible en Python sinon (ça necessite genre, au moins 3 lignes !), et où le nom du fichier et du zip sont contenus dans une variable `file` : + +```python +gdal.Run("vsi", "copy", source=f"/vsizip/{file}_csv.zip/{file}.CSV", destination=f"{file}.csv") +``` + +(notez qu'avec le programme `copy`, entrée et sortie se nomment `source` et `destination`) + +Sur ce, g la dahl de lentilles, alors bon appétit ! (au fond de moi j'ai honte, mais ça fait du bien). + + + + +{% include "licenses/cc4_by-nc-sa.md" %} From 45194d1c1013d96987f47b176ab0f82fa97b0225 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 14:49:09 +0000 Subject: [PATCH 02/19] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automatiq?= =?UTF-8?q?ues=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026/2026-03-23_nouvelle_cli_gdal.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 29e07c76ee..6993b67b11 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -46,11 +46,11 @@ Pas de panique, les anciennes commandes restent disponibles pour garder vos scri ```mermaid flowchart - A(["gdal"]) - A --> B(["Vector/Raster"]) - B --> C(["Programme"]) - C --> D(["Options"]) - D --> E(["In / Out"]) + A(["gdal"]) + A --> B(["Vector/Raster"]) + B --> C(["Programme"]) + C --> D(["Options"]) + D --> E(["In / Out"]) ``` Vous pourrez retrouver l'intégralité des programmes disponibles et leurs options [ici](https://gdal.org/en/stable/programs/index.html) @@ -66,7 +66,7 @@ Commande pour convertir un fichier in.jp2 au format geotiff en autorisant l'écr Pour du vecteur on peut aussi importer un shape (beurk) dans une base Postgis ```sh -gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin123' schemas='my_schema'" +gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin123' schemas='my_schema'" ``` Une différence par rapport à l'ancienne CLI est l'obligation de l'utilisation de l'option `append`, même pour créer une table non existante. @@ -114,13 +114,13 @@ Les commandes utilisant un pipeline doivent toutes commencer par `read` et se te ```mermaid flowchart - A(["gdal"]) - A --> B(["vector / raster"]) - B --> C(["pipeline"]) - C --> D(["read"]) - D --> E(["programme 1"]) - E --> F(["programme 2"]) - F --> G(["write"]) + A(["gdal"]) + A --> B(["vector / raster"]) + B --> C(["pipeline"]) + C --> D(["read"]) + D --> E(["programme 1"]) + E --> F(["programme 2"]) + F --> G(["write"]) ``` Exemple simple n'appliquant qu'une reprojection : @@ -239,7 +239,6 @@ gdal.Run("vsi", "copy", source=f"/vsizip/{file}_csv.zip/{file}.CSV", destination Sur ce, g la dahl de lentilles, alors bon appétit ! (au fond de moi j'ai honte, mais ça fait du bien). - {% include "licenses/cc4_by-nc-sa.md" %} From 3ac7b93322dd01ca170eb2df87a0624d608bb002 Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Sat, 14 Mar 2026 09:06:30 +0100 Subject: [PATCH 03/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 6993b67b11..6bb2313d08 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -159,7 +159,7 @@ Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` ## L'Interface Système Virtuelle (VSI) -C'est ici le moment magique où votre schéma interne de pensée va être modifié. Désormais quand vous vous poserez la question "comment je fais pour *insert random bidule* ?", vous vous direz alors "en fait je vais le faire avec gdal, ça sera plus simple". On peut ainsi donc dire que `GDAL` est vecteur (ah ah ah !) de manipulations [mémétiques](https://fr.wikipedia.org/wiki/M%C3%A9m%C3%A9tique). C'est qu'on en apprend des trucs dans les [vieux bouquins de jdr](https://www.legrog.org/jeux/cops). Pour peu on y verrai une invention des reptiliens mais je n'en dirai pas plus de peur de représailles, ou de voir mes droits de douanne personnels vers les Etats-Unis augmenter. Quoiqu'avec *Drill baby , drill*, peut-être que les reptiliens y passeront aussi. Oh ... wait. Mais tout est calculé ! C'est ça leur grand plan, s'assurer que les reptiliens ne controlent pas le monde ! Tout est clair maintenant ! Quoique c'est tout de même un gros pari puisqu'il y a de fortes probabilités que les reptiliens aient le sang froid. On est toujours pas plus avancé. Sur ce, l'interface système virtuelle de `GDAL` (VSI : Virtual System Interface). +C'est ici le moment magique où votre schéma interne de pensée va être modifié. Désormais quand vous vous poserez la question "comment je fais pour *insert random bidule* ?", vous vous direz alors "en fait je vais le faire avec gdal, ça sera plus simple". On peut ainsi donc dire que `GDAL` est vecteur (ah ah ah !) de manipulations [mémétiques](https://fr.wikipedia.org/wiki/M%C3%A9m%C3%A9tique). C'est qu'on en apprend des trucs dans les [vieux bouquins de jdr](https://www.legrog.org/jeux/cops). Sur ce, l'interface système virtuelle de `GDAL` (VSI : Virtual System Interface). `GDAL` possède une mécanique ([le VSI](https://gdal.org/en/stable/programs/index.html#virtual-system-interface-vsi-commands)) qui lui permet de lire des fichiers *à travers* un autre média (fichier zip, serveur http...). From a62d881f3e20b2882ba876ca768b22528b73325f Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Sat, 14 Mar 2026 16:37:09 +0100 Subject: [PATCH 04/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 6bb2313d08..d52d671a22 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -79,7 +79,7 @@ gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"htt On pourrait imaginer combiner les commandes précédantes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). -Si certain.nes d'entre vous ont envie de remplacer le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédetection, laissez bien sur toutes les options en *par défaut* et ne vous embêtez pas avec car si elles sont là, c'est bien sur qu'elles ne servent à rien. D'ailleurs on vous ne les montrera même pas dans notre superbe interface graphique pour "ne pas afficher des interfaces barbares à l'utilisateur et que le bouton *suivant* soit bien visible". +Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster math`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. ```sh gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif From ab87170f8654e1b298c72fb502b8e9ba6dee14bf Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 14 Mar 2026 15:38:59 +0000 Subject: [PATCH 05/19] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automatiq?= =?UTF-8?q?ues=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index d52d671a22..1d7c43171b 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -79,7 +79,7 @@ gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"htt On pourrait imaginer combiner les commandes précédantes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). -Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster math`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. +Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster math`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. ```sh gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif From 6781f76acf395548628753f6d6bdc155d4b37db9 Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:22:25 +0100 Subject: [PATCH 06/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 1d7c43171b..7b86199aab 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -7,7 +7,7 @@ categories: - article comments: true date: 2026-03-23 -description: "Principes et fonctionnement de la nouvelle CLI GDAL. " +description: "Principes et fonctionnement de la nouvelle CLI GDAL." icon: simple/gdal image: license: default From 06960e642f251f3941a40469d35268f21844fc8b Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:25:57 +0100 Subject: [PATCH 07/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 7b86199aab..a042dafcaf 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -191,7 +191,7 @@ gdal vsi copy /vsizip//vsicurl/https://www.ign.fr/bd_topo/my_file.zip/my_layer_i `GDAL` possède même des pilotes `S3` ou `AWS` pour son système VSI ! -Enfin, on peut aussi profiter de `GDAL` pour générer des `SOzip` (Seek-Optimized Zips), grace au programme `sozip`. Des zips faits pour qu'on cherche vite à l'intérieur. C'est bizarre, ça parait être le penchant de "lire une donnée dans un zip sans avoir à le dezipper" vu juste haut dessus ;). +Enfin, on peut aussi profiter de `GDAL` pour générer des `SOzip` (Seek-Optimized Zips), grace au programme `sozip`. Des zips faits pour qu'on cherche vite à l'intérieur. C'est bizarre, ça parait être le penchant de "lire une donnée dans un zip sans avoir à le dézipper" vu juste haut dessus ;). ```sh gdal vsi sozip create my_gpkg.zip my.gpkg From 4ed392fbc69e88819ac6c1e58e1f992382f51738 Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:26:12 +0100 Subject: [PATCH 08/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index a042dafcaf..837ec90789 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -35,7 +35,7 @@ On ne le répétera jamais assez mais sans GDAL, presque rien n'existerait dans Maitriser `GDAL`, c'est être capable de remplacer des ~~interfaces graphiques~~ logiciels coutant des dizaines de milliers d'euros. -Cependant, historiquement les programmes `GDAL` étaient ... comment dire ... peut normés entre eux, par exemple `gdal_translate` (le programme servant aux conversions raster) demandait ses fichiers d'entrée / sortie dans cet ordre : in -> out alors qu'`ogr2ogr` (le programme servant aux conversions vecteur) lui demandait : out -> in. De plus les plus gros programmes, ceux qui "faisaient tout" on été supprimés et remplacés des équivalents plus spécifiques. +Cependant, historiquement les programmes `GDAL` étaient ... comment dire ... peut normés entre eux, par exemple `gdal_translate` (le programme servant aux conversions raster) demandait ses fichiers d'entrée / sortie dans cet ordre : in -> out alors qu'`ogr2ogr` (le programme servant aux conversions vecteur) lui demandait : out -> in. De plus les plus gros programmes, ceux qui "faisaient tout" on été supprimés et remplacés par des équivalents plus spécifiques. Pas de panique, les anciennes commandes restent disponibles pour garder vos scripts existants en vie. ## Principes de la nouvelle CLI From f69ac7149f44dd1eff34329ae72afb87e91a61ab Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:26:41 +0100 Subject: [PATCH 09/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 837ec90789..a27d3c8f2c 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -107,7 +107,7 @@ gdal raster hillshade --zfactor=2 in.tif out.tif ## Les pipelines -Une autre nouveauté fait partie de cette mise à jour : Les pipelines [vecteurs](https://gdal.org/en/stable/programs/gdal_vector_pipeline.html#gdal-vector-pipeline) ou [raster](https://gdal.org/en/stable/programs/gdal_raster_pipeline.html#gdal-raster-pipeline). +Une autre nouveauté fait partie de cette mise à jour : les pipelines [vecteurs](https://gdal.org/en/stable/programs/gdal_vector_pipeline.html#gdal-vector-pipeline) ou [raster](https://gdal.org/en/stable/programs/gdal_raster_pipeline.html#gdal-raster-pipeline). Ils permettent d'appeler un programme nommé `pipeline` qui va enchainer les traitements de plusieurs programmes `GDAL` avant d'écrire le fichier de sortie. Les commandes utilisant un pipeline doivent toutes commencer par `read` et se terminer par `write`, les différentes opérations étant séparées par des `!`. From 05d5660ebd335ccd5647d7c474a1bfebeff20c8c Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:27:17 +0100 Subject: [PATCH 10/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index a27d3c8f2c..c8871dd957 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -85,7 +85,7 @@ Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indi gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif ``` -On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.cloudnativegeo.org/cloud-optimized-geotiffs/intro.html). Voir cet [article de geotribu par Nicolas Rochard](https://geotribu.fr/articles/2025/2025-02-11_bonnes-pratiques-generation-raster-cog-avec-gdal/) pour les options qui vont bien utilisées par la région Hauts de France. +On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.cloudnativegeo.org/cloud-optimized-geotiffs/intro.html). Voir cet [article de geotribu par Nicolas Rochard](https://geotribu.fr/articles/2025/2025-02-11_bonnes-pratiques-generation-raster-cog-avec-gdal/) pour les options qui sont bien utilisées par la région Hauts de France. ```sh gdal raster convert --ouput-format=COG -co COMPRESS=ZSTD -co BIGTIFF=IF_NEEDED in.tif out.tif From 268fbe7f7bb5c58782b84983d24f9de207c10162 Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Mon, 16 Mar 2026 17:28:16 +0100 Subject: [PATCH 11/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index c8871dd957..c28c8d2782 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -85,7 +85,7 @@ Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indi gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif ``` -On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.cloudnativegeo.org/cloud-optimized-geotiffs/intro.html). Voir cet [article de geotribu par Nicolas Rochard](https://geotribu.fr/articles/2025/2025-02-11_bonnes-pratiques-generation-raster-cog-avec-gdal/) pour les options qui sont bien utilisées par la région Hauts de France. +On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.cloudnativegeo.org/cloud-optimized-geotiffs/intro.html). Voir cet [article de geotribu par Nicolas Rochard](https://geotribu.fr/articles/2025/2025-02-11_bonnes-pratiques-generation-raster-cog-avec-gdal/) pour les options qui sont utilisées par la région Hauts de France. ```sh gdal raster convert --ouput-format=COG -co COMPRESS=ZSTD -co BIGTIFF=IF_NEEDED in.tif out.tif From 0dc10addec087899a14c7941fdecb813ad76442d Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:41:19 +0100 Subject: [PATCH 12/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index c28c8d2782..74fa2c80d7 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -155,7 +155,7 @@ Cette manière de faire est certes plus verbeuse qu'un classique : ogr2ogr --t_srs=EPSG:2154 --sql "WHERE mon_champ='valeur'" --option_3 --option_4 --option_n -lco option1_diver=YES -lco option2_diver=NO out.gpkg in.shp ``` -Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` n'est que la description d'une succession de traitements sur la couche source, et peut être appelé comme n'importe qu'elle autre entrée par n'importe quel programme de `GDAL` et non écrit sur un fichier qui devrait être mis à jour à chaque modification de la couche d'origine comme dans ce dernier exemple. +Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` n'est que la description d'une succession de traitements sur la couche source, et peut être appelé comme n'importe quelle autre entrée par n'importe quel programme de `GDAL` et non écrit sur un fichier qui devrait être mis à jour à chaque modification de la couche d'origine comme dans ce dernier exemple. ## L'Interface Système Virtuelle (VSI) From d97775fb3a8c9031e29b095a1885d3b8cbdee64d Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:47:19 +0100 Subject: [PATCH 13/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 74fa2c80d7..3401d30826 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -14,6 +14,9 @@ license: default robots: index, follow tags: - GDAL + - json + - CLI + - raster --- # La nouvelle CLI GDAL 3.11 From 4e845ecc461d1f6ee53dedb4179762b86aa2cc2b Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:47:26 +0100 Subject: [PATCH 14/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 3401d30826..eeb5adedc0 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -158,7 +158,7 @@ Cette manière de faire est certes plus verbeuse qu'un classique : ogr2ogr --t_srs=EPSG:2154 --sql "WHERE mon_champ='valeur'" --option_3 --option_4 --option_n -lco option1_diver=YES -lco option2_diver=NO out.gpkg in.shp ``` -Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` n'est que la description d'une succession de traitements sur la couche source, et peut être appelé comme n'importe quelle autre entrée par n'importe quel programme de `GDAL` et non écrit sur un fichier qui devrait être mis à jour à chaque modification de la couche d'origine comme dans ce dernier exemple. +Mais bien plus claire, et surtout réemployable puisque le fichier `gdalg.json` n'est que la description d'une succession de traitements sur la couche source, et peut être appelé comme n'importe quelle autre entrée par n'importe quel programme de `GDAL` . ## L'Interface Système Virtuelle (VSI) From a5b33918a2dc61f6797529b1eb18119388987b02 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:48:21 +0000 Subject: [PATCH 15/19] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automatiq?= =?UTF-8?q?ues=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index eeb5adedc0..9ec629c4a4 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -14,7 +14,7 @@ license: default robots: index, follow tags: - GDAL - - json + - json - CLI - raster --- From 466e03aa9b21217a4897f4b501e548840e659b2f Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:52:27 +0100 Subject: [PATCH 16/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 9ec629c4a4..7a49639f6d 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -74,7 +74,7 @@ gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin Une différence par rapport à l'ancienne CLI est l'obligation de l'utilisation de l'option `append`, même pour créer une table non existante. -On peut même copier le contenu d'un flux wms vers un geopackage. +On peut même copier le contenu d'un flux wfs vers un geopackage. ```sh gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"https://data.geopf.fr/wfs/ows?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=BDTOPO_V3:arrondissement_municipal" bdtopo.gpkg From 7714b114ba80b2b87a0055c3be1c88292340c1cd Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:54:50 +0100 Subject: [PATCH 17/19] Update content/articles/2026/2026-03-23_nouvelle_cli_gdal.md Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- content/articles/2026/2026-03-23_nouvelle_cli_gdal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 7a49639f6d..55eb789b5a 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -82,7 +82,7 @@ gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"htt On pourrait imaginer combiner les commandes précédantes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). -Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster math`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. +Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster calc`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. ```sh gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif From ef296aa83602a08303a543e5ac2ac6136c716b45 Mon Sep 17 00:00:00 2001 From: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> Date: Wed, 15 Apr 2026 11:28:07 +0200 Subject: [PATCH 18/19] Review suggestion de simple maj MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ne reste plus que les commentaires nécessitant modification du corps de texte en lui mêmê Co-authored-by: Guilhem Allaman <40383801+gounux@users.noreply.github.com> Co-authored-by: Even Rouault Signed-off-by: thomas-szczurek <121474664+thomas-szczurek@users.noreply.github.com> --- .../2026/2026-03-23_nouvelle_cli_gdal.md | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md index 55eb789b5a..8e6bc97d26 100644 --- a/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md +++ b/content/articles/2026/2026-03-23_nouvelle_cli_gdal.md @@ -28,15 +28,17 @@ tags: Depuis sa version 3.11 (et son intégration à QGIS 3.44), la CLI (Command Line Interface / Interface en Ligne de Commande) de `GDAL` a été entièrement revue. On va ici présenter cette nouvelle interface et brosser un aperçu de ce qu'on peut réaliser avec `GDAL` dans un court article. *Nota bene : COURT on a dit.* -## Gdal qu'est ce que c'est ? +## GDAL qu'est ce que c'est ? -`GDAL` est une librairie de programmes open source en C/C++ permettant de réaliser des convertion de fichier vecteur/rasteur, et des traitements raster. Cette librairie se cache derrière à peu près tous les logiciels contenant "SIG" dans leur description. Quand vous demandez à QGIS d'enregistrer votre fichier `geopackage` en `flatgeobuf` ou en `geoparquet` pour les amateur.trices de formats modernes mais étranges (perso je ne travaille plus qu'en [DuckLake](https://duckdb.org/2025/05/27/ducklake.html) Spatial pour embêter mes collègues), en réalité QGIS *demande* à GDAL de réaliser l'opération. +![Logo GDAL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal.png){: .img-thumbnail-left} -Les anciens noms des programmes dédiés au vecteur font référence à ogr, une ancienne librairie depuis *absorbée* par GDAL. +[`GDAL`](https://gdal.org/en/stable/) est une librairie de programmes open source en C/C++ permettant de réaliser des convertion de fichier vecteur/rasteur, et des traitements raster. Cette librairie se cache derrière à peu près tous les logiciels contenant "SIG" dans leur description. Quand vous demandez à QGIS d'enregistrer votre fichier `geopackage` en `flatgeobuf` ou en `geoparquet` pour les amateur.trices de formats modernes mais étranges (perso je ne travaille plus qu'en [DuckLake](https://duckdb.org/2025/05/27/ducklake.html) Spatial pour embêter mes collègues), en réalité QGIS *demande* à GDAL de réaliser l'opération. + +Les anciens noms des programmes dédiés au vecteur font référence à `ogr`, une ancienne librairie depuis *absorbée* par GDAL. On ne le répétera jamais assez mais sans GDAL, presque rien n'existerait dans le monde de la géomatique, qu'elle soit libre ou propriétaire. A tout ces égards, cette librairie fait partie de la sainte trinité [gdal](https://gdal.org/en/stable/)/[geos](https://libgeos.org/)/[proj](https://proj.org/en/stable/). -Maitriser `GDAL`, c'est être capable de remplacer des ~~interfaces graphiques~~ logiciels coutant des dizaines de milliers d'euros. +Maîtriser `GDAL`, c'est être capable de remplacer des ~~interfaces graphiques~~ logiciels coûtant des dizaines de milliers d'euros. Cependant, historiquement les programmes `GDAL` étaient ... comment dire ... peut normés entre eux, par exemple `gdal_translate` (le programme servant aux conversions raster) demandait ses fichiers d'entrée / sortie dans cet ordre : in -> out alors qu'`ogr2ogr` (le programme servant aux conversions vecteur) lui demandait : out -> in. De plus les plus gros programmes, ceux qui "faisaient tout" on été supprimés et remplacés par des équivalents plus spécifiques. Pas de panique, les anciennes commandes restent disponibles pour garder vos scripts existants en vie. @@ -64,9 +66,9 @@ Exemple : gdal raster convert --overwrite in.jp2 out.tif ``` -Commande pour convertir un fichier in.jp2 au format geotiff en autorisant l'écrasement d'un potentiel fichier out.tif déjà existant. +Commande pour convertir un fichier `in.jp2` au format geotiff en autorisant l'écrasement d'un potentiel fichier `out.tif` déjà existant. -Pour du vecteur on peut aussi importer un shape (beurk) dans une base Postgis +Pour du vecteur on peut aussi importer un shape (beurk) dans une base PostGIS : ```sh gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin123' schemas='my_schema'" @@ -74,15 +76,15 @@ gdal vector convert --append in.shp PG:"dbname='my_db' user='me' password='admin Une différence par rapport à l'ancienne CLI est l'obligation de l'utilisation de l'option `append`, même pour créer une table non existante. -On peut même copier le contenu d'un flux wfs vers un geopackage. +On peut même copier le contenu d'un flux WFS vers un geopackage : ```sh gdal vector convert --overwrite --output-layer=arrondissement_municipal WFS:"https://data.geopf.fr/wfs/ows?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=BDTOPO_V3:arrondissement_municipal" bdtopo.gpkg ``` -On pourrait imaginer combiner les commandes précédantes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). +On pourrait imaginer combiner les commandes précédentes pour importer le contenu d'un flux WFS vers une base PostgreSQL, mais pour ça on préfèrera utiliser le [Foreign Data Wrapper OGR](https://github.com/pramsey/pgsql-ogr-fdw) car Saint Paul Ramsey veille sur nous. (rejoignez moi dans mon culte esothérique secret vénérant la sainte trinité gdal/geos/proj, représentée par Saint Paul Ramsey, Saint Even Rouault et la Sainte papesse Anita Graser. Venez, on est pas méchant, ça vous coute juste une licence ESRI pour l'adhésion mais on pourra en discuter après la première réunion). -Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster calc`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options en *par défaut*. +Si certain.nes d'entre vous ont envie de faire comme le bouton "calculer un indice radiométrique" d'un quelconque logiciel de télédétection, on peut appliquer des formules avec `gdal raster calc`. On assigne les bandes/rasters à des lettres qu'on appellera ensuite dans la formule. Laissez bien sur toutes les options *par défaut* : ```sh gdal raster calc -i "A=ir.tif" -i "B=r.tif" --calc "(A-B)/(A+B)" -o out.tif @@ -94,7 +96,7 @@ On peut s'en servir pour créer des [Cloud Optimized Geotiff](https://guide.clou gdal raster convert --ouput-format=COG -co COMPRESS=ZSTD -co BIGTIFF=IF_NEEDED in.tif out.tif ``` -Avec les `-co` qui servent à passer les options spécifiques au driver de sortie. On retrouvera ces différents drivers [ici](https://gdal.org/en/stable/drivers/raster/index.html) pour le raster, et [ici](https://gdal.org/en/stable/drivers/vector/index.html) pour le vecteur. +Avec les `--co` qui servent à passer les options spécifiques au driver de sortie. On retrouvera ces différents drivers [ici](https://gdal.org/en/stable/drivers/raster/index.html) pour le raster, et [ici](https://gdal.org/en/stable/drivers/vector/index.html) pour le vecteur. Ou bien simplement pour demander des informations sur une couche : @@ -113,7 +115,8 @@ gdal raster hillshade --zfactor=2 in.tif out.tif Une autre nouveauté fait partie de cette mise à jour : les pipelines [vecteurs](https://gdal.org/en/stable/programs/gdal_vector_pipeline.html#gdal-vector-pipeline) ou [raster](https://gdal.org/en/stable/programs/gdal_raster_pipeline.html#gdal-raster-pipeline). Ils permettent d'appeler un programme nommé `pipeline` qui va enchainer les traitements de plusieurs programmes `GDAL` avant d'écrire le fichier de sortie. -Les commandes utilisant un pipeline doivent toutes commencer par `read` et se terminer par `write`, les différentes opérations étant séparées par des `!`. +!!! warning + Les commandes utilisant un pipeline doivent toutes commencer par `read` et se terminer par `write`, les différentes opérations étant séparées par des `!`. ```mermaid flowchart @@ -144,9 +147,9 @@ Qu'on lira ensuite avec : gdal vector info in_epsg_2154.gdalg.json ``` -(exemple issu de la documentation officielle de GDAL) +(L'exemple ci-dessus est issu de la documentation officielle de GDAL) -On peut ainsi imaginer un pipeline qui reprojetera une couche, avant de la filtrer sur la valeur d'un de ses attributs. +On peut ainsi imaginer un pipeline qui reprojetera une couche, avant de la filtrer sur la valeur d'un de ses attributs : ```sh gdal vector pipeline ! read in.gpkg ! reproject --dst-crs=EPSG:2154 ! filter --where "mon_champ = 'valeur'" ! write out.gdalg.json @@ -197,14 +200,14 @@ gdal vsi copy /vsizip//vsicurl/https://www.ign.fr/bd_topo/my_file.zip/my_layer_i Enfin, on peut aussi profiter de `GDAL` pour générer des `SOzip` (Seek-Optimized Zips), grace au programme `sozip`. Des zips faits pour qu'on cherche vite à l'intérieur. C'est bizarre, ça parait être le penchant de "lire une donnée dans un zip sans avoir à le dézipper" vu juste haut dessus ;). ```sh -gdal vsi sozip create my_gpkg.zip my.gpkg +gdal vsi sozip create my.gpkg my.gpkg.zip ``` ## l'API Python -Enfin, toute cette modernisation impacte evidemment les API, et celle qui nous interesse ici, l'[API Python](https://gdal.org/en/stable/programs/gdal_cli_from_python.html). +Enfin, toute cette modernisation impacte évidemment les API, et celle qui nous interesse ici, l'[API Python](https://gdal.org/en/stable/programs/gdal_cli_from_python.html). -On rappelle que de façon curieuse, l'api Python de GDAL s'installe et s'importe comme ceci : +On rappelle que de façon curieuse, l'API Python de GDAL s'installe et s'importe comme ceci : ```sh pip install gdal @@ -224,7 +227,7 @@ Ensuite, c'est simple, ils s'appellent comme ceci : gdal.Run("vector"/"raster"/"vsi", "programme", option(s), input="in.tif", output="out.tif) ``` -exemple pour importer un fichier csv dans une base Postgres (plutôt que d'utiliser `COPY` de postgres, plus fastidieux): +Exemple pour importer un fichier csv dans une base PostgreSQL (plutôt que d'utiliser `COPY` de postgres, plus fastidieux): ```python gdal.Run("vector", "convert", append=True, format="PostgreSQL", lco="LAUNDER=NO", input=my_file.csv, output="PG:dbname='insee' schemas='wip' user='me' password='admin123'") From 80232005f16df1a39a4ad821455226888c5444c8 Mon Sep 17 00:00:00 2001 From: Julien <1596222+Guts@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:13:56 +0200 Subject: [PATCH 19/19] fix(author): correction syntaxe compte Linkedin de la page de @thomas-szczurek Signed-off-by: Julien <1596222+Guts@users.noreply.github.com> --- content/team/thomas-szczurek-gayant.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/team/thomas-szczurek-gayant.md b/content/team/thomas-szczurek-gayant.md index 3b62c3d117..6e257d8d97 100644 --- a/content/team/thomas-szczurek-gayant.md +++ b/content/team/thomas-szczurek-gayant.md @@ -8,7 +8,7 @@ hide: social_accounts: github: thomas-szczurek gitlab: - linkedin: https://www.linkedin.com/in/thomas-szczurek-gayant-7406b5257/ + linkedin: thomas-szczurek-gayant-7406b5257 mail: mastodon: instance: mapstodon.space