Comment utiliser PostGIS avec ServBay : Ajoutez la puissance géospatiale à PostgreSQL
PostGIS
est une extension puissante pour les bases de données PostgreSQL, ajoutant la prise en charge des types de données géospatiales, des fonctions et des index spatiaux à PostgreSQL. Autrement dit, vous pouvez stocker, manipuler et interroger des informations géographiques comme des points, lignes, polygones, directement dans votre base de données, et réaliser des analyses spatiales avancées. Pour les développeurs d'applications web traitant des cartes, des services de localisation ou tout autre besoin géographique, PostGIS est un outil incontournable.
ServBay, environnement de développement web local pour macOS, intègre déjà le package PostgreSQL et inclut par défaut l'extension PostGIS. Cela simplifie grandement l'utilisation de PostGIS en local, sans compilation complexe ni installation de dépendances à la main.
Ce guide vous expliquera pas à pas comment activer et utiliser PostGIS dans ServBay afin d'ajouter rapidement des fonctionnalités géospatiales à vos projets.
Prérequis
Avant d'utiliser PostGIS, assurez-vous d'avoir effectué les étapes suivantes :
- Installer et lancer ServBay : Vérifiez que ServBay est bien installé sur votre système macOS.
- Activer et démarrer le package PostgreSQL : Depuis le panneau de contrôle ServBay, vérifiez que le package PostgreSQL est bien activé et démarré. Sinon, cochez cette option dans le panneau de contrôle et lancez-le.
- Accéder à la base PostgreSQL : Familiarisez-vous avec la connexion à la base PostgreSQL de ServBay via l’outil en ligne de commande
psql
, ou un client graphique (TablePlus, pgAdmin, etc). Par défaut, vous pouvez utiliserpsql -U postgres
pour vous connecter à la base locale.
Installation et activation de l’extension PostGIS
PostGIS est préinstallé avec ServBay : pas besoin de téléchargement supplémentaire. L’activation de l’extension se fait base de données par base de données, selon vos besoins.
Voici les étapes à suivre pour activer PostGIS :
Se connecter à la base PostgreSQL cible :
Ouvrez le terminal et connectez-vous avec la commandepsql
. Remplacezyour_username
par votre identifiant (ex.postgres
) etyour_database
par le nom de votre base.bashpsql -U your_username -d your_database
1Si vous désirez activer PostGIS dans la base et avec l'utilisateur par défaut :
bashpsql -U postgres
1Créer l’extension PostGIS dans la base :
Une fois connecté, exécutez la commande SQL suivante dans l’interfacepsql
:sqlCREATE EXTENSION postgis;
1Cette instruction installe tous les objets nécessaires (nouveaux types de données, fonctions, opérateurs, etc.) dans la base courante.
Vérifier l’installation de PostGIS :
Tapez la commande\dx
danspsql
pour lister toutes les extensions de la base.sql\dx
1Si PostGIS est activé, vous verrez une entrée
postgis
dans la liste accompagnée de sa version :List of installed extensions Name | Version | Schema | Description -----------+---------+------------+-------------------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgis | 3.3.2 | public | PostGIS geometry and geography spatial types and functions (2 rows)
1
2
3
4
5
6(Attention : le numéro de version peut différer selon la version de ServBay)
Vous venez d’activer PostGIS sur la base cible : les fonctionnalités spatiales sont désormais disponibles.
Configuration des données spatiales avec PostGIS
Une fois PostGIS activé, vous pouvez créer de nouvelles tables intégrant des colonnes spatiales ou en ajouter à vos tables existantes. Il existe deux principaux types spatiaux dans PostGIS : geometry
(pour des calculs sur des plans) et geography
(pour des calculs prenant en compte la sphéricité de la Terre, idéal pour des coordonnées longitude/latitude).
Créer une table avec colonne spatiale
Exemple de création d’une table locations
possédant une colonne de point géographique :
Créer la table :
Danspsql
ou via votre client graphique, exécutez :sqlCREATE TABLE locations ( id SERIAL PRIMARY KEY, name VARCHAR(100), geom GEOMETRY(Point, 4326) );
1
2
3
4
5GEOMETRY(Point, 4326)
: la colonnegeom
stocke des points géographiques. Le SRID 4326 correspond au système de référence WGS84 (utilisé par GPS, OpenStreetMap, Google Maps, etc.).- Vous pouvez définir d’autres types géométriques (
LineString
,Polygon
,MultiPoint
, etc) et choisir d’autres SRID adaptés à vos données.
Insérer des exemples de données :
Utilisez la fonction PostGISST_GeomFromText()
qui convertit du texte WKT (Well-Known Text) en objet géométrique.sqlINSERT INTO locations (name, geom) VALUES ('ServBay Headquarters', ST_GeomFromText('POINT(116.4074 39.9042)', 4326)), -- Exemple : Pékin ('ServBay Shanghai Office', ST_GeomFromText('POINT(121.4737 31.2304)', 4326)); -- Exemple : Shanghai
1
2
3Notez bien : dans WKT, le format de POINT est
POINT(longitude latitude)
.
Créer un index spatial
Pour les tables volumineuses en données géospatiales, l’indexation spatiale (index GiST) est essentielle pour accélérer les recherches, notamment les requêtes de proximité, d’inclusion ou de voisin le plus proche.
Créer l’index GiST :
Toujours viapsql
ou un client graphique :sqlCREATE INDEX idx_locations_geom ON locations USING GIST (geom);
1Cet index sur la colonne
geom
sera automatiquement utilisé par PostgreSQL pour optimiser les requêtes spatiales.
Exemples de requêtes géospatiales PostGIS
PostGIS intègre des centaines de fonctions géospatiales. Voici quelques requêtes fréquentes dans le développement web :
Calculer la distance entre deux points
Calculez la distance à vol d’oiseau entre deux localisations.
sql
SELECT ST_Distance(
ST_GeomFromText('POINT(116.4074 39.9042)', 4326), -- Point A
ST_GeomFromText('POINT(121.4737 31.2304)', 4326) -- Point B
);
1
2
3
4
2
3
4
ST_Distance()
: calcule la distance entre deux objets géométriques. Avec le typegeometry
SRID 4326, le résultat est en degrés (approximatif). Pour une distance précise en mètres, optez pour le typegeography
ou la fonctionST_Distance(geography_a, geography_b, use_spheroid)
.
Tester l’inclusion spatiale
Vérifie si une géométrie en contient une autre : par exemple vérifier si un point est dans une zone (polygone).
sql
SELECT name FROM locations
WHERE ST_Contains(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326), -- Exemple : un rectangle
geom
);
1
2
3
4
5
2
3
4
5
ST_Contains(géométrie A, géométrie B)
: renvoie vrai si A contient totalement B.
Requête du plus proche voisin
Trouve les lieux les plus proches d’un point donné, avec l’aide de l’index GiST.
sql
SELECT name, ST_Distance(geom, ST_GeomFromText('POINT(116.4074 39.9042)', 4326)) AS distance
FROM locations
ORDER BY geom <-> ST_GeomFromText('POINT(116.4074 39.9042)', 4326) -- Utilise l’index GiST pour le tri spatial
LIMIT 5;
1
2
3
4
2
3
4
- L’opérateur
<->
est un opérateur de distance optimisé par index GiST pour trouver les objets les plus proches rapidement.
Analyse géospatiale avancée avec PostGIS
Au-delà des requêtes simples, PostGIS offre des fonctions analytiques puissantes : calcul de buffer, intersection, union de géométries, etc.
Analyse de buffer
Crée un polygone-tampon autour d’une géométrie à une certaine distance.
sql
SELECT ST_Buffer(geom, 0.01) -- Buffer de 0,01 degré (~1,1 km)
FROM locations
WHERE name = 'ServBay Headquarters';
1
2
3
2
3
ST_Buffer(géométrie, distance)
: génère une “zone tampon” autour d’une géométrie. En SRID 4326, la distance est en degrés.
Analyse d’intersection
Calcule la zone (géométrie) d’intersection entre deux objets.
sql
SELECT ST_Intersection(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326),
geom
)
FROM locations
WHERE name = 'ServBay Headquarters';
1
2
3
4
5
6
2
3
4
5
6
ST_Intersection(A, B)
: retourne la partie commune à A et B sous forme de nouvelle géométrie.
Union de géométries
Fusionne plusieurs géométries en une seule.
sql
SELECT ST_Union(geom)
FROM locations;
1
2
2
ST_Union(ensemble)
: fusionne l’ensemble des géométries en une entité unique (multi-parties possibles).
Visualiser des données géospatiales
La visualisation des données PostGIS est une étape commune en développement web, que ce soit via un logiciel SIG de bureau ou des bibliothèques cartographiques web.
Avec un logiciel SIG de bureau (ex : QGIS)
QGIS, logiciel SIG open source populaire, se connecte directement à PostGIS et affiche vos données spatiales.
Se connecter à PostgreSQL ServBay depuis QGIS :
- Ouvrez QGIS.
- Dans la barre de menu :
Layer
(Couche) →Add Layer
(Ajouter une couche) →Add PostGIS Layers...
(Ajouter des couches PostGIS…). - Cliquez sur
New
pour créer une nouvelle connexion. - Renseignez les informations :
- Name : ex.
ServBay PostGIS
- Host :
localhost
ou127.0.0.1
- Port : par défaut
5432
(idem ServBay) - Database : le nom de votre base avec PostGIS activé
- Username : votre identifiant (ex.
postgres
) - Password : votre mot de passe (si configuré)
- Name : ex.
- Testez la connexion via
Test Connection
. - Validez, puis connectez-vous via la fenêtre principale.
Charger les données spatiales :
- Une fois connecté, toutes les tables de la base sont listées.
- Repérez la table contenant la colonne spatiale (ex.
locations
). QGIS la détectera automatiquement. - Sélectionnez la table, cliquez sur
Add
puis surClose
: vos données spatiales s’affichent alors sur la carte QGIS.
Avec une bibliothèque web cartographique (ex : Leaflet)
Pour intégrer sur le web, vous utiliserez des bibliothèques JavaScript comme Leaflet, OpenLayers ou Mapbox GL JS. Votre backend (PHP, Node.js, Python, etc.—tous supportés par ServBay) devra exposer les données issues de PostGIS au format GeoJSON pour le front-end.
Exemple simple avec Leaflet, à sauvegarder dans un sous-dossier du répertoire de site ServBay (/Applications/ServBay/www/postgis-map/index.html
), puis accessible localement (ex. postgis-map.servbay.demo
).
html
<!DOCTYPE html>
<html>
<head>
<title>ServBay PostGIS Leaflet Example</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
<style>
#map { height: 400px; width: 100%; } /* Définir la taille de la carte */
</style>
</head>
<body>
<h1>Exemple de visualisation PostGIS (Leaflet)</h1>
<div id="map"></div>
<script>
// Initialise la carte centrée sur Pékin
var map = L.map('map').setView([39.9042, 116.4074], 10);
// Ajoute le fond OpenStreetMap
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Exemple : ajoute un marqueur fixe (normalement généré dynamiquement depuis PostGIS)
// Position correspondant à l’exemple 'ServBay Headquarters'
var marker = L.marker([39.9042, 116.4074]).addTo(map)
.bindPopup('<b>ServBay Headquarters</b><br>Emplacement exemple')
.openPopup();
// Dans un vrai projet, récupérez les données GeoJSON de PostGIS via API/Ajax :
/*
fetch('/api/locations') // Backend retourne du GeoJSON depuis PostGIS
.then(response => response.json())
.then(data => {
L.geoJSON(data).addTo(map);
});
*/
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Cet exemple montre seulement l'intégration basique de Leaflet. La lecture de données PostGIS se fait côté backend (via PHP, Node.js, Python, etc.), conversion en GeoJSON, puis exposition en API HTTP consommée par le front-end. ServBay peut exécuter tous ces langages pour faciliter le processus.
Foire aux questions (FAQ)
Q : J’obtiens une erreur lors de
CREATE EXTENSION postgis;
, que faire ?- R : Assurez-vous que vous êtes bien connecté à la base PostgreSQL et que votre utilisateur a les droits nécessaires pour créer une extension (l’utilisateur
postgres
les possède par défaut). Vérifiez aussi que le package PostgreSQL de ServBay est bien lancé. Si le problème persiste, consultez les logs de ServBay et PostgreSQL pour plus de détails.
- R : Assurez-vous que vous êtes bien connecté à la base PostgreSQL et que votre utilisateur a les droits nécessaires pour créer une extension (l’utilisateur
Q : Qu’est-ce que le SRID 4326 ? Peut-on en utiliser un autre ?
- R : Le SRID ("Spatial Reference Identifier") est un code unique identifiant un système de coordonnées. 4326 désigne le WGS84—le système latitude/longitude le plus courant sur le web. Vous pouvez bien sûr utiliser d'autres SRID, par exemple 3857 (Web Mercator, projection utilisée par la plupart des tuiles web). Faites votre choix selon l'origine et les besoins de votre application. Pour la majorité des cas web (longitude/latitude), utilisez 4326 ou 3857.
Q : Quelle est la différence entre les types
geometry
etgeography
?- R :
geometry
manipule des coordonnées dans un plan cartésien (calculs euclidiens, plus rapide et simple pour des zones réduites).geography
gère des coordonnées sphériques (tient compte de la courbure terrestre), distance et surface sont donc plus précises pour des larges régions et des calculs globaux. Pour des applications globales travaillant sur latitude/longitude, préférezgeography
. Pour des traitements locaux ou sans besoin d'une précision extrême,geometry
est souvent plus adapté.
- R :
Conclusion
PostGIS apporte à PostgreSQL une gestion avancée des données géospatiales—fondamentale pour le développement d’applications basées sur la localisation. Grâce à ServBay, vous pouvez activer et utiliser PostGIS en local sur macOS très facilement, sans configuration fastidieuse.
Ce guide vous a montré comment activer PostGIS dans ServBay, créer et gérer des données spatiales, exécuter des requêtes et analyses courantes, et aborder la visualisation. Avec ces bases, à vous de concevoir des applications web géospatiales riches avec PostGIS sur ServBay ! Explorez la documentation de PostGIS pour découvrir tout son potentiel.