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 9 au 13 décembre 2024
Voir la formationFormations SIG / Cartographie
Formation QGIS
À distance (FOAD) Du 2 au 6 décembre 2024
Voir la formationFormations Outils et bases de données
Formation PostgreSQL
Nantes Du 11 au 13 décembre 2024
Voir la formationActualités en lien
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
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
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
Les 19 et 20 septembre, participez aux conférences animées par nos experts SIG aux GeoDataDays 2024, en Pays de la Loire à Nantes.