Makina Blog

Le blog Makina-corpus

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 :

idexplored_pathsrow_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 formation

Formations SIG / Cartographie

Formation QGIS

À distance (FOAD) Du 2 au 6 décembre 2024

Voir la formation

Formations Outils et bases de données

Formation PostgreSQL

Nantes Du 11 au 13 décembre 2024

Voir la formation

Actualités en lien

Image
Guide ODbL
15/11/2024

Mini-guide à l’usage des collec­ti­vi­tés : l’Open Data, entre néces­sité et oppor­tu­nité

Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à desti­na­tion des collec­ti­vi­tés pour l’ap­pré­hen­der et se l’ap­pro­prier.

Voir l'article
Image
Rentrée 2024
05/11/2024

Une rentrée riche autour de la donnée et des rencontres pour Makina Corpus Terri­toires

Chaque rentrée apporte son lot d’op­por­tu­ni­tés pour faire avan­cer les projets autour de la données au service des terri­toires. Le calen­drier de Makina Corpus en la matière a été parti­cu­liè­re­ment dense en événe­ments.

Voir l'article
Image
Encart GeoDataDays 2024
05/09/2024

GeoDa­ta­days 2024 : retrou­vez-nous et parti­ci­pez à nos confé­rences

Les 19 et 20 septembre, parti­ci­pez aux confé­rences animées par nos experts SIG aux GeoDa­ta­Days 2024, en Pays de la Loire à Nantes.

 

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus