PostGIS transforme PostgreSQL en système d’information géographique (SIG) puissant. Idéal pour apps de livraison, logistique, services à domicile.
Voir notre guide extensions PG.
Activer PostGIS
# Image Docker avec PostGIS
docker run -d \
-e POSTGRES_PASSWORD=secret \
postgis/postgis:16-3.4
# Dans psql
CREATE EXTENSION postgis;
Stocker des points
CREATE TABLE shops (
id serial PRIMARY KEY,
name text,
location geography(POINT, 4326)
);
INSERT INTO shops (name, location) VALUES
('Boutique Plateau', 'POINT(-17.4441 14.6928)'),
('Boutique Almadies', 'POINT(-17.5083 14.7402)'),
('Boutique HLM', 'POINT(-17.4500 14.7000)');
Recherche par distance
-- Boutiques dans un rayon de 5 km
SELECT name, ST_Distance(location, 'POINT(-17.4441 14.6928)'::geography) AS distance
FROM shops
WHERE ST_DWithin(location, 'POINT(-17.4441 14.6928)'::geography, 5000)
ORDER BY distance;
-- Boutique la plus proche
SELECT name FROM shops
ORDER BY location <-> 'POINT(-17.4441 14.6928)'::geography
LIMIT 1;
Polygones et zones
CREATE TABLE delivery_zones (
id serial PRIMARY KEY,
name text,
area geography(POLYGON, 4326)
);
-- Définir une zone de livraison polygone
INSERT INTO delivery_zones (name, area) VALUES
('Dakar Plateau',
'POLYGON((-17.45 14.68, -17.43 14.68, -17.43 14.70, -17.45 14.70, -17.45 14.68))'
);
-- Une commande est-elle dans une zone ?
SELECT name FROM delivery_zones
WHERE ST_Within(
'POINT(-17.4441 14.6928)'::geography::geometry,
area::geometry
);
Index spatial
CREATE INDEX shops_location_idx ON shops USING GIST (location);
CREATE INDEX zones_area_idx ON delivery_zones USING GIST (area);
Cas d’usage Afrique
- App livraison repas : trouver restaurants < 3 km du client
- Logistique : optimiser tournées chauffeurs
- Services à domicile : matcher prestataires nearby
- Cartographie boutiques : carte interactive avec markers
- Zones de tarification : urbain vs périurbain
Pour aller plus loin
- Guide extensions PG
- Documentation PostGIS : postgis.net