Suite

Fusion de chaînes de lignes dans QGIS à l'aide de PostgreSQL et PostGIS


Je dois fusionner toutes les chaînes de lignes d'une "rivière" de table PostgreSQL où pas plus de deux points de départ/fin se chevauchent. Dans l'illustration ci-dessous, j'utilise un "M" pour marquer toutes les chaînes de ligne qui doivent être fusionnées.

Malheureusement, je suis nouveau sur PostGIS. À ma connaissance, QGIS a besoin d'un id (gid) et d'une colonne de géométrie (geom) pour charger une table ou une vue. Mais je ne sais pas quelle fonction PostGIS fera le travail. Quelqu'un peut-il m'aider avec la requête SQL?


Il existe la fonction ST_LineMerge http://postgis.net/docs/manual-2.0/ST_LineMerge.html

Vous pouvez essayer de desservir tout votre réseau de rivières en une seule chaîne multiligneST_LineMerge(ST_Multi(St_Collect(geometry)))Le résultat est également un MultiLineString avec des segments cousus ensemble. Ainsi, après ST_LineMerge, vous pouvez obtenir des segments cousus via ST_Dump.


Pas testé, mais il pourrait vous donner ce que vous voulez. Aveccarrefoursvous obtenez ces identifiants et géométries qui se croisent avec d'autres. Et leSÉLECTIONNERdéclaration seraST_Uniontous ces enregistrements qui se coupent exactement avec deux autres géométries.ST_Dumps'assure que vous n'obtenez pas de MultiLinestrings en conséquence.

AVEC intersections AS ( SELECT l1.id, l1.wkb_geometry COUNT(1) FROM lignes l1 JOIN lignes l2 ON ST_Intersects(l1.wkb_geometry, l2.wkb_geometry) ET l1.id <> l2.id GROUP BY l1.id, l1. wkb_geometry ) SELECT ST_Dump(ST_Union(i.wkb_geometry)).geom wkb_geometry FROM intersections i WHERE count = 2 ;