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 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 postgis
$ sudo apt install postgresql-9.1-postgis

C’est aussi simple que ça…

Note

Depending on which version of Ubuntu you are using, and which repositories you have configured, these commands will install PostGIS 1.5, or 2.x. You can find the version installed by issuing a select PostGIS_full_version(); query with psql or another tool.

Pour installer la dernière version de PostGIS, vous pouvez utiliser les commandes suivantes.

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt update
$ sudo apt install postgresql-9.1-postgis-nightly

16.1.2. Installation sous windows

L’installation sous Windows est un peu plus compliquée, sans être difficile. Notez que vous devez être en ligne pour installer le pack postgis.

First Visit the download page.

Puis suivez ce guide.

More information about installing on Windows can be found on the PostGIS website.

16.1.3. Installation sur les autres plate-formes

The PostGIS website download has information about installing on other platforms including macOS and on other linux distributions

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

If you are using PostGIS 1.5 and a version of PostgreSQL lower than 9.1, you will need to follow a different set of steps in order to install the postgis extensions for your database. Please consult the PostGIS Documentation for instructions on how to do this.

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*

This is the command we’re looking for: st_pointfromtext. To page through the list, use the down arrow, then press Q to quit back to the psql shell.

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.