16.1. Lesson: Configuration de PostGIS

Configurer les fonctions PostGIS vous permettra d’accéder à des fonctions spatiales depuis PostgreSQL.

Objectif de cette leçon : Installer des fonctions spatiales et démontrer brièvement leurs effets.

Note

Nous assumerons que vous utilisez PostGIS version 2.1 ou ultérieure dans cet exercice. L’installation et la configuration de la base de données sont différentes pour les versions plus anciennes. Néanmoins, le reste du module devrait fonctionner. Consultez la documentation pour votre plate-forme pour vous aider à installer et configurer votre base de données.

16.1.1. Installation sous Ubuntu

Postgis s’installe facilement avec apt

$ sudo apt install postgresql
$ sudo apt install postgis

C’est aussi simple que ça…

Note

Les versions exactes qui seront installées dépendent de votre version d’Ubuntu et des dépôts que vous avez configurés. Après installation, vous pouvez vérifier la version de PostGIS avec la requête select PostGIS_full_version(); avec psql ou un autre outil.

Pour installer une version spécifique (par exemple, PostgreSQL 13 et PostGIS 3), vous pouvez utiliser les commandes suivantes.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Installation sous windows

L’installation sur Windows peut se faire à l’aide de binaires, selon la procédure normale d’installation sous Windows, c’est-à-dire avec navigation dans des fenêtres graphiques.

Visitez d’abord la page de téléchargement. Puis suivez ce guide.

Vous trouverez plus d’informations sur l’installation sous Windows sur le site web PostGIS.

16.1.3. Installation sur les autres plate-formes

Le site web de téléchargement de PostGIS contient des informations sur l’installation sur d’autres plateformes, y compris macOS, et sur d’autres distributions Linux

16.1.4. Configurer les bases de données pour utiliser postgis

Lorsque PostGis est installé, vous allez devoir configurer votre base de données pour utiliser les extensions. Si vous avez installé PostGis en version > 2.0, il suffit d’envoyer la commande suivante avec psql en utilisant l’adresse de la base de donnée de l’exercice précédant.

$ psql -d address -c "CREATE EXTENSION postgis;"

Note

En fonction de votre version, vous pouvez trouver plus d’instructions sur l’activation de la cartouche spatiale à https://postgis.net/docs/postgis_administration.html#create_spatial_db.

16.1.5. Quelles-sont les fonctions installées par PostGIS ?

PostGIS peut être considéré comme une collection de fonctions internes à la baes de données qui étendent les fonctionnalités de base de PostgreSQL de manière à ce qu’il puisse gérer des données spatiales. par “gérer”, on entend stocker, récupérer, requêter et manipuler. Pour y parvenir, un certain nombre de fonctions sont installées dans la base de données.

Notre base de données PostgreSQL address est maintenant géospatiale, grâce à PostGIS. Nous allons nous plonger un peut plus dans les détails dans les prochains paragraphes mais faisons d’abord une petite introduction. Disons qu’on souhaite créer un point à partir d’un texte. Nous utilisons d’abord la commande psql pour trouver les fonctions relatives au point. Si vous n’est pas déjà connecté à la base de données address, faîtes-le puis lancez:

\df *point*

C’est la commande que nous recherchons : st_pointfromtext. Pour parcourir la liste, utilisez la flèche vers le bas, puis appuyez sur Q pour revenir au shell psql

Essayez d’exécuter cette commande:

select st_pointfromtext('POINT(1 1)');

Résultat:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Trois choses à noter:

  • Nous avons défini un point à la position 1,1 (dans le SRID EPSG:4326) en utilisant POINT(1 1),

  • Nous avons lancé une commande sql non pas sur une table mais uniquement sur des données insérées depuis le prompt SQL,

  • La ligne de résultat n’est pas très significative.

La ligne de résultat est au format OGC dénommé “Well Known Binary” (WKB). Ce format sera détaillé dans la prochaine section.

Pour obtenir les résultats sous forme de texte, nous pouvons faire un balayage rapide de la liste des fonctions qui retournent du texte:

\df *text

La requête que nous cherchons est st_astext. Combinons-la à notre précédente requête:

select st_astext(st_pointfromtext('POINT(1 1)'));

Résultat:

 st_astext
------------
  POINT(1 1)
  (1 row)

Ici nous avons inséré la chaîne POINT(1,1), nous l’avons transformée en point en utilisant la fonction st_pointfromtext() et nous l’avons reconvertie sous forme lisible par l’humain avec la fonction st_astext() qui nous redonne notre chaîne originelle.

Un dernier exemple avant d’aller plus dans les détails de l’utilisation de PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

Qu’avons-nous fait ? Nous avons créé un tampon de 1 degré autour de notre point et nous avons renvoyé le résultat sous forme de texte.

16.1.6. Système de référence spatiale

En plus des fonctions PostGIS, l’extension contient une collection de définitions de systèmes de référence spatiale (SRS) telles que définies par l’European Petroleum Survey Group (EPSG). Ces définitions sont utilisées pour les opérations qui impliquent des conversion de systèmes de coordonnées de référence (SCR).

Nous pouvons inspecter ces définitions de SRS dans notre base de données car elles sont stockées dans des tables normales.

D’abord, jetons un oeil sur le schéma de la table par la commande suivante dans le prompt psql:

\d spatial_ref_sys

Le résultat devrait prendre la forme suivante:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

Vous pouvez utiliser les requêtes SQL standards (que nous avons étudiées dans les sections d’introduction) pour visualiser et manipuler la table même si ce n’est pas une bonne idée de mettre à jour ou de supprimer des enregistrements sans comprendre ce qu’on fait.

Un SRID intéressant est l’EPSG:4326 qui correspond au système de latitude/longitude dans l’éllipsoïde WGS 84. Etudions-là:

select * from spatial_ref_sys where srid=4326;

Résultat:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

Le champ srtext correspond à la définition de la projection au format Well Known Text (c’est le même qui est utilisés dans les fichiers .prj des fichiers Shape).

16.1.7. In Conclusion

Les fonctions PostGIS sont maintenant installées dans votre copie de PostgreSQL. Nous pouvez maintenant utiliser les fonctions spatiales de PostGIS.

16.1.8. What’s Next?

Dans la prochaine leçon, nous allons étudier comment les entités spatiales sont représentées dans la base de données.