[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