[postgis-users] How to calculate the symmetric difference of linestrings and polygons (i.e. linestrings which do not intersect polygons)
Stefan Keller
sfkeller at gmail.com
Sat Jan 29 18:04:00 PST 2011
Hi,
Given streets linestrings and forest polygons, think of all streets
segments which are *not* inside forest areas.
How can I calculate all segments from linestrings which do not
intersect polygons?
Any ideas?
- S.
Attempt 1: ST_SymDifference sounds good! But even this equivalent
produces nonsense:
# SELECT ST_AsText(
ST_CollectionExtract(ST_Difference(ST_Union(ls.way,po.way),
ST_Intersection(ls.way,po.way)),2) )
FROM linestring ls, polygon po
Attempt 2:
# SELECT ST_AsText(ST_Intersection(ls.way, po.way)) FROM linestring
ls, polygon po
gives me all streets *inside* forests. But I'd like get the
"remainder" in between...
Attempt 3:
# SELECT ST_AsText(ST_Difference(ls.way, po.way)) FROM linestring ls, polygon po
gives me two displaced lines for each street (because the resultse
contains the difference between one line and one polygon), Thesse two
could be intersected - but ST_Intersection of two overlapping lines
(with same nodes except end nodes) does'nt seem to work.
Attempt 4:
In a very desperate idea, I calculcated the extent of both tables in
order generate a huge boundary polygon with has as many wholes as
there are polygons. Then I could do an ST_Intersect of this big swiss
cheese polygon with the lines - but no luck.
Attempt 5:
I finally tried to dump all points from Attempt 2 (intersection) to
get hold of the boarder points where lines and polygons cross.
But when tried to split a line at a point and to sort out all lines
outside polygons things got again complicated..
More information about the postgis-users
mailing list