[postgis-users] How to calculate the symmetric difference oflinestrings and polygons (i.e. linestrings which do notintersect polygons)

Stefan Keller sfkeller at gmail.com
Mon Feb 21 15:36:32 PST 2011


Right.

I got something like this

SELECT ST_Astext(ST_Difference(ln1.geometry, ln2.geometry))
FROM
  streets ln1,
  (SELECT ST_Intersection(streets.geometry, forests.geometry) as geometry
   FROM streets, forests
   WHERE (ST_Intersects(streets.geometry, forests.geometry)
           OR ST_Contains(forests.geometry, streets.geometry))
   AND NOT ST_Touches(streets.geometry, forests.geometry)
  ) ln2
WHERE ST_Intersects(ln1.geometry, ln2.geometry)

Yours, S.

2011/2/20 Nicolas Ribot <nicolas.ribot at gmail.com>:
> On 1 February 2011 00:55, Randall, Eric <ERandall at eriecountygov.org> wrote:
>> I guess what I meant was:
>>
>> select st_difference(streets,st_intersection(streets,forests)) as streets
>> from streets, forests
>> where st_intersects(streets,forests)
>> union
>> select streets
>> from streets, forests
>> where not st_intersects(streets,forests)
>>
>
> Isn't it something like:
>
> select st_difference(
>        streets.geometry,
>        st_intersection(
>                streets.geometry,
>                forests.geometry)) as streets
> from streets, forests
> where st_intersects(streets.geometry,forests.geometry)
> UNION
> select streets.geometry
> from streets
> where streets.gid not in
> (select streets.gid from streets, forests
> where st_intersects(streets.geometry,forests.geometry));
>
> Otherwise, the negation of st_intersects in the second query returns
> false positives
>
> Nicolas
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>



More information about the postgis-users mailing list