Extension PostGIS pour PostgreSQL

PostgreSQLPostgreSQLBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez comment installer et utiliser l'extension PostGIS dans une base de données PostgreSQL. PostGIS permet à PostgreSQL de stocker et d'interroger des données spatiales, vous permettant d'effectuer des requêtes et des analyses spatiales.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL postgresql(("PostgreSQL")) -.-> postgresql/PostgreSQLGroup(["PostgreSQL"]) postgresql/PostgreSQLGroup -.-> postgresql/db_setup("Create New Database") postgresql/PostgreSQLGroup -.-> postgresql/db_access("Connect To Database") postgresql/PostgreSQLGroup -.-> postgresql/table_init("Create Basic Table") postgresql/PostgreSQLGroup -.-> postgresql/row_add("Insert One Row") postgresql/PostgreSQLGroup -.-> postgresql/data_where("Filter With WHERE") postgresql/PostgreSQLGroup -.-> postgresql/view_drop("Drop Existing View") postgresql/PostgreSQLGroup -.-> postgresql/func_call("Call Stored Function") postgresql/PostgreSQLGroup -.-> postgresql/db_drop("Drop Entire Database") subgraph Lab Skills postgresql/db_setup -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/db_access -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/table_init -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/row_add -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/data_where -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/view_drop -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/func_call -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} postgresql/db_drop -.-> lab-550958{{"Extension PostGIS pour PostgreSQL"}} end

Installer l'extension PostGIS

Dans cette étape, vous allez installer l'extension PostGIS dans une base de données PostgreSQL. PostGIS ajoute la prise en charge des objets géographiques à PostgreSQL.

Tout d'abord, connectez-vous au serveur PostgreSQL en tant qu'utilisateur postgres en utilisant la commande psql :

sudo -u postgres psql

Cela ouvrira le terminal interactif PostgreSQL. Vous verrez une invite similaire à :

psql (14.7 (Debian 14.7-1.pgdg110+1))
Type "help" for help.

postgres=#

Ensuite, créez une base de données nommée spatial_db :

CREATE DATABASE spatial_db;

Vous devriez voir la sortie :

CREATE DATABASE

Maintenant, connectez-vous à la base de données spatial_db :

\c spatial_db

L'invite changera en :

You are now connected to database "spatial_db" as user "postgres".
spatial_db=#

Installez l'extension PostGIS :

CREATE EXTENSION postgis;

Cela ajoute la fonctionnalité PostGIS à la base de données spatial_db. La sortie devrait être :

CREATE EXTENSION

Vérifiez l'installation en vérifiant la version de PostGIS :

SELECT PostGIS_full_version();

La sortie affichera les informations complètes de la version de l'extension PostGIS.

Enfin, quittez le shell psql :

\q

Créer une table spatiale et insérer des données

Dans cette étape, vous allez créer une table pour stocker des données spatiales et insérer des exemples de données.

Tout d'abord, connectez-vous à la base de données spatial_db en utilisant la commande psql :

sudo -u postgres psql -d spatial_db

Créez une table nommée cities avec des colonnes pour id, name et location. La colonne location stockera les données spatiales en tant que type geometry (géométrie).

CREATE TABLE cities (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    location GEOMETRY(Point, 4326)
);

Cette commande crée une table nommée cities avec un id à auto-incrémentation, un name (nom) pour la ville et une colonne location pour stocker les coordonnées géographiques de la ville en tant que géométrie de type Point (Point) en utilisant le SRID (Spatial Reference Identifier) 4326 (WGS 84).

Vous devriez voir la sortie :

CREATE TABLE

Maintenant, insérez des données pour trois villes : New York, Londres et Tokyo.

INSERT INTO cities (name, location) VALUES
    ('New York', ST_GeomFromText('POINT(-74.0060 40.7128)', 4326)),
    ('London', ST_GeomFromText('POINT(-0.1278 51.5074)', 4326)),
    ('Tokyo', ST_GeomFromText('POINT(139.6917 35.6895)', 4326));

Cela insère trois lignes dans la table cities, en utilisant la fonction ST_GeomFromText pour créer des géométries de type Point à partir de chaînes Well-Known Text (WKT) représentant les coordonnées de chaque ville.

Vous devriez voir la sortie :

INSERT 0 3

Pour vérifier que les données ont été insérées correctement, interrogez la table :

SELECT id, name, ST_AsText(location) FROM cities;

La sortie devrait ressembler à ceci :

 id |   name   |          st_astext
----+----------+-----------------------------
  1 | New York | POINT(-74.006 40.7128)
  2 | London   | POINT(-0.1278 51.5074)
  3 | Tokyo    | POINT(139.6917 35.6895)
(3 rows)

Enfin, quittez le shell psql :

\q

Effectuer des requêtes spatiales

Dans cette étape, vous allez effectuer quelques requêtes spatiales de base en utilisant l'extension PostGIS.

Tout d'abord, connectez-vous à la base de données spatial_db en utilisant la commande psql :

sudo -u postgres psql -d spatial_db

Calculez la distance entre New York et Londres en mètres :

SELECT ST_Distance(
    (SELECT location::geography FROM cities WHERE name = 'New York'),
    (SELECT location::geography FROM cities WHERE name = 'London')
);

Cette requête calcule la distance entre les emplacements de New York et Londres. Le transtypage ::geography (conversion en géographie) est utilisé pour effectuer le calcul sur la surface de la Terre, renvoyant la distance en mètres. Vous devriez voir une sortie similaire à :

   st_distance
-----------------
 5570299.7888681
(1 row)

Créez une zone tampon (buffer) de 200 kilomètres (200 000 mètres) autour de Londres et trouvez toutes les villes qui la croisent :

WITH london_buffer AS (
  SELECT ST_Buffer(location::geography, 200000) AS geom FROM cities WHERE name = 'London'
)
SELECT c.name
FROM cities c, london_buffer lb
WHERE ST_Intersects(c.location::geography, lb.geom);

Cette requête crée d'abord une zone tampon autour de l'emplacement de Londres en utilisant ST_Buffer. Ensuite, elle sélectionne les noms de toutes les villes dont les emplacements croisent la zone tampon en utilisant ST_Intersects. La sortie devrait être :

  name
--------
 London
(1 row)

Enfin, quittez le shell psql :

\q

Supprimer l'extension PostGIS et la base de données

Dans cette étape, vous allez supprimer l'extension PostGIS et la base de données spatial_db.

Tout d'abord, connectez-vous à la base de données spatial_db en utilisant la commande psql :

sudo -u postgres psql -d spatial_db

Supprimez l'extension PostGIS :

DROP EXTENSION postgis;

Cette commande supprime la fonctionnalité PostGIS de la base de données spatial_db. Vous devriez voir la sortie :

DROP EXTENSION

Maintenant, supprimez la table cities :

DROP TABLE cities;

Vous devriez voir la sortie :

DROP TABLE

Quittez le shell psql :

\q

Enfin, supprimez la base de données spatial_db :

sudo -u postgres psql -c "DROP DATABASE spatial_db;"

Résumé

Dans ce TP (travaux pratiques), vous avez appris à installer et à utiliser l'extension PostGIS dans une base de données PostgreSQL. Vous avez créé une base de données, installé l'extension PostGIS, créé une table spatiale, inséré des données, effectué des requêtes spatiales, et enfin supprimé l'extension et la base de données. Cela fournit une base pour travailler avec des données spatiales dans PostgreSQL.