[postgis-users] Cut a hole in a line layer (opposite of a cookie cutter)??

Matt Doughty matt.doughty at geograma.com
Tue Jun 5 02:47:32 PDT 2007


I've tried carrying out a Difference, and Symdifference too, but without
any luck. I understand your explication, Martin, but I can't seem to get
it to work for me. 

First I tried with the polygon and lines, in order to delete from the
lines those segments that fall within the polygon. This returned a table
of lines much bigger (12,272 rows) than the original table (472 rows),
and didn't change the geometry of the lines within the polygon.

Then I tried deleting the line segments from the polygon, which I had
previously extracted with the cookie cutter, from the line layer. This
gave me fewer rows (11, 800) than the previous operation but still
didn't delete any line segments from within the polygon.

Meanwhile, the Symdifference function gave me the same results as the
Difference function.

Cheers,

Matt

 
 
Matt Doughty
 
GEOGRAMA S.L.
Tel.:  +34 945 13 13 72    652 77 14 15
Fax: +34 945 23 03 40 
www.geograma.com
 
 

-----Mensaje original-----
De: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] En nombre de
Martin Davis
Enviado el: lunes, 04 de junio de 2007 19:08
Para: PostGIS Users Discussion
Asunto: Re: [postgis-users] Cut a hole in a line layer (opposite ofa
cookiecutter)??

The documentation for the function syntax is here:

http://postgis.refractions.net/docs/ch06.html#id2527029

Basically difference(A, B) subtracts a geometry B from a geometry A, and

returns all the parts (point-sets) of A which are not covered (occur in)

B.  So in your case, you want to code up difference(line, polygon), 
which will return a MultiLineString which contains all the bits of line 
which aren't covered by the polygon.

Matt Doughty wrote:
> The 'Difference(geometry,geometry)' tool? I've had a look at that but
> could quite understand how it works and what the syntax was, the
PostGIS
> manual was particularly unhelpful. 
>
> I'll have another look the how I can take the difference, but in the
> meantime, if you've got any pointers...
>
> ... Matt
>  
>  
> Matt Doughty
>  
> GEOGRAMA S.L.
> Tel.:  +34 945 13 13 72    652 77 14 15
> Fax: +34 945 23 03 40 
> www.geograma.com
>  
>  
>
> -----Mensaje original-----
> De: postgis-users-bounces at postgis.refractions.net
> [mailto:postgis-users-bounces at postgis.refractions.net] En nombre de
> Martin Davis
> Enviado el: lunes, 04 de junio de 2007 17:53
> Para: PostGIS Users Discussion
> Asunto: Re: [postgis-users] Cut a hole in a line layer (opposite of a
> cookiecutter)??
>
> You could form the union of the "mask" polygons and then use the 
> difference function to obtain the portion of each line which lies 
> outside them.
>
> This assumes of course that your polygon layer isn't too big. If it is

> very big, you may need to use the approach of taking the difference of

> every line from the union of the polys which interact with that line. 
> This might be slow, however.
>
> Matt Doughty wrote:
>   
>> Hi,
>>
>> I've got a new problem... how in PostGIS could I perform the opposite
>>     
> of 
>   
>> a cookie cutting operation? Better said, use a polygon layer to cut a

>> hole in a line layer thereby keeping the lines from outside the 
>> polygons but not those inside. I've been trying with a cooking
cutting
>>     
>
>   
>> script (see below) by placing NOT before the operators but without 
>> much luck.
>>
>> SELECT
>>
>> cookie.gid,
>>
>> INTERSECTION(cookie.the_geom, cutter.the_geom) AS the_geom
>>
>> INTO
>>
>> curvas_isla_not_02
>>
>> FROM
>>
>> roads AS cookie,
>>
>> urban_areas AS cutter
>>
>> WHERE
>>
>> cookie.the_geom && cutter.the_geom
>>
>> AND
>>
>> INTERSECTS(cookie.the_geom, cutter.the_geom)
>>
>> I've also tried to use the results from the cookie cutter script to 
>> select those lines that don't coincide with those from the cookie
(see
>>     
>
>   
>> below), but also without any luck.
>>
>> SELECT
>>
>> roads.gid,
>>
>> roads.the_geom
>>
>> INTO
>>
>> roads_not_urban
>>
>> FROM
>>
>> roads,
>>
>> roads_urban
>>
>> WHERE
>>
>> roads.the_geom && roads_urban.the_geom
>>
>> AND
>>
>> NOT INTERSECTS(roads.the_geom, roads_urban.the_geom);
>>
>> If anybody's got any tips on how to do this, or advice on where I'm 
>> going wrong....!
>>
>> Many thanks,
>>
>> Matt
>>
>> Matt Doughty
>>
>> 	
>>
>> GEOGRAMA S.L.
>>
>> Tel.: +34 945 13 13 72 652 77 14 15
>>
>> Fax: +34 945 23 03 40
>>
>> www.geograma.com
>>
>> 	
>>
>>
>>     
>
------------------------------------------------------------------------
>   
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>   
>>     
>
>   

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022

_______________________________________________
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