[postgis-users] ST_Simplify

Kevin Neufeld kneufeld at refractions.net
Fri Oct 22 09:13:20 PDT 2010


I don't see any pdf posted, but that's ok, I get the idea.

Isn't that interesting.  To me, this looks like a robustness issue with 
ST_Simplify.  Here, the starting point of the polygon's exterior ring is 
not on the corner.

select
   st_astext(
     st_simplify(
       'POLYGON ((
         25 300,
         275 300,
         300 300,
         300 275,
         300 25,
         300 0,
         275 0,
         25 0,
         0 0,
         0 25,
         0 275,
         0 300,
         25 300
        ))', 1
     )
   );
                     st_astext
--------------------------------------------------
  POLYGON((25 300,300 300,300 0,0 0,0 300,25 300))
(1 row)

I don't know why, but I too was expecting to see something like:
POLYGON (( 0 300, 300 300, 300 0, 0 0, 0 300 ))

You almost could use a function that shifts the ordinates in the 
exterior linear ring ... you could probably put something together 
fairly quickly in plpgsql (extract the exterior ring, use ST_GetPointN 
and ST_SetPointN, and rebuild the polygon).
Once shifted, the starting ordinance would be on the corner and the (25 
300) vertex would disappear with a rerun of ST_Simplify.

JTS has the same issue.

-- Kevin


On 10/22/2010 2:33 AM, lplateandy wrote:
> Hi Kevin,
>
> Hopefully the attached (hopefully) PDF will help to show what i mean.
>
> In producing the PDF i think i can see why the issue happens. It seems that
> the start and end point of the polygon geometery are the node i was hoping
> might be removed during the simplify process.
>
> Not sure if there is a way around this?
>
> I do realise there are ways for a simple rectangle etc to fix this but the
> example is mainly for illustration as the issue is a problem in more complex
> geometries.
>
> Thanks
>
> Andy
>
>
> Kevin Neufeld wrote:
>> Hi Andy,
>>
>> Can you post a small example?
>> -- Kevin
>>
>>
>> On 10/21/2010 10:02 AM, lplateandy wrote:
>>> Hi,
>>>
>>> I have, in the simplest example, a square polygon of 1 by 1 kilometer
>>> size
>>> with nodes every 25 meters.
>>>
>>> I can use ST_Simplify (the_geom,5) to remove most of the points.
>>>
>>> However, for some reason i end up with the four corner nodes and a fifth
>>> node 25m clockwise from the top left corner.
>>>
>>> In itself, this would be fine - 5 nodes is better than 160.
>>>
>>> However, on some of the polygons, there are more complex boundaries which
>>> i
>>> wish to smooth out using simplify. I would do this with  ST_Simplify
>>> (the_geom,26) example - going over the minimum 25 metres between  any
>>> nodes.
>>>
>>> In the example of the square with 5 nodes, the problem i find then is
>>> that
>>> the top left node is removed and the one 25m clockwise remains. The
>>> result
>>> is that i no longer have a 1km square but sloping Western boundary
>>> correctly
>>> going 1km North South but incorrectly veering across 25m to the East.
>>>
>>> Is there a way to remove the stray node so i am more likely to maintain
>>> my
>>> overall polygon shape. I did try st_simplifiypreservetopology but saw no
>>> noticeable difference.
>>>
>>> Hope that makes sense, any help much appreciated
>>>
>>> Andy
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>>
> http://old.nabble.com/file/p30027046/ST_simplify_issue.pdf
> ST_simplify_issue.pdf



More information about the postgis-users mailing list