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
À distance (FOAD) Du 1er au 5 décembre 2025
Voir la Formation PostGISFormations SIG / Cartographie
Formation QGIS
À distance (FOAD) Du 1 au 5 décembre 2025
Voir la Formation QGISFormations Outils et bases de données
Formation PostgreSQL
A distance (foad) Du 10 au 12 décembre 2025
Voir la Formation PostgreSQLActualités en lien
Geotrek et OpenStreetMap : Mise en place d’une passerelle pour une connaissance du territoire enrichie
Logiciel libre
08/09/2025
 
  Installer Geotrek : avec ou sans segmentation dynamique ?
Logiciel libre
08/09/2025
 
  Makina Corpus sponsorise State of the Map 2025
SIG
05/06/2025
 
  