Comment installer et configurer PostGIS sur Ubuntu 14.04

introduction

PostGIS est l’extension spatiale de la base de données relationnelle PostgreSQL. PostGIS vous permet de stocker des données spatiales à l’aide de types de données géométriques et géographiques, d’effectuer des requêtes spatiales avec des fonctions spatiales afin de déterminer la superficie, la distance, la longueur et le périmètre, et de créer des index spatiaux sur vos données pour accélérer les requêtes spatiales.

Dans ce guide, vous allez installer PostGIS, configurer PostgreSQL pour les données spatiales, charger des objets spatiaux dans votre base de données et exécuter une requête de base.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

Étape 1 - Installation de PostGIS

PostGIS n’est pas inclus dans les référentiels par défaut pour Ubuntu, mais nous pouvons l’obtenir via UbuntuGIS, un référentiel externe qui gère un certain nombre de packages SIG open source. Bien que le paquet PostGIS dans ce référentiel ne soit pas toujours la version la plus récente, il est bien maintenu et il n’est plus nécessaire de compiler PostGIS à partir du code source. Donc, pour installer PostGIS, nous allons ajouter ce référentiel à nos sources, puis l’installer avec notre gestionnaire de paquets.

Connectez-vous à votre serveur avec votre utilisateur non root:

ssh @

Puisque nous utilisons Ubuntu 14.04, nous aurons besoin de la branche unstable du référentiel. Exécutez la commande suivante pour ajouter le référentiel à vos sources:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable

Vous verrez le résultat suivant:

OutputUnstable releases of Ubuntu GIS packages. These releases are more bleeding edge and while generally they should work well, they dont receive the same amount of quality assurance as our stable releases do.
More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable
Press [ENTER] to continue or ctrl-c to cancel adding it

Appuyez sur + ENTER + pour accepter l’avertissement. La source sera ajoutée:

Outputgpg: keyring `/tmp/tmpintg192h/secring.gpg' created
gpg: keyring `/tmp/tmpintg192h/pubring.gpg' created
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpintg192h/trustdb.gpg: trustdb created
gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Avant de pouvoir installer PostGIS, mettez à jour votre liste de packages disponibles afin que les packages du nouveau référentiel soient ajoutés à la liste.

sudo apt-get update

Une fois vos sources mises à jour, installez PostGIS.

sudo apt-get install postgis

Entrez + Y + lorsque vous êtes invité à installer PostGIS avec ses dépendances nécessaires.

Nous pouvons maintenant nous connecter à PostgreSQL et intégrer PostGIS.

Étape 2 - Activation des fonctionnalités Spacial avec PostGIS

Les fonctionnalités PostGIS doivent être activées base par base de données avant de pouvoir stocker des données spatiales. Nous allons travailler avec la base de données + test1 + et l’utilisateur + postgres + du https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu- 14-04 Didacticiel [Comment installer et utiliser PostgreSQL sur Ubuntu 14.04] que vous avez suivi avant de démarrer ce didacticiel.

A l’aide de la commande + sudo +, passez sur l’utilisateur + postgres +:

sudo -i -u postgres

Ensuite, connectez-vous à la base de données + test1 +:

psql -d test1

Ensuite, activez l’extension PostGIS sur la base de données:

CREATE EXTENSION postgis;

Vérifions que tout fonctionne correctement. Exécutez la commande suivante:

SELECT PostGIS_version();

Vous verrez cette sortie:

Output            postgis_version
---------------------------------------
2.2 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

Nous sommes tous prêts. Type

\q

pour quitter la session SQL et revenir à l’invite de votre terminal.

Revenez ensuite à votre compte d’utilisateur principal:

su

Nous avons maintenant une base de données sur laquelle PostGIS est installé, mais modifions quelques paramètres PostgreSQL pour que tout se passe bien.

Étape 3 - Optimisation des objets de base de données PostgreSQL for GIS

PostgreSQL est conçu pour fonctionner sur tout, des systèmes intégrés aux grandes bases de données d’entreprise, mais il est configuré de manière très conservatrice. Les objets de base de données SIG sont volumineux par rapport aux données texte. Laissons donc configurer PostgreSQL pour qu’il fonctionne mieux avec ces objets.

Nous configurons PostgreSQL en éditant le fichier + postgresql.conf +. Ouvrez ce fichier:

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Quelques modifications doivent être apportées à ce fichier pour prendre en charge les données spatiales.

Premièrement, + shared_buffers + devrait être remplacé par environ 75% de la RAM de votre serveur. Donc, + 200 Mo + est une bonne valeur pour un serveur disposant de 512 Mo de RAM. Localisez la ligne `+ shared_buffers + et modifiez-la comme ceci:

/etc/postgresql/9.3/main/postgresql.conf

shared_buffers =                   # min 128kB

Ensuite, localisez la ligne commençant par + # work_mem +. Cette ligne est commentée par défaut, alors décommentez cette ligne et augmentez sa valeur à + ​​16MB +:

/etc/postgresql/9.3/main/postgresql.conf

work_mem =                          # min 64kB

Puis localisez + # maintenance_work_mem +, décommentez-le et augmentez sa valeur à + ​​128MB +:

/etc/postgresql/9.3/main/postgresql.conf

maintenance_work_mem =             # min 1MB

Trouvez + checkpoint_segments +, puis décommentez-le et changez sa valeur en + 6 +:

/etc/postgresql/9.3/main/postgresql.conf

checkpoint_segments = 6         # in logfile segments, min 1, 16MB each

Enfin, cherchez + # random_page_cost +. Lorsque vous le trouvez, décommentez-le et définissez sa valeur sur + 2.0 +:

/etc/postgresql/9.3/main/postgresql.conf

random_page_cost = 2.0                 # same scale as above

Appuyez sur + CTRL + X + pour quitter, suivi de + Y + et + ENTER + pour enregistrer les modifications apportées à ce fichier.

Vous pouvez consulter le tutoriel Tuning PostgreSQL pour Spatial pour plus d’informations sur ces paramètres.

Redémarrez PostgreSQL pour que ces modifications aient lieu:

sudo service postgresql restart

Nous avons maintenant PostGIS installé et PostgreSQL configuré. Introduisons des données dans la base de données afin de pouvoir tester les choses.

Étape 4 - Chargement des données spatiales

Nous allons charger des données spatiales dans notre base de données afin de nous familiariser avec les outils et le processus permettant d’obtenir ces données dans PostgreSQL, afin de pouvoir effectuer ultérieurement des requêtes spatiales.

Natural Earth fournit une excellente source de données de base pour le monde entier à différentes échelles. Mieux encore, ces données sont dans le domaine public.

Naviguez vers votre dossier personnel et créez un nouveau dossier nommé + nedata +. Nous utiliserons ce dossier pour stocker les données Natural Earth que nous téléchargerons.

cd ~
mkdir nedata

Puis naviguez dans ce nouveau dossier:

cd nedata

Nous téléchargerons l’ensemble de données pays 1: 110m depuis Natural Earth. Utilisez + wget + pour extraire ce fichier sur votre serveur:

wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip

Le fichier que vous venez de télécharger est compressé. Vous aurez donc besoin de la commande + unzip + que vous pourrez installer via le gestionnaire de paquets. Installez-le avec la commande suivante:

sudo apt-get install unzip

Puis décompressez le fichier:

unzip ne_110m_admin_0_countries.zip

Vous aurez maintenant six fichiers supplémentaires dans le dossier:

  • + ne_110m_admin_0_countries.README.html

  • + ne_110m_admin_0_countries.VERSION.txt +

  • + ne_110m_admin_0_countries.dbf +

  • + ne_110m_admin_0_countries.prj +

  • + ne_110m_admin_0_countries.shp +

  • + ne_110m_admin_0_countries.shx +

Les fichiers * .dbf *, * .prj *, * .shp * et * .shp * constituent un http://help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#/Shapefile_file_extensions/ 005600000003000000 / [ShapeFile], un format de données vectoriel géospatial très répandu utilisé par les logiciels SIG. Nous pouvons charger cela dans notre base de données + test1 +.

Pour ce faire, nous installerons GDAL, la bibliothèque d’abstraction de données géospatiales. Lorsque nous installons GDAL, nous obtenons également OGR (OpenGIS Simple Features Reference Implementation) et la commande + ogr2ogr +. C’est une bibliothèque de traduction de données vectorielles que nous utiliserons pour traduire le fichier de formes en données utilisables par PostGIS.

Installez GDAL en utilisant le gestionnaire de paquets:

sudo apt-get install gdal-bin

Basculez maintenant vers l’utilisateur + postgres:

sudo -i -u postgres

Maintenant, convertissez le Shapefile que vous avez obtenu de Natural Earth en une table PostGIS en utilisant + ogr2ogr +, comme ceci:

ogr2ogr -f PostgreSQL PG:dbname=test1 -progress -nlt PROMOTE_TO_MULTI /home//nedata/ne_110m_admin_0_countries.shp

Décomposons cette commande et examinons chaque option en détail. Tout d’abord, nous spécifions cette option:

-f PostgreSQL

Ce commutateur indique que le type de fichier de sortie est une table PostgreSQL.

Ensuite, nous avons cette option:

PG:dbname=test1

Ceci définit la chaîne de connexion à notre base de données. Nous spécifions simplement le nom de la base de données ici, mais si vous voulez utiliser un utilisateur, un hôte et un port différents, vous pouvez spécifier les options suivantes:

PG:"dbname='databasename' host='addr' port='5432' user='x' password='y'"

Suivant dans notre liste d’options est la suivante:

-progress

Cette option affiche une barre de progression afin que nous puissions visualiser le processus.

Ensuite, nous passons cet argument:

-nlt PROMOTE_TO_MULTI

PostgreSQL est strict sur les types d’objet. La commande + ogr2ogr + fera une hypothèse sur le type de géométrie en fonction des premières caractéristiques d’un fichier. Les données que nous importons contiennent un mélange de types * Polygon * et de polygones en plusieurs parties, ou * MultiPolygons *. Celles-ci ne peuvent pas être insérées dans le même champ. Nous faisons donc la promotion de toutes les entités en polygones en plusieurs parties. Le champ géométrique sera créé en tant que * MultiPolygon *.

Enfin, nous spécifions le chemin du fichier d’entrée:

/home//nedata/ne_110m_admin_0_countries.shp

Visitez le site Web ogr2ogr pour voir toutes les options.

Lorsque vous exécutez la commande complète, vous verrez la sortie suivante:

Output0...10...20...30...40...50...60...70...80...90...100 - done.

Nous pouvons vérifier que les données ont été importées en utilisant la commande + ogrinfo +. Exécutez la commande suivante:

ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

Cela affichera la sortie suivante:

OutputINFO: Open of `PG:dbname=test1'
     using driver `PostgreSQL' successful.

Layer name:
Geometry:
Feature Count: 177
Extent: (-180.000000, -90.000000) - (180.000000, 83.645130)
Layer SRS WKT:
GEOGCS["WGS 84",
   DATUM["WGS_1984",
       SPHEROID["WGS 84",6378137,298.257223563,
           AUTHORITY["EPSG","7030"]],
       AUTHORITY["EPSG","6326"]],
   PRIMEM["Greenwich",0,
       AUTHORITY["EPSG","8901"]],
   UNIT["degree",0.0174532925199433,
       AUTHORITY["EPSG","9122"]],
   AUTHORITY["EPSG","4326"]]
FID Column = ogc_fid
Geometry Column = wkb_geometry
scalerank: Integer (4.0)
featurecla: String (30.0)

...

region_wb: String (254.0)
name_len: Real (16.6)
long_len: Real (16.6)
abbrev_len: Real (16.6)
tiny: Real (16.6)
homepart: Real (16.6)

Nous avons maintenant des données spatiales dans notre base de données, alors voyons comment nous pouvons les utiliser pour résoudre des problèmes.

Étape 5 - Interrogation des données spatiales

Supposons qu’on nous demande de trouver les dix pays les plus septentrionaux du monde. C’est facile avec PostGIS et les données que nous avons importées.

Reconnectez-vous à la base de données + test1 +.

psql -d test1

Listez les tables dans la base de données:

\dt

Cela renverra deux tables:

Output                   List of relations
Schema |           Name            | Type  |  Owner
--------+---------------------------+-------+----------
public | ne_110m_admin_0_countries | table | postgres
public | spatial_ref_sys           | table | postgres
(2 rows)

Nous allons utiliser la table` + ne_110m_admin_0_countries + , qui contient les données qui nous aideront à répondre à notre question. Cette table comporte une colonne `+ admin + contenant le nom du pays et une colonne + wkb_gemoetry + contenant des données géométriques. Si vous voulez voir toutes les colonnes de la table + ne_110m_admin_0_countries +, vous pouvez lancer la commande suivante:

\d ne_110m_admin_0_countries

Vous verrez les colonnes et leurs types de données. Le type de données de la colonne + wbk_geometry + se présente comme suit:

wkb_geometry | geometry(MultiPolygon,4326) |

La colonne + wbk_geometry + contient des polygones. Nous avons affaire à des pays et à leurs frontières irrégulières. Ainsi, chaque pays de notre base de données n’a pas une valeur unique pour la latitude. Donc, pour obtenir la latitude de chaque pays, nous devons d’abord connaître le centroïde de chaque pays à l’aide de la fonction + ST_Centroid + de PostGIS. Nous extrayons ensuite la valeur Y du centroïde à l’aide de la fonction + ST_Y +. Nous pouvons utiliser cette valeur comme latitude.

Voici la requête que nous allons exécuter:

SELECT admin, ST_Y(ST_Centroid(wkb_geometry)) as latitude
FROM ne_110m_admin_0_countries
ORDER BY latitude DESC
LIMIT 10;

Nous classons les résultats par ordre décroissant, car le pays le plus au nord aura la latitude la plus élevée.

Exécutez cette requête et vous verrez les dix pays les plus septentrionaux:

Output   admin   |    latitude
-----------+------------------
Greenland | 74.7704876939899
Norway    | 69.1568563971328
Iceland   |  65.074276335291
Finland   | 64.5040939185674
Sweden    | 62.8114849680803
Russia    | 61.9808407507127
Canada    | 61.4690761453491
Estonia   |  58.643695240707
Latvia    | 56.8071751342793
Denmark   | 56.0639344617945
(10 rows)

Maintenant que vous avez votre réponse, vous pouvez quitter la base de données avec

\q

Vous trouverez plus d’informations sur les différentes fonctions PostGIS dans la section PostGIS Reference de la documentation PostGIS.

Conclusion

Vous avez maintenant une base de données activée spatialement configurée pour les requêtes spatiales, et vous pouvez utiliser certaines données de cette base de données pour une exploration plus approfondie.

Pour un guide plus détaillé sur la création de requêtes spatiales, voir Boundless PostGIS Tutorial

Related