Suite de l’article (Débuter avec Postgres/Postgis ), nous aborderons dans celui-ci une introduction à l’administration des bases Postgresql/postgis, le chargement d’un shapefile et la connexion et chargement de la couche Postgis à partir de QGis.
La manière la plus pratique d’administrer des bases de données PostgreSQL est d’utiliser l’interface graphique pgAdmin4.
Cet outil s’installe automatiquement lors de l’installation de PostgreSQL. Vous pouvez le lancer à partir de la barre de programmes:
Pour les objectifs de cet article, charger un shapefile en tant que couche Postgis dans votre nouvelle base de données, vous n’avez pas réellement besoin d’opérations d’administration. Mais c’est plus facile de comprendre le fonctionnement en suivant les modifications de la base.
Mais rassurez-vous, vous n’aurez pour l’instant rien à créer. Nous avons demandé au moment de l’installation de Postgis la création d’une base de données exemple. C’est cette base que nous utiliserons dans la suite de l’article.
pgAdmin4vous permet d’administrer une base de données PostgreSQL/Postgis sans vous soucier de la syntaxe SQL correspondante.
Quand vous lancez l’application, le premier écran vous permet de vous connecter au serveur et base de données souhaités.
Le clic-droit sur un élément ouvre le menu contextuel qui vous propose les différentes opérations possibles pour cet élément.
Au moment de l’installation nous avons créé automatiquement deux bases:
- une base de données PostgreSQL classique, appelée postgres
- une base de données PostgreSQL/Postgis, appelée postgis_24_sample
C’est cette deuxième que nous allons utiliser pour charger un shapefile. Mais auparavant, profitons pour jeter un coup d’œil et voir quelles sont les différences entre ces deux bases.
Si vous regardez les extensions de chacune d’elles, vous constaterez que la base Postgis possède toute une série d’extensions spécifiques qui permettent de gérer les informations spatiales. C’est la présence de ces extensions qui rend une base PostgreSQL en une base Postgres/Postgis.
Quand vous créez une base de données, vous devez ajouter ces extensions pour la rendre utilisable avec Postgis.
En cliquant droit sur extensions, puis Create -> Extension, vous aurez la liste des extensions possibles.
Ajouter un fichier shapefile dans une base Postgis.
Tout d’abord, qu’est-ce que ça veut dire ajouter un fichier shapefile à une base de données Postgis? Un « fichier » shapefile est en réalité un groupe de fichiers avec le même nom et différentes extensions. Par exemple:
L’ensemble de ces fichiers constitue le « shapefile » ouessantCLC_L93. Un fichier contient les géométries, un autre les données attributaires, etc.
Les informations contenues dans les fichiers, seront chargées en tant que Table de la base de données. Une seule table contiendra l’ensemble des informations dispersées dans les fichiers shapefile.
Vous voyez dans l’image précédente à quel niveau les données seront stockées, et vous remarquerez que le niveau « Tables » est un sous-niveau d’un « Schéma » qui est un sous-niveau de « Base de données ». Vous devrez donc indiquer au moment du chargement du shapefile quelle base de données et, éventuellement, quel schéma doivent être utilisés.
Dans notre base d’exemple il y a un schéma « Public » qui a, contrairement aux autres schémas présents, la totalité des fonctions (1454). Nous laisserons ce concept pour plus tard. Retenons seulement que l’on ajoute des fonctions à un schéma au fur et à mesure des besoins. Dans notre exemple, toutes les fonctions étant déjà chargées, ça nous évite ces opérations supplémentaires.
Nous pouvons charger le shapefile avec le programme « Postgis 2.0 Shapefile and DBF Loader ».
Vous pouvez le lancer en tant qu’application autonome, à partir de la barre de programmes Windows :
A la différence de pgAdmin III, vous ne trouverez plus de bouton dans pgAdmin 4 permettant de lancer cette application.
La fenêtre de l’application s’ouvre:
Vous devez commencer par établir la connexion avec votre base de données
Cliquez sur « Add File » et naviguez pour sélectionner le fichier shapefile à charger. Cliquez sur Ouvrir, les informations du fichier à charger s’affichent dans l’Import List
Voilà! C’est fait. Vous pouvez voir maintenant sur votre console pgAdmin 4 (après avoir actualisé l’affichage) votre table importée
Renseigner le système de coordonnées
Peut-être vous avez remarqué dans la fenêtre de l’Import List qu le SRID (système de coordonnées) est à zéro. Ceci indique que le programme de chargement n’a pas pu interpréter correctement le fichier .prj du shapefile. Dans notre cas il devrait être 2154 (code EPSG du Lambert 93/RGF93).
Nous allons donc mettre à jour l’information de la colonne géométrie de la table que nous avons créée.
Ouvrez la fenêtre SQL de pgAdmin 4:
Dans la fenêtre Editer SQL tapez la requête suivante:
SELECT UpdateGeometrySRID(‘ouessantclc_l93′,’geom’,2154);
Changez seulement le nom de la table (ouessantclc_l93) par le nom de votre table et le code du SRID (2154) par le code EPSG de votre système de coordonnées.
Exécutez la requête en ckiquant sur le bouton Exécuter (indiqué par la flèche bleue sur l’image).
Vous aurez un message indiquant que la requête s’est bien exécutée:
Charger la couche Postgis dans QGis
Pour nous assurer que tout s’est passé correctement, ouvrez QGis et sélectionnez le bouton de chargement d’une couche Postgis
La fenêtre de connexion s’ouvre. La première fois que vous vous connectez à une base de données il faut configurer sa connexion.
Cliquez sur « Nouveau« , puis renseignez les informations de connexion
Vous avez tout ce qui est nécessaire dans la fenêtre de la console pgAdmin 4. Au niveau du Serveur si vous cliquez droit sur « PostgreSQL 10 » -> Properties , vous aurez toutes les informations nécessaires : Hôte et Port. Le Nom n’est utilisé que pour afficher le menu déroulant des connexions. Vous êtes libre de rentrer n’importe quel nom. Le Service vous le laissez en blanc.
La base de données où vous avez chargé le shapefile est « postgis_24_sample ».
Vous devez rentrer le nom d’utilisateur : on utilisera pour l’instant « postgres » et le mot de passe que vous avez défini pour cet utilisateur au moment de l’installation.
Cliquez sur « Tester la connexion » pour vous assurer que toutes les informations sont bien entrées, puis sur OK.
La nouvelle connexion est ajoutée à la liste. Cliquez sur « Connecter« . Vous aurez les différents Schémas disponibles et dans chacun la liste de tables spatiales:
Sélectionnez la ligne correspondante à la couche chargée du schéma Public et cliquez sur le bouton Ajouter.
La fenêtre de définition du système de coordonnées s’affiche. Sélectionnez le SRC des donnés (dans cet exemple Lambert 93)
La couche est chargée dans QGis.
Vous pouvez maintenant travailler sur cette couche comme sur toute autre couche dont vous aviez l’habitude (affichage, symbologie, mise à jour géométrique ou attributaire,…)
*
Bonjour,
Tout d’abord merci pour votre article très bien structuré. Cependant, je bute au début lors de l’import d’un shapefile dans PostGIS, j’ai une erreur du type dbf file (.dbf) can not be opened.
Est-ce que vous avez une idée de où cela peut provenir ? et comment je peux résoudre l’erreur ?
Merci,
Eva
Etes-vous sûre de cliquer sur le fichier avec l’extension .shp et pas sur le fichier avec l’extension .dbf?
Oui je sélectionne bien le .shp. Mon problème venait d’une directory trop longue. J’ai copié tous les fichiers (.shp, .dbf, et tous les autres fichiers) mais maintenant j’ai un autre problème, c’est séquence d’octets invalide pour l’encodage « UTF8 » . Comment je sais quel est l’encodage de mes fichiers. Je suis partie d’un fichier .csv et je l’ai ensuite importer sous ArcGIS Pro et j’ai généré un .shp. Maintenant j’essaye d’importer ce fichier dans ma base de données. Je suis débutante donc je galère un peu. Heureusement qu’il y a des pages d’aide comme celle-ci =)
Si votre problème vient de l’encodage de votre shapefile je vous plains déjà!
Pour commencer, est-ce que parmi les différents fichiers de votre shapefile il y a un avec l’extension .cpg?
Si oui, ouvrez-le avec notepad, vous verrez l’encodage utilisé.
Si non, de toutes façons commencer par vérifier que dans le noms de colonnes de votre table attributaire vous n’utilisez pas des caractères accentués ou symboles spéciaux.
Encore merci pour votre réponse. Oui je dispose bien d’un fichier avec l’extension .cpg et quand je l’ouvre avec notepad++ c’est écrit juste UTF-8.
Alors pourquoi ça ne marche pas ?? =(
Je vais devenir folle et votre première phrase me fait très peur ! =(
continuez avc l’étape 2: regardez si les noms des colonnes ne contiennent rien d’autre que des caractères ASCII
Désolé, de poster un message de nouveau mais j’ai essayé de changer la place de tout mon fichier shape mais j’ai une autre erreur cette fois-ci : »Failed in pgui_exec(): ERREUR: séquence d’octets invalide pour l’encodage « UTF8 » : 0xe3 0xa9 0x72″.
Est-ce qu’il faut que je change l’encodage dans option et lequel dois-je choisir ?
Merci,
Eva
Avant de continuer, vérifiez que votre shape a été bien copié: ouvrez-le avec QGis ou tout logiciel sig. En principe on ne touche pas au encodage…
Merci beaucoup pour votre aide. J’ai enregistré mon fichier .csv en UTF8 comma separated puis je l’ai inséré dans ArcGIS Pro et j’ai généré de nouveau un fichier .shp dans un dossier avec une directory petite (C/Donnees). J’ai eu l’espoir que ça allait marcher mais rien à y faire ça ne fonctionne pas !
Quand j’insère mon .shp dans PostGIS j’ai de nouveau la même erreur : « séquence d’octets invalide pour l’encodage « UTF8 » : 0xe3 0xa9 0x72 ».
Je vais persévérer et y arriver !
Bonjour, merci bien pour ce tutoriel !
J’ai suivi la première partie de votre tutoriel (installation de postgresql et postgis), mais quand je lance pgadmin4, il affiche : « The application server could not be contacted »
J’avais déjà installé pgadmin4 auparavant, mais l’avais désinstallée pour suivre votre tutoriel comprenant l’installation de postgis.
Je me dis qu’il y a peut-être un lien mais je ne vois pas de « résidu » de la première installation.
Auriez-vous une idée ?
Merci d’avance,
Videz le répertoire C:\Users\votre nom\AppData\Roaming\pgAdmin
ça devrait remettre de l’ordre
C’était ça ! Merci bien
Bonjour
Le fait de videz le répertoire C:\Users\votre nom\AppData\Roaming\pgAdmin résout le problème temporairement. En effet, non seulement le problème revient régulièrement mais en plus dans certains cas les résultats de requêtes ne sont pas pris en compte (la requête a fonctionné mais lors d’un appel ultérieure de la table, les modifications ne sont pas prises en compte).
Est ce que vous auriez une idée??
merci beaucoup
Quelle version de postgresql et de pgadmin 4 avez-vous?
on a postgresql 9.4 sur un serveur distant et pgadmin 4 v3.0
votre problème peut venir de pas mal de raisons très différentes.J’ai recensé toute une série de « solutions » tout au long de cette dernière année:
– supprimer les anciennes versions de pgadmin du disque
– exécuter PgAdmin en mode administrateur
– vérifier que seul le service postgres 9.4 est en cours (pas d’anciens services)
– ajouter C:\PostgreSQL\Version\bin dans le path système
– vérifier que les variables système PATH et PYTHONPATH pointent vers la bonne version de Python
– mettre la variable SERVER_MODE à False dans config_distro.py (voir ce lien pour les fichiers config de pgadmin https://www.pgadmin.org/docs/pgadmin4/dev/desktop_deployment.html)
Merci pour ce tutorial très clair! Je vois qu’on peut facilement importer des couches shp depuis QGIS dans la base de donnée PostGIS juste par un simple glisser-déposer, il y a-t-il des risques à le faire par rapport à l’utilisation de l’outil import/export manager ?
Je n’ai jamais eu de souci en le faisant.Par contre, quel qu’elle soit la méthode utilisée, je vous conseille vivement de valider les géométries une fois le shp importé dans Postgresql. Là, c’est tout le contraire, je n’ai presque jamais importé un shp qui n’ai pas des géométries invalides.
Bonjour,
En suivant le tuto pas à pas, je n’arrive pas à renseigner le système de coordonnées dans pgadmin4. Après avoir lancé la requête il me sort le message d’erreur suivant :
ERROR: ERREUR: la colonne « ‘aep_canalisation′ » n’existe pas
Vous savez d’où ça peut provenir ?
Merci d’avance !
La fonction prend trois paramètres: le nom de la table, le nom du champ géométrie et le code EPSG du src.
Si « aep_canalisation » est le nom de votre table, il se peut qu’il ne soit pas comme cela qu’il est renseigné dans votre base de données. Dans ce cas, sélectionnez votre table dans la barre de gauche et cliquez sur SQL dans la deuxième ligne de menu(entre Properties et Statistics). vous verrez la ligne CREATE TABLE et le nom de votre table tel qu’il est stocké dans votre base. Copiez-collez ce nom dans votre fonction.
Merci pour votre réponse mais le nom « aep_canalisation » est bien celui renseigné dans ma base de données. J’ai importé cette table dans le schéma « public », est-ce que cela a un rapport ?
essayez avec public.aep_canalisations (qui doit être ce qui apparait dans le sql de création de la table)
Cette fois il me dit « entrée manquante de la clause FROM pour la table » ‘public »
Voilà ce que c’est de répondre sans être devant l’ordi!
Mea culpa. Si ma mémoire est bonne, pour rentrer le nom du schéma dans la fonction il faut le faire séparément
SELECT UpdateGeometrySRID(‘public’,’aep_canalisation’,’geom’,2154);
J’espère que c’est ça…
Toujours pas mais en renseignant directement le code (3948 dans mon cas) dans la colonne SRID de PostGIS 3 Shapefile and DBF Loader Exporter ça semble fonctionner.
Bonjour,
merci pour votre tuto/article, je débute et je vous avoue que je ne comprends pas grand chose.
Je ne comprends pas comment récupérer des données de cadastre sur data.gouv pour les mettre sur pgadmin4 et ensuite les récupérer sur QGIS. J’essaie de me fier comme je peux à votre article, tout en essayant de comprendre.
J’ai téléchargé et installé pgadmin4, cependant je ne vois aucune base que vous avez mentionné:
– une base de données PostgreSQL classique, appelée postgres
– une base de données PostgreSQL/Postgis, appelée postgis_24_sample
peut on les créer après l’installation et comment ?
Les seules choses qui apparaissent, sont :
-> servers (1)
—> postgres SQL 12
—– > bases de données (2)
———–> postgres :
——————-> catalogues / extensions/ langages/ schémas etc.
—– > roles de connexion / groupe
—– > tablespaces
merci d’avance pour votre aide et temps précieux…..
bien cordialement Lise DENOY
et je n’arrive pas à ouvrir post gis, soit ca me redemande de l’installer, soit il ouvre le docs, le manuel.. je ne sais plus quoi faire…
et pourtant j’ai suivi le guide de votre installation ….
Avez vous suivi AVANT cet article https://www.sigterritoires.fr/index.php/debuter-avec-postgrespostgis/?
Je ne vois pas dans votre message l’installation de postgresql.L’avez-vous installé? Pgadmin sert à se connecter à n’importe quelle base postgres, qu’elle soit sur votre machine ou distante. L’installation ne demande donc pas comme préalable l’installation de postgres. Mais tou le reste de votre message me paraît indiquer que vous n’avez pas de base popstgres sur votre machine et que postgresql n’est pas installé.
J’avais bien suivi vos tutos, j’avais installé postgres en suivant toutes vos indications, il était bien installé, j’avais ouvert ensuite pgadmin 4, l’interface était un peu différente: les bases de données étaient différentes et je n’avais pas toutes les extensions.
Du coup j’ai créé une base de donné et j’ai essayé d’ouvrir postgis pour faire un test et essayé de récupérer un fichier SHP, mais il ne fonctionnait pas.
J’ai dû mal faire en l’installant.
J’ai perdu patience, j’ai tout désinstallé …et en suite réinstallé,
et maintenant ca ne veut plus marché du tout, du moins postgis, ne veut plus s’installer, ce message s’affiche : « the installation of postgis 2.5 for postgresQL 2 returned an error »
j’ai la bonne idée d’avoir un mac et d’être nul en informatique… je craque…
j’essaie d’installer homebrew, je teste , je sais plus quoi faire…
Je ne comprends pas la différence entre postgres et postgresql ? quand je demande à télécharger , on me propose seulement postgresql ?
Bon je viens de comprendre…
j’ai fait n’importe quoi.
Effectivement je n’avais pas installé postgres, seulement postgresql. Cependant entre temps j’ai installé homebrew avec les comandes du terminale mac, et je ne retrouve rien.
Je me suis bloquée seule.
Ce message s’affiche maintenant quand j’essaie d’installer le bon logiciel :
pg_ctl: could not start server
Examine the log output.
je vais essayer de me dépatouiller et je vous remercie de votre retour !
bonne soirée
Bonjour, merci pour ce tutoriel.
Y a t’il une suite a ce tuto pour continuer a progresser ?
Merci !
Merci beaucoup pour ce tuto,
Comme dans le commentaire de Benjamin j’ai eu le même message d’erreur après la requête de modification de SRID. Et comme pour cet utilisateur je l’ai modifié sur PostGIS Shp import/Export Manager juste avant l’import et ça fonctionne !