I need to cut different lines with an identical geometry but different attributes (eg. colour) with a set of points. The points also have the attribute colour.
My knife points should only cut the lines with the same colour value. Red points should cut only red lines, green points should only cut green lines and so on...
I tried the following:
with knife as(
select st_union(geom) as geom, colour
from points
group by colour)
select lines.colour,(st_dump(st_split(lines.geom,knife.geom))).geom as geom
from lines, knife
where lines.colour=knife.colour
Sadly, my 'selective knife' isn't so selective and cuts all lines regardless of their colour. Can anybody help?
Edit:
@JimJones I couldn't find a SQL-fiddle that supports the PostGIS extension. But with my data sample the knife somehow works perfectly.
I have no idea why whats wrong with my real data. The real data lines are in fact multilinestrings, could that be a problem? (I somehow struggling in creating multilinestrings with the insert-statement)
Edit2:
found a fiddle with PostGIS
db<>fiddle here
create table points(
id serial,
colour varchar,
geom geometry(point,4326)
);
create table lines(
id serial,
colour varchar,
geom geometry(linestring,4326)
);
insert into lines(colour, geom)
VALUES
('red','linestring(1 1,10 1)'),
('green','linestring(1 1,10 1)'),
('blue','linestring(1 1,10 1)');
insert into points(colour, geom)
VALUES
('red',(st_makepoint(2,1))),
('red',(st_makepoint(4,1))),
('red',(st_makepoint(6,1))),
('red',(st_makepoint(8,1))),
('green',(st_makepoint(2.5,1))),
('green',(st_makepoint(5,1))),
('green',(st_makepoint(7.5,1))),
('blue',(st_makepoint(3,1))),
('blue',(st_makepoint(6,1))),
('blue',(st_makepoint(9,1)));
with knife as(
select st_union(geom) as geom, colour
from points
group by colour)
select lines.colour,(st_dump(st_split(lines.geom,knife.geom))).geom as geom
from lines, knife
where lines.colour=knife.colour
´´´
[1]: https://dbfiddle.uk/?rdbms=postgres_12&fiddle=8642640bb690dfee7d31006a673e2dcf