ABase spatiale, champ géométrique, insertions et affichage
AACréer une base PostGIS
Création d’une connexion locale sous pgAdmin
Ouvrir l’application pgAdmin
en le recherchant si nécessaire via le menu démarrer de Windows puis rechercher
Si la connexion local
n’existe pas, il faut la créer (Fichier
→ Ajouter un serveur
)
Double-cliquer sur la connexion local
(ou localhost
) pour activer la connexion
Cliquer du bouton droit sur Bases de données
puis Ajouter une base de données
Nommez la base d’après votre nom (minuscule sans accent) et vérifiez que UTF8
est bien le codage défini puis cliquez sur OK
La nouvelle base doit maintenant apparaître dans la liste des bases de données.
Cliquez dessus puis sur l’icône SQL
dans la barre d’outils
Supprimer le texte déjà présent (Ctrl+A
puis suppr
)
Ceci est la fenêtre permettant d’exécuter des requêtes SQL sur la base et de voir le résultat. Ce sera notre outil de travail principal, à côté de QGIS.
La base de données fraîchement créée est entièrement vierge et PostGIS n’est pas actif. PostGIS est une extension
qu’il faut activer pour la base
Exécuter l’instruction suivante (copier-coller puis faire F5
)
CREATE EXTENSION "postgis"
S’il n’y a pas d’erreur visible en bas de la fenêtre, c’est qu’en principe PostGIS a bien été activé. Pour le vérifier, exécutez :
SELECT postgis_full_version()
QUESTIONAAALe résultat retourné par l’appel à la fonction postgis_full_version()
ABCréer une table spatiale
Avec pgAdmin, créer une table (en dépliant avec les +
: Schémas
, public
puis clic droit sur Tables
puis Ajouter une table
) :
nommée testgeom
champ id
de type serial
(pour auto-incrémentation de l’identifiant)
champ geom
de type geometry
champ nom
de type character varying
(qui est le type texte habituel, limité par défaut à 255 caractères)
clef primaire sur le champ id
(indispensable pour pouvoir manipuler avec pgAdmin, QGIS et autres)
QUESTIONABALa requête CREATE TABLE
pour obtenir le SQL sur pgAdmin, se rendre sur l’onglet SQL
. Cliquer OK
revient à copier-coller ce SQL en tant que requête et l’exécuter
Créer dans la table les 4 enregistrements correspondants aux 4 exemples de Wikipédia, titrés Geometry primitives (2D)
, en copiant-collant l’exemple WKT en tant que valeur du champ geom
(par exemple, le premier enregistrement concernera POINT (30 10)
). Le nom
peut rester vide.
Faire F5
pour rafraîchir : le WKT fraîchement entré disparaît au profit de son équivalent en WKB (binaire avec des 0 et 1)
Le format WKB (Well-Known Binary) est le format optimal pour la machine : c’est dans ce format que les géométries sont stockées. Mais de multiples fonctions sont fournies par PostGIS pour créer la géométrie à partir d’autres formats, à commencer par la conversion implicite du WKT en WKB que nous venons de voir.
Nous allons maintenant "exporter" (représenter) les géométries dans d’autres formats textuels. Exécuter d’abord :
SELECT "id", "geom" FROM "testgeom"
Note :
les guillemets ne sont pas obligatoires lorsque les noms (de champ, de table, etc.) sont en minuscule
QUESTIONACALe résultat de la requête
Puis exécuter :
SELECT "id", ST_AsText("geom") FROM "testgeom"
QUESTIONACBLe résultat de cette requête ST_AsText
QUESTIONACCEn remplaçant ST_AsText par ST_AsEWKB
QUESTIONACDEn remplaçant ST_AsText par ST_AsEWKT
QUESTIONACEEn remplaçant ST_AsText par ST_AsGeoJSON
Le point faible de pgAdmin avec la géo est l’absence de représentation cartographique : nous ne voyons que des chiffres. Le SIG libre QGIS va donc nous servir en complément.
La plupart des SIG du marché (libres et propriétaires) peuvent s’interfacer avec PostgreSQL/PostGIS. Le SIG est un client qui communique avec le serveur PostgreSQL et qui traite avec les types PostGIS. Il arrive que ce lien se fasse par l’intermédiaire d’un composant comme GDAL/OGR
.
Création d’une connexion sous QGIS
Ouvrir l’application QGIS
(démarrer
→ rechercherqgis
puis choisir QuantumGIS Desktop
, dernière version)
Faire Couche
→ Ajouter une couche PostGIS
Cliquer sur Nouveau
sous Connexions
(pour ajouter une connexion)
définir nom
=local
, Hôte
=localhost
, Port
=5432
(par défaut), Base de données
=(le nom que vous aviez choisi), Nom d’utilisateur
=postgres
, Mot de passe
=postgres
cliquer sur tester la connexion
pour vérifier puis OK
si c’est la connexion fonctionne
cliquer sur Connecter
: la table doit apparaître dans la liste en dessous
Nous remarquons que la table a été dédoublée en triple exemplaires. La table PostgreSQL n’a pas changé mais QGIS ne sait traiter que des géométries de même type pour une couche donnée : point, ligne ou polygone. Comme nous avons mixé les 3 types dans la table testgeom
, QGIS doit créer 3 couches différentes pour les gérer.
sélectionner (en cliquant simplement) sur chacun des 3 exemplaires de la table (point, ligne, polygone) puis Ajouter
comme référentiel spatial, choisir le Lambert93 (EPSG:2154)
Vous devriez voir les géométries sur le canvas QGIS.