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

Vraiment, c’est facile...

Note

En fonction de la version d’Ubuntu que vous utilisez et des dépôts que vous avez configurés, les commandes qui suivent installeront PostGIS 1.5 ou 2.x. Vous pouvez trouver la version installée en lançant la requête select PostGIS_full_version(); sous psql ou un autre outil.

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-get update
$ sudo apt-get 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.

Visiter en premier lieu la page de téléchargements.

Puis suivez ce guide.

Vous pouvez trouver plus d’information 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 PostGIS dispose d’information sur l’installation des autres plate-formes, incluant MacOSX et les autres distributions GNU/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

Si vous utilisez PostGIS 1.5 et une version de PostgreSQL inférieure à la 9.1, vous devrez utiliser d’autres étapes pour installer les extensions PostGIS à la base de données. Consultez la documentation PostGIS pour plus d’information sur ce sujet. Il existe également quelques instructions supplémentaires dans la version précédente de ce manuel.

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 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*

Il s’agit de la commande que nous cherchons: st_pointfromtext. Pour vous déplacer dans la liste, utilisez la flèche du base et 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.