ha! Neat trick, Brent.

On Mar 10, 2012, at 3:26 PM, pcr...@pcreso.com wrote:

> Hi Nicolas,
> 
> Change your SQL to insert a buffered version of your polygon with a buffer 
> distance of zero. You should get a topologically correct polygon (in this 
> particular case anyway), which is a tracing of the perimeter with any 
> duplicate vertices resolved.
> 
> eg: 
> 
> insert into test_polygon (id,geometry) values (1,ST_buffer(ST_GeomFromText(
> 'POLYGON((...))'),0.0));
> 
> Cheers,
> 
>   Brent Wood
> 
> --- On Sun, 3/11/12, Nicolas Ribot <nicolas.ri...@gmail.com> wrote:
> 
> From: Nicolas Ribot <nicolas.ri...@gmail.com>
> Subject: Re: [postgis-users] How to make this invalid polygon valid one
> To: "PostGIS Users Discussion" <postgis-users@postgis.refractions.net>
> Date: Sunday, March 11, 2012, 9:45 AM
> 
> Hello
> 
> I am trying to create a buffer around my polygon, which unfortunately is not
> a valid one.
> (reason: "Self-intersection[......]").
> 
> This polygon is the output of my calculation that creates from a set of
> connected edges an area, consisting of all edges located on the border.
> 
> http://postgis.17.n6.nabble.com/file/n4564623/Screen_Shot_2012-03-09_at_10.02.41_PM.png
> Polygon image
> 
> can someone tell me, what can I do, to remedy this behavior and to make this
> geometry valid
> 
> this are the sql statements to reproduce my problem:
> http://postgis.17.n6.nabble.com/file/n4564623/testPolygon.sql
> testPolygon.sql
> 
> thanks
> 
> Markus
> 
> 
> 
> Hi Markus,
> 
> An attempt with Pgis 1.5.3:
> 
> I saw in a Paul's presentation the power of unioning linestrings together, in 
> order to generated several line where they intersects 
> (http://2010.foss4g.org/presentations_show.php?id=3369)
> 
> The goal is to use duplicate points from the initial polygon to allow us to 
> make the difference between these points and the exterior ring of the 
> polygon, to generates several linestrings that can be passed to st_buildArea:
> 
> The first part (with...) extracts duplicate points (cf img1)
> 
> with duplicates as (
>       select st_collect((st_dumppoints(geometry)).geom) as point
>        from test_polygon 
>        group by (st_dumppoints(geometry)).geom
>        having count((st_dumppoints(geometry)).geom)>1
>  ) 
>  select st_buildarea (
>       st_union(st_difference(st_exteriorRing(t.geometry), point))  
>  ) from duplicates, test_polygon t;
> 
> The result (img2) is a multipolygon that can be dumped to extract individual 
> parts, or directly buffered.
> (the query is not at all optimized ;) )
> 
> Nicolas
> 
> -----Inline Attachment Follows-----
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users@postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
> _______________________________________________
> postgis-users mailing list
> postgis-users@postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to