Suite

Diviser une table de multi/chaînes de lignes en chaînes de lignes uniques

Diviser une table de multi/chaînes de lignes en chaînes de lignes uniques


Existe-t-il un moyen efficace de diviser une table de Multi/Linestrings qui se chevauchent () et touchent () en Linestrings uniques (remarque : la création d'arêtes à l'aide de la topologie est très… très… très lente).

Voici quelques exemples de données avec lesquelles j'ai joué…

CREATE TABLE multilines ( "id" SERIAL NOT NULL PRIMARY KEY, "name" char(1) NOT NULL, "the_geom" geometry NOT NULL ); -- ajouter des données, 3 multilignes, UN des geoms 'B' a une chaîne multiligne intérieure 'donut hole' INSERT INTO multilines(name, the_geom) VALUES ( 'A', 'MULTILINESTRING((2 1,0 3),(0 3,2 3),(2 3,2 1))'::geometry ), ( 'B', 'MULTILINESTRING((0 0,4 0),(4 0,4 ​​4),(4 4,0 4 ),(0 4,0 0),(1 1,2 1),(2 1,2 2),(2 2,1 2),(1 2,1 1))'::geometry ), ( ' B', 'CHAÎNE MULTILIGNE((-1 -1,-1 -2),(-1 -2,-2 -2),(-2 -2,-2 -1),(-2 -1,-1 -1))'::géométrie );

Comme je n'ai pas de table de nœuds indiquant où se trouvent les intersections (et qu'il semble intuitivement inefficace d'en générer une), j'espérais simplement le faire sans générer une autre table (ce que la plupart des personnes effectuant ce type de requête semblent faire).

Notamment… quand je fais quelque chose comme 'ST_Linemerge(st_collect(the_geom))'… j'obtiens 1 ligne montrant TOUTES les lignes fusionnées (ce qui n'est pas ce que je voudrais - je veux absolument diviser les lignes en Multi et/ou Linestrings, et exécutez une requête DISTINCT juste pour renvoyer l'un des_geoms).


Vous pouvez utiliser la requête suivante pour unir la géométrie, rechercher tous les nœuds et diviser les lignes :

SELECT row_number() OVER() new_id, geom FROM (SELECT (ST_Dump(ST_Node(ST_Union(the_geom)))).geom geom FROM multilines) a

Ensuite, vous devez jouer un petit peu pour récupérer les attributs d'origine en rejoignant le tableau précédent sur "contient" ou "à l'intérieur".


Voir la vidéo: Comptines pour enfants - La Table de 7 apprendre les tables de multiplication