Makina Blog
Ré-ordonner des lignes dans PostGIS avec une requête récursive
Comment ordonner des lignes les unes à la suite des autres dans PostGIS ?
Dans un réseau routier existant, provenant d'OpenStreetMap par exemple, les différentes lignes représentant un itinéraire ne sont pas ordonnées les unes à la suite des autres. Voici par exemple les différentes lignes composant la RN 20, colorées par osm_id, l'identifiant unique OpenStreetMap.

Pour obtenir une liste de ces différentes lignes classées les unes après les autres, on peut utiliser une requête récursive PostgreSQL :
WITH RECURSIVE t(id,g,explored_paths) AS (
SELECT osm_id, way, ARRAY[osm_id]
FROM planet_osm_line
WHERE osm_id=93378070
UNION ALL
SELECT osm_id, way, explored_paths || osm_id
FROM planet_osm_line, t
WHERE ST_Intersects(way, t.g)
AND NOT (osm_id = ANY(explored_paths))
AND ref='N 20'
)
SELECT *, row_number() over () FROM t LIMIT 30;
La première partie de la requête récursive consiste à l'initialiser avec la première ligne, ici l'objet ayant osm_id=93378070. Une union de ces données initiales est réalisée récursivement avec la ligne qui touche les lignes précédemment sélectionnées, mais qui ne fait pas encore partie des lignes sélectionnées (explored_paths). Cette requête s'arrête lorsque plus aucune ligne touchant les lignes précédentes n'est trouvée.
Voici un extrait des résultats de cette requête :
id | explored_paths | row_number | |
---|---|---|
93378070 | "{93378070}" | 1 | |
93378068 | "{93378070,93378068}" | 2 | |
93378071 | "{93378070,93378068,93378071}" | 3 | |
93378069 | "{93378070,93378068,93378071,93378069}" | 4 | |
127721449 | "{93378070,93378068,93378071,93378069,127721449}" | 5 | |
Les lignes peuvent maintenant être affichées en les classant par row_number, c'est à dire par leur ordre de sortie de la requête récursive.

Formations associées
Formations SIG / Cartographie
Formation PostGIS
Nantes Du 18 au 20 mars 2025
Voir la Formation PostGISFormations Outils et bases de données
Formation PostgreSQL
À distance (FOAD) Du 12 au 16 mai 2025
Voir la Formation PostgreSQLActualités en lien
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
SIG
15/11/2024
Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à destination des collectivités pour l’appréhender et se l’approprier.

Une rentrée riche autour de la donnée et des rencontres pour Makina Corpus Territoires
SIG
05/11/2024
Chaque rentrée apporte son lot d’opportunités pour faire avancer les projets autour de la données au service des territoires. Le calendrier de Makina Corpus en la matière a été particulièrement dense en événements.

GeoDatadays 2024 : retrouvez-nous et participez à nos conférences
SIG
05/09/2024
Les 19 et 20 septembre, participez aux conférences animées par nos experts SIG aux GeoDataDays 2024, en Pays de la Loire à Nantes.
