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

Paris Du 17 au 19 juin 2024

Voir la formation

Formations SIG / Cartographie

Formation QGIS

Toulouse Du 10 au 12 juin 2024

Voir la formation

Formations Outils et bases de données

Formation PostgreSQL

Paris Du 5 au 6 juin 2024

Voir la formation

Actualités en lien

Image
SOTM 24
16/05/2024

Makina Corpus met la carto­gra­phie libre à l’hon­neur en soute­nant State of the Map France 2024

Makina Corpus soutient State of the Map France à Lyon du 28 au 30 juin 2024, l’évé­ne­ment qui rassemble les passion­nés de carto­gra­phie et la commu­nauté OpenS­treet­Map.

Voir l'article
Image
Article SIG cartographie : Géné­rer un fichier PMTiles à partir d’un MBTiles
24/04/2024

Géné­rer un fichier PMTiles à partir d’un MBTiles

Exemple de conver­sion d’une base de tuiles vecto­rielles MBTiles du Plan Cadas­tral Infor­ma­tisé vers le format PMTiles (Proto­maps).

Voir l'article
Image
Capture d'une partie de carte montrant un réseau de voies sur un fond de carte sombre. Au centre, une popup affiche les information de l'un des tronçons du réseau.
28/02/2024

Géné­rer un fichier PMTiles avec Tippe­ca­noe

Exemple de géné­ra­tion et d’af­fi­chage d’un jeu de tuiles vecto­rielles en PMTiles à partir de données publiques.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus