Académique Documents
Professionnel Documents
Culture Documents
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.
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.
psql -V
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.
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=# \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.
Pour vérifier que vous avez postgis installé, exécutez la requête suivante :
postgis_version
---------------------------------------
2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)
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 :
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)
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 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) );
Maintenant si vous regardez la table cities vous devriez voir la nouvelle colonne et être
informé que la table ne contient actuellement aucune ligne.
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 :
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 :
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 ?
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 :
\q
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.
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.
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.
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) :
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.
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.
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``
Créer un serveur étranger qui vous indique où trouver la source de données à connecter
Trouvez les nouvelles tables dans votre base de données et jetez un coup d’œil aux données
d’une table étrangère.
Repository: https://github.com/pramsey/pgsql-ogr-fdw
New and improved: http://blog.cleverelephant.ca/2016/04/ogr-fdw-update.html
locate ogr_fdw_info
/usr/lib/postgresql/10/bin/ogr_fdw_info -f
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 serveur étranger qui fait référence au WFS que vous souhaitez connecter
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.
Choses à essayer
Voici quelques défis supplémentaires que vous pouvez essayer :
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.