I have a PostGIS Table with LINESTRINGS.
I look for a query that returns all Roads that are connected. So I get a set of unconnected trees (in german 'Wald (Graphentheorie)')
pseudo code:
select array_to_string(array_agg(id),', ') from roads
group by ST_Intersection;
e.g.:
in table:
id | way
----+-------------------------
1 | LINESTRING(1 3,2 4)
2 | LINESTRING(1 3,1 0)
3 | LINESTRING(11 13,12 14)
4 | LINESTRING(2 4,0 1)
5 | LINESTRING(11 13,11 10)
6 | LINESTRING(6 12,8 7)
result:
id
-------
1, 2, 4
3, 5
For Testing in DB:
SELECT DropGeometryTable ( 'roads' );
CREATE TABLE roads (
id integer
);
SELECT AddGeometryColumn('public','roads','way','900913','LINESTRING',2);
INSERT INTO roads (id ,way) VALUES (1,GeometryFromText ( 'LINESTRING (1 3, 2 4)', 900913 ) );
INSERT INTO roads (id ,way) VALUES (2,GeometryFromText ( 'LINESTRING (1 3,1 0)', 900913 ) );
INSERT INTO roads (id ,way) VALUES (3,GeometryFromText ( 'LINESTRING (11 13,12 14)', 900913 ) );
INSERT INTO roads (id ,way) VALUES (4,GeometryFromText ( 'LINESTRING (2 4,0 1)', 900913 ) );
INSERT INTO roads (id ,way) VALUES (5,GeometryFromText ( 'LINESTRING (11 13,11 10)', 900913) );
INSERT INTO roads (id ,way) VALUES (6,GeometryFromText ( 'LINESTRING (6 12,8 7)', 900913 ) );