[postgis-users] Retrieve the portion of line external to polygon
Birgit Laggner
birgit.laggner at vti.bund.de
Thu Feb 17 01:17:41 PST 2011
Hi strk,
sorry to disturb your discussion, but I am interested in this st_snap()
function you mention. I did not found it - is this something in PostGIS 2.0?
Regards,
Birgit.
On 16.02.2011 19:18, strk wrote:
> On Wed, Feb 16, 2011 at 07:08:03PM +0100, strk wrote:
>> On Wed, Feb 16, 2011 at 06:47:53PM +0100, Andrea Peri wrote:
>>> Look this simple example
>>>
>>> the difference between the line and the same line intersected with the
>>> polygon is equal to the line :)
>>>
>>> select 1, ST_Difference(ST_GeomFromText('LINESTRING(10.9 2, 11
>>> 8)'),ST_Intersection(ST_GeomFromText('LINESTRING(10.9 2, 11 8)'),
>>> ST_GeomFromText('POLYGON((12 2, 10 10, 20 21, 21 5, 12 2))')))
>>>
>>> the trick is that in the intersection point between polygon and line, the
>>> vertex added move the line so the difference fail to
>>> remove the internal portion.
>> Ok, I think I know what's going on.
>> The original linestring isn't noded with the polygon boundary.
>> When computing the intersection, a node is added.
>> Such a node will NOT fall on the original line anymore, due
>> to precision constraints.
>>
>> See this:
>> CREATE TABLE a AS SELECT
>> 'LINESTRING(10.9 2, 11 8)'::geometry as g;
>> CREATE TABLE b AS SELECT
>> 'POLYGON((12 2, 10 10, 20 21, 21 5, 12 2))'::geometry as g;
>> CREATE TABLE c AS SELECT
>> ST_Intersection(a.g, b.g) FROM a, b;
>> SELECT ST_Covers(a.g, ST_StartPoint(c.g)) FROM a,c; -- false
>> SELECT ST_Covers(a.g, ST_EndPoint(c.g)) FROM a,c; -- true
>>
>> What you could do is _snap_ the original line to the intersection,
>> or to node the input before proceeding.
> For a working example:
> select st_covers(a.g, st_startpoint(st_snap(a.g,c.g,1e-10))) from a,c;
>
> --strk;
>
> () Free GIS& Flash consultant/developer
> /\ http://strk.keybit.net/services.html
> _______________________________________________
> 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