[postgis-users] Simplifying a multipolygon layer, keeping polygon connection
Sandro Santilli
strk at keybit.net
Wed Apr 11 05:27:14 PDT 2012
On Wed, Apr 11, 2012 at 02:21:15PM +0200, Sandro Santilli wrote:
> On Wed, Apr 11, 2012 at 01:40:01PM +0200, Nicolas Ribot wrote:
>
> > Method 1: using one SQL query:
> >
> > select (st_dump(st_polygonize(distinct geom))).geom as geom
> > from (
> > select (st_dump(st_simplifyPreserveTopology(st_linemerge(st_union(geom)),
> > 10000))).geom as geom
> > from (
> > select st_exteriorRing((st_dumpRings(geom)).geom) as geom
> > from expl_dep
> > ) as foo
> > ) as bar;
> >
> > -- takes 6.1 to 6.4 seconds
>
> ...
>
> > Method 2, using topology wrapped in a function:
> > (topo1 and topo2 are created outside the function):
> >
> > create or replace function testSimplTopo() returns text as $$
> >
> > select ST_CreateTopoGeo('topo1',ST_Collect(geom))
> > from expl_dep;
> >
> > select ST_CreateTopoGeo('topo2', geom)
> > from (
> > select ST_Collect(st_simplifyPreserveTopology(geom, 10000)) as geom
> > from topo1.edge_data
> > ) as foo;
> >
> > $$ language sql;
> >
> > -- takes 12.0 to 12.3 seconds.
>
> Why are you populating 'topo1' topology at all ?
> You're doing the hard work twice, which matches the double
> time it takes compared with the direct call.
Ok, I see you're using 'topo1' as input for the simplification.
Instead you may want to simplify the input directly:
select ST_CreateTopoGeo('topo1', ST_Collect(
ST_SimplifyPreserveTopology(geom, 10000)
))
from expl_dep;
--strk;
,------o-.
| __/ | Delivering high quality PostGIS 2.0 !
| / 2.0 | http://strk.keybit.net - http://vizzuality.com
`-o------'
More information about the postgis-users
mailing list