Vous êtes sur la page 1sur 20

Guide de démarrage rapide Postgis

PostGIS ajoute des capacités spatiales à la base de données relationnelle PostgreSQL. Il étend
PostgreSQL pour stocker, requête et manipuler des données spatiales. Dans ce guide de
démarrage rapide, nous allons utiliser « PostgreSQL » lors de la description des fonctions de
base de données générale et « PostGIS » pour décrire les fonctionnalités spatiales
supplémentaires fournies par PostGIS.

Ce guide de démarrage rapide décrit comment :

 Créer et interroger une base de données spatiale à partir de la ligne de


commande et du client graphique QGIS .
 Gérer les données à partir du client pgAdmin.

Contents

 Architecture client-serveur
 Création d’une base de données spatiale
 Création d’une table spatiale à l’aide de SQL
 Requêtes simples
 Requêtes spatiales
 Cartographie
 Import de données spatiales dans la base de données
 Get to know pgAdmin
 Executing a SQL query from pgAdmin
 Découvrez les Foreign Data Wrappers (FDW)
 Connectez-vous à une source de données OGR distante via ogr_fdw
 Choses à essayer
 Ensuite ?

Architecture client-serveur
PostgreSQL, comme de nombreuses bases de données, fonctionne comme un serveur dans un
système client-serveur. Le client fait une demande au serveur et obtient en retour une réponse.
Il s’agit de la même façon dont fonctionne Internet - votre navigateur est un client et un
serveur web renvoie la page web. Avec PostgreSQL, les demandes sont en langage SQL et la
réponse est généralement une table de données de la base de données.

Il n’y a rien pour empêcher le serveur d’être sur le même ordinateur que le client, et cela vous
permet d’utiliser PostgreSQL sur une seule machine. Votre client se connecte au serveur via
la connexion de réseau interne « loopback » et n’est pas visible aux autres ordinateurs sauf si
vous configurez pour l’être.

Création d’une base de données spatiale


Les clients en ligne de commande s’exécutent à partir d’une fenêtre d’émulateur de terminal.
Démarrez un émulateur terminal (LXTerminal actuellement) à partir du menu Applications
dans la section Accessoires. Cela vous donne une invite de commande shell Unix. Saisissez :

psql -V

et appuyez sur entrée pour afficher le numéro de version de PostgreSQL.

Un seul serveur PostgreSQL vous permet d’organiser votre travail en arrangeant des bases de
données distinctes. Chaque base de données est un régime indépendant, avec ses propres
tables, ses vues, ses utilisateurs et ainsi de suite. Lorsque vous vous connectez à un serveur
PostgreSQL vous devez spécifier une base de données.

Vous pouvez obtenir une liste des bases de données sur le serveur avec la :

psql -l

commande. Vous devriez voir plusieurs bases de données utilisées par certains des projets sur
le système. Nous allons en créer une nouvelle pour ce guide de démarrage rapide.

Astuce

La liste utilise un téléavertisseur unix standard - Appuyez sur espace pour la page suivante, b
pour revenir en arrière, q pour quitter, kbd:h pour l’aide.

PostgreSQL nous fournit un programme utilitaire pour la création de bases de données,


createdb. Nous devons créer une base de données avant d’ajouter les extensions de PostGIS.
Nous appellerons notre base de données demo. La commande est alors :

createdb demo

Astuce

Vous pouvez généralement obtenir de l’aide pour les outils de ligne de commande en utilisant
une option --help.

Si vous exécutez maintenant psql -l vous devriez voir votre base de données des demo dans
la liste. Nous n’avons pas encore ajouté de l’extension PostGIS, mais dans la section suivante,
vous apprendrez comment.

Vous pouvez créer des bases de données PostGIS en utilisant le langage SQL. Tout d’abord,
nous allons supprimer la base de données que nous venons de créer à l’aide de la commande
dropdb, puis utilisez la commande psql pour obtenir un interpréteur de commandes SQL :

dropdb demo
psql -d postgres

Cela se branche sur le système de base de données appelée postgres. Maintenant, entrez le
code SQL pour créer une nouvelle base de données :

postgres=# CREATE DATABASE demo;


Maintenant changez votre connexion de la base de données postgres à la nouvelle base de
données demo. À l’avenir, vous pouvez connecter à elle directement avec psql -d demo,
mais voici une belle façon de faire depuis la ligne de commande psql :

postgres=# \c demo

Astuce

Saississez CTRL + C si l’invite de commandes psql apparaît toujours après avoir appuyé sur
Entrée. Il efface votre entrée et recommence. Il est probablement en attente pour la fermeture
d’une apostrophe, d’un point-virgule, ou quelque chose.

Vous devriez voir un message d’information, et l’invite changent pour indiquer que vous êtes
maintenant connecté à la base de données demo.

Ensuite, ajoutez l’extension PostGIS :

demo=# create extension postgis;

Pour vérifier que vous avez postgis installé, exécutez la requête suivante :

demo=# SELECT postgis_version();

postgis_version
---------------------------------------
2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

PostGIS installe plusieurs fonctions, une table et plusieurs vues

Tapez \dt pour énumérer les tables de la base de données. Vous devriez voir quelque chose
comme ceci :

demo=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-------
public | spatial_ref_sys | table | user
(1 row)

La table spatial_ref_sys est utilisée par PostGIS pour la conversion entre les différents
systèmes de référence spatiale . La table spatial_ref_sys stocke des informations sur les
systèmes de référence spatiale valides, et nous pouvons utiliser certains commandes SQL pour
jeter un coup d’oeil :

demo=# SELECT srid, auth_name, proj4text FROM spatial_ref_sys LIMIT 10;

srid | auth_name | proj4text


------+-----------+--------------------------------------
3819 | EPSG | +proj=longlat +ellps=bessel +towgs...
3821 | EPSG | +proj=longlat +ellps=aust_SA +no_d...
3824 | EPSG | +proj=longlat +ellps=GRS80 +towgs8...
3889 | EPSG | +proj=longlat +ellps=GRS80 +towgs8...
3906 | EPSG | +proj=longlat +ellps=bessel +no_de...
4001 | EPSG | +proj=longlat +ellps=airy +no_defs...
4002 | EPSG | +proj=longlat +a=6377340.189 +b=63...
4003 | EPSG | +proj=longlat +ellps=aust_SA +no_d...
4004 | EPSG | +proj=longlat +ellps=bessel +no_de...
4005 | EPSG | +proj=longlat +a=6377492.018 +b=63...
(10 rows)

Cela confirme que nous avons une base de données avec des capacités géospatiales.

En plus de cette table, vous trouverez plusieurs vues créées lorsque vous activez postgis dans
votre base de données.

Tapez \dv pour répertorier les vues dans la base de données. Vous devriez voir quelque chose
comme ceci :

demo=# \dv
List of
relations
Schema | Name | Type | Owner
--------+-------------------+------+----------
public | geography_columns | view | postgres
public | geometry_columns | view | postgres
public | raster_columns | view | postgres
public | raster_overviews | view | postgres
(4 rows)

PostGIS prend en charge plusieurs types de données spatiales :

geometry - est un type de données qui stocke les données sous forme de vecteurs dessinés sur
une surface plane

geography - est un type de données qui stocke les données sous forme de vecteurs dessinés
sur une surface sphérique

raster - est un type de données qui stocke des données dans une matrice n-dimensionnelle, où
chaque position (pixel) représente

une zone de l’espace et chaque bande (dimension) a une valeur pour chaque
pixel d’espace.

Les vues geometry_columns, geography_columns et raster_columns ont la tâche de dire à


PostGIS quelles tables ont colonnes geometry, geography et raster PostGIS .

Les vues d’ensemble sont des tables de résolution inférieures pour des données raster.
raster_overviews répertorie ces tables et leurs colonnes raster et chaque table en est une
vue d’ensemble. Les tables de vue d’ensemble raster sont utilisées par des outils tels que
QGIS pour fournir des résolution inférieures de données raster pour un chargement plus
rapide.

Le type PostGIS geometry est le premier et toujours le plus populaire utilisé par des
utilisateurs de PostGIS. Nous allons concentrer notre attention sur ce type.
Création d’une table spatiale à l’aide de SQL
Maintenant nous avons une base de données spatiale, nous pouvons faire certaines tables
spatiales.

Tout d’abord, nous créons une table ordinaire de base de données pour stocker des données de
villes. Cette table comporte trois champs - un pour un ID numérique identifiant la ville, un
pour le nom de la ville et l’autre pour la colonne de géométrie :

demo=# CREATE TABLE cities ( id int4 primary key, name varchar(50), geom
geometry(POINT,4326) );

Classiquement cette colonne de géométrie est nommée geom (l’ancienne convention de


PostGIS était the_geom). Cela indique à PostGIS, quel type de géométrie a chaque entité
(points, lignes, polygones, etc.), combien de dimensions (dans ce cas 2, si il y avait 3 ou 4
dimensions, nous utiliserions POINTZ, POINTM ou POINTZM) et le système de référence
spatiale. Nous avons utilisé le CRS EPSG:4326 pour nos villes.

Maintenant si vous regardez la table cities vous devriez voir la nouvelle colonne et être
informé que la table ne contient actuellement aucune ligne.

demo=# SELECT * from cities;


id | name | geom
----+------+----------
(0 rows)

Pour ajouter des lignes à la table, nous utilisons certaines instructions SQL. Pour obtenir la
géométrie dans la géométrie de la colonne, nous utilisons la fonction PostGIS
ST_GeomFromText pour convertir d’un format de texte qui renvoit les coordonnées et un id de
référence spatial du système :

demo=# INSERT INTO cities (id, geom, name) VALUES


(1,ST_GeomFromText('POINT(-0.1257 51.508)',4326),'London, England');
demo=# INSERT INTO cities (id, geom, name) VALUES
(2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London, Ontario');
demo=# INSERT INTO cities (id, geom, name) VALUES
(3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');

Astuce

Utilisez les touches flèches pour rappeler et modifier les lignes de commande.

Comme vous pouvez voir que cela devient fastidieux de plus en plus rapidement.
Heureusement il y a des autres moyens d’obtenir des données dans des tables de PostGIS qui
sont beaucoup plus faciles. Mais maintenant, nous avons trois villes dans notre base de
données, et nous pouvons travailler avec cela.

Requêtes simples
Toutes les opérations habituelles de SQL peuvent être appliquées pour sélectionner des
données dans une table PostGIS :
demo=# SELECT * FROM cities;
id | name | geom
----+-----------------+----------------------------------------------------
1 | London, England | 0101000020E6100000BBB88D06F016C0BF1B2FDD2406C14940
2 | London, Ontario | 0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D4540
3 | East London,SA | 0101000020E610000040AB064060E93B4059FAD005F58140C0
(3 rows)

Cela nous donne une version hexadécimale codée des coordonnées, peu utile pour les
humains.

Si vous voulez jeter un oeil à votre géométrie au format WKT (Well Known Text), encore une
fois, vous pouvez utiliser les fonctions ST_AsText(geom) ou ST_AsEwkt(geom). Vous
pouvez également utiliser ST_X(geom), ST_Y(geom) pour obtenir la valeur numérique des
coordonnées :

demo=# SELECT id, ST_AsText(geom), ST_AsEwkt(geom), ST_X(geom), ST_Y(geom)


FROM cities;
id | st_astext | st_asewkt
| st_x | st_y
----+------------------------------
+----------------------------------------+-------------+-----------
1 | POINT(-0.1257 51.508) | SRID=4326;POINT(-0.1257 51.508)
| -0.1257 | 51.508
2 | POINT(-81.233 42.983) | SRID=4326;POINT(-81.233 42.983)
| -81.233 | 42.983
3 | POINT(27.91162491 -33.01529) | SRID=4326;POINT(27.91162491 -33.01529)
| 27.91162491 | -33.01529
(3 rows)

Requêtes spatiales
PostGIS ajoute beaucoup de fonctions avec des fonctionnalités spatiales à PostgreSQL. Nous
avons déjà vu ST_GeomFromText qui convertit en WKT en géométrie. La plupart d’entre eux
commencent par ST (pour type spatial) et est répertoriée dans une section de la documentation
de PostGIS. Nous allons maintenant utiliser une pour répondre à une question pratique - dans
quelle mesure ces trois Londres sont elles éloignées les unes des autres, en mètres, en
supposant une Terre sphérique ?

demo=# SELECT p1.name,p2.name,ST_DistanceSphere(p1.geom,p2.geom) FROM


cities AS p1, cities AS p2 WHERE p1.id > p2.id;
name | name | st_distancesphere
-----------------+-----------------+--------------------
London, Ontario | London, England | 5875766.85191657
East London,SA | London, England | 9789646.96784908
East London,SA | London, Ontario | 13892160.9525778
(3 rows)

Cela nous donne la distance en mètres entre chaque paire de villes. Remarquez comment la
partie ‘WHERE’ de la ligne nous empêche d’avoir des distances d’une ville à elle-même (qui
serait à zéro) ou des distance inverses à celles dans la table ci-dessous (Londres, en
Angleterre, à London (Ontario) est la même distance que London, en Ontario, à Londres
Angleterre). Essayez la requête sans la partie ‘WHERE’ et voyez ce qui se passe.
Nous pouvons également calculer la distance à l’aide d’un sphéroïde en utilisant une fonction
différente et en précisant le nom de sphéroïde, le demi-grand axe et les paramètres
d’aplatissement inverses :

demo=# SELECT p1.name,p2.name,ST_DistanceSpheroid(


p1.geom,p2.geom, 'SPHEROID["GRS_1980",6378137,298.257222]'
)
FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;
name | name | st_distancespheroid
-----------------+-----------------+----------------------
London, Ontario | London, England | 5892413.63776489
East London,SA | London, England | 9756842.65711931
East London,SA | London, Ontario | 13884149.4140698
(3 rows)

Pour quitter la ligne de commande PostgreSQL, entrez :

\q

Vous êtes maintenant de retour à la console du système :

user@osgeolive:~$

Cartographie
Pour produire une carte à partir de données PostGIS, vous avez besoin d’un client qui peut
obtenir les données. La plupart des programmes open source SIG bureautiques peuvent faire
cela - gvSIG, QGIS, uDig, par exemple. Maintenant, nous allons vous montrer comment faire
une carte avec QGIS.

Démarrez QGIS dans le menu Desktop GIS et choisissez Add PostGIS layers dans le menu
Couches. Les paramètres pour la connexion aux données Natural Earth dans PostGIS sont
déjà définies dans la liste déroulante des connexions. Vous pouvez définir ici les nouvelles
connexions serveur et enregistrer les paramètres d’un rappel facile. Cliquez sur le menu
déroulant de connexions et choisissez la Natural Earth. Cliquez sur Edit si vous voulez voir
ce que ces paramètres sont Natural Earth, ou appuyez simplement sur Connect pour
continuer :
Vous obtiendrez maintenant une liste des tables spatiales dans la base de données :
Choisissez la table ne_10m_lakes et appuyez sur Add en bas (et non pas Load‘ en haut - qui se
charge des paramètres de connexion de base de données), et la couche doit être chargée dans
QGIS :

Vous devriez maintenant voir une carte des lacs. QGIS ne sait pas que ceux sont des lacs,
donc ils peuvent ne pas être de couleur couleur bleue pour vous - utilisez la documentation de
QGIS pour trouver comment changer cela. Zoomez sur un célèbre groupe de lacs au Canada.

Import de données spatiales dans la base de données


La plupart des outils de bureau OSGeo ont des fonctions pour importer des données spatiales
à partir d’autres formats (f.e. ESRI Shape) dans la base de données. Encore une fois, nous
allons utiliser QGIS pour montrer cela.

Importing shapefiles to QGIS can be done via the handy QGIS Database Manager. You find
the manager in the menu. Go to Database -> DB Manager.

Dépliez l’élément Postgis, puis l’élément NaturalEarth. Puis, il se connectera à la base


NaturalEarth. Laisser le mot de passe vide si demandé Dans l’élément public, il y a la liste des
couches fournies par la base de données. Vous verrez la fenêtre principale de gestion. Sur la
gauche, vous pouvez sélectionner les tables de la base de données et utilisez les onglets sur la
droite pour en savoir à leur sujet. L’onglet Aperçu vous montre une petite carte.
Nous allons maintenant utiliser le gestionnaire DB pour importer un shapefile dans la base de
données. Nous utiliserons les données de syndrome de mort subite du nourrisson (SMSN) de
Caroline du Nord qui est incluses avec l’un des paquets supplémentaires du langage de
statistiques R.

From the Table menu choose the Import layer/file option. Hit the ... button and browse
to the sids.shp shapefile in the R directory. (located in /home/user/data/vector/R/shapes):
Laissez tout le reste comme il est et cliquez sur Load
Let the Coordinate Reference System Selector default to (WGS 84 EPSG:4326) and hit OK.
The shapefile should be imported into PostGIS with no errors. Close the DB Manager and get
back to the main QGIS window.

Maintenant charger les données du SIDS sur la carte à l’aide de l’option ‘Add PostGIS
Layer’. Avec un peu de réorganisation des couches et un peu de colorisation, vous devriez
être en mesure de produire une carte choroplèthe des mort subite du nourrisson (champs sid74
ou sid79) en Caroline du Nord :
Get to know pgAdmin
You can use the graphical database client pgAdmin from the Databases menu to query and
modify your database non-spatially. This is the official client for PostgreSQL.

pgAdmin lets you use SQL to manipulate your data tables. You can find and launch pgAdmin
from the Databases folder, existing on the OSGeoLive Desktop.
Enter the master password user.

Here, you have the option of creating a new connection to a PostgreSQL server, or connecting
to an existing server. In this case, we are going to connect to the predefined localhost
server.

Après la connexion soit établie, vous pouvez voir la liste des bases de données qui existent
déjà dans le système.
Le « X » rouge sur l’image de la plupart des bases de données, indique que vous n’avez pas
été encore connecté à l’une d’entre elles (vous êtes connecté uniquement à la base de données
par défaut postgres). À ce stade, vous n’êtes capable de voir que les bases de données
existantes sur le système. Vous pouvez vous connecter, en double-cliquant sur le nom d’une
base de données. Faites-le pour la base de données natural_earth2.

You can see now that the red X disappeared and a “>” appeared on the left. By pressing it a
tree is going to appear, displaying the contents of the database.

Accédez à la sous-arborescence schemas et développez-le. Par la suite étendre le schéma


public . En naviguant et en élargissant les Tables, vous pouvez voir tous les tableaux
contenus dans ce schéma.
Executing a SQL query from pgAdmin
pgAdmin, offers the capability of executing queries to a relational database.

To perform a query on the database, you have to press the Query Tool button from the main
toolbar (the one at the left with the database symbol).

Nous allons trouver le taux de SIDS des naissances pour chaque ville en 1974. En outre, nous
allons pour trier les résultats, basé sur le taux calculé. Pour ce faire, nous avons besoin
exécuter la requête suivante (à exécuter depuis l’éditeur de texte de la fenêtre SQL) :

select name, 1000*sid74/bir74 as rate from sids order by rate;

Afterwards, you should press the arrow button, pointing to the right (Execute).
Découvrez les Foreign Data Wrappers (FDW)
À partir de votre base de données, vous pouvez accéder à des objets distants comme des tables
provenant d’autres bases de données PostgreSQL ou vous connecter à des bases de données
distantes comme Oracle, MySQL, MS SQL ou CouchDB. Vous pouvez également vous
connecter via ODBC, vous connecter à des fichiers CSV, Geospatial Data et même sur
Twitter.

Vous trouverez une liste des différents FDW à:

https://wiki.postgresql.org/wiki/Foreign_data_wrappers

Voyons comment ça marche ! La façon la plus simple est de se connecter à une autre base de
données PostgreSQL.

Voici les étapes :

Chargez d’abord l’extension du Foreign Data Wrapper que vous souhaitez utiliser. Pour une
connexion à une autre base de données PostgreSQL, vous avez besoin de``postgres_fdw``

CREATE EXTENSION postgres_fdw;

Créer un serveur étranger qui vous indique où trouver la source de données à connecter

CREATE SERVER fdw_pg_server_osm_local


FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1', port '5432', dbname 'osm_local');

Définir l’utilisateur à utiliser lorsque vous vous connectez au serveur étranger

CREATE USER MAPPING FOR user


SERVER fdw_pg_server_osm_local
OPTIONS (user 'user', password 'user');

Maintenant, vous pouvez créer une table étrangère.

IMPORT FOREIGN SCHEMA public


LIMIT TO (planet_osm_polygon, planet_osm_point) -- or EXCEPT
FROM SERVER fdw_pg_server_osm_local
INTO public;

Trouvez les nouvelles tables dans votre base de données et jetez un coup d’œil aux données
d’une table étrangère.

Select * from planet_osm_polygon limit 10;

Connectez-vous à une source de données OGR distante via


ogr_fdw
L’extension ogr_fdw permet la connexion vers plusieurs formats de données géospatiales
comme KML, GeoPackage, WFS, GeoJSON, GPX, GML et plus encore.

Read more about ogr_fdw:

 Repository: https://github.com/pramsey/pgsql-ogr-fdw
 New and improved: http://blog.cleverelephant.ca/2016/04/ogr-fdw-update.html

Installez l’extension ogr_fdw dans votre base de données.

Dans le type d’invite de la base de données :

CREATE EXTENSION ogr_fdw;

Inspectez les formats pris en charge :

Ouvrez un terminal et recherchez ogr_fdw_info :

locate ogr_fdw_info
/usr/lib/postgresql/10/bin/ogr_fdw_info -f

Les résultats devraient ressembler à ceux-ci:

Supported Formats:
-> "OGR_GRASS" (readonly)
-> "PCIDSK" (read/write)
-> "netCDF" (read/write)
-> "JP2OpenJPEG" (readonly)
-> "PDF" (read/write)
-> "MBTiles" (read/write)
-> "EEDA" (readonly)
-> "ESRI Shapefile" (read/write)
-> "MapInfo File" (read/write)
.... many more

Créer un FDW vers un WFS

Démarrez Geoserver via Geospatial ‣ Web Services ‣ GeoServer ‣ Start GeoServer

 Ouvrez GeoServer http://localhost:8082/geoserver/web/


 GeoServer WFS GetCapabilities http://localhost:8082/geoserver/ows?
service=wfs&version=2.0.0&request=GetCapabilities
 GeoServer WFS DescribeFeatureType pour topp:states
http://localhost:8082/geoserver/ows?
service=wfs&version=2.0.0&request=DescribeFeatureType&typename=topp:states
 GeoServer WFS GetFeature topp:states http://localhost:8082/geoserver/ows?
service=wfs&version=2.0.0&request=GetFeature&typename=topp:states

Créer un serveur étranger qui fait référence au WFS que vous souhaitez connecter

CREATE SERVER fdw_ogr_server_wfs


FOREIGN DATA WRAPPER ogr_fdw
OPTIONS ( datasource 'WFS:http://localhost:8082/geoserver/ows', format
'WFS' );

Importez toutes les feature_types WFS en tant que tables étrangères avec une seule
commande.

Après l’importation, vous verrez plusieurs nouvelles tables étrangères dans votre schéma.

IMPORT FOREIGN SCHEMA ogr_all


FROM SERVER fdw_ogr_server_wfs
INTO public;

Inspecter la table de données étrangères topp_states :

SELECT * FROM topp_states WHERE state_name = 'Minnesota';

Choses à essayer
Voici quelques défis supplémentaires que vous pouvez essayer :

 Essayez quelques fonctions spatiales supplméentaire comme st_buffer(geom),


st_transform(geom,25831), st_x(geom) - vous trouverez une documentation
complète à l’adresse: http://postgis.net/documentation/
 Exporter vos tables vers des shapefiles avec pgsql2shp en ligne de commande.
 Essayez ogr2ogr en ligne de commande pour importer/exporter des données dans
votre base de données.
 Essayez d’importer des données avec shp2pgsql en ligne de commande dans votre
base de données.
 Essayer de calculer un chemin à l’aide de fonction de routage pgRouting.

Ensuite ?
C’est seulement la première étape sur la route de l’utilisation de PostGIS. Il y a beaucoup plus
de fonctionnalités que vous pouvez essayer.

 Site du projet PostGIS - http://postgis.net


 Documentation de PostGIS - http://postgis.net/documentation/

Vous aimerez peut-être aussi