[Qgis-developer] Vector Layer Generalization

pcreso at pcreso.com pcreso at pcreso.com
Fri May 25 16:26:17 PDT 2012


My 02c...

If you have a table with a geometry column, you can add a second geometry column for the simplified ones. As in the script below, for a national coastline with about 10,000 polygons

You can generate the simplified ones using a series of update SQL statements, based on a variety of criteria, including neighbouring (or not) via a ST_Distance() in the where clause.

If you hand craft the update SQL's, you can just copy rather than simplify smaller polygons (ST_Area in the where clause), etc.

A slowish way, but viable for a 1-off is to have a where clause with an ST_IsValid in the where clause testing the result of the simplification. If the where clause includes a test for the target geometry being not-null, the series can apply a large simplification initially, then progressively apply a decreasing simplifcation buffer to features that failed previous iterations, until the last statement copies any remaining features with zero simplification.

I prefer a script with a set of SQL's rather than a function, as it is easier to tweak case requirements. 

The advantage of this approach over the preserving topology simplify function is the degree of control the hand crafted SQL's provide over exactly how to simplify the dataset.

But, as always, your mileage may vary :-)

  Cheers,

      Brent Wood


#! /bin/bash
#
# script to simplify NZ coastline for zoom layer

DB=nzcoast
TAB=nz_all


# add new geometry column
psql -d $DB -c "alter table nz_all drop column simple_geom;"

psql -d $DB -c "alter table nz_all add column simple_geom geometry(multipolygon,4326);"


# populate
# do small islands with no simplification
psql -d $DB -qc "update nz_all
                set simple_geom=geom 
                where ST_Area(geom) < 0.0000000001;"
psql -d $DB -qc "update nz_all
                set simple_geom=ST_Simplify(geom, 0.001) 
                where simple_geom isnull
                  and ST_IsValid(ST_Simplify(geom, 0.001));"
psql -d $DB -qc "update nz_all
                set simple_geom=ST_Simplify(geom, 0.0001) 
                where simple_geom isnull
                  and ST_IsValid(ST_Simplify(geom, 0.0001));"
psql -d $DB -qc "update nz_all
                set simple_geom=ST_Simplify(geom, 0.00001) 
                where simple_geom isnull
                  and ST_IsValid(ST_Simplify(geom, 0.00001));"
psql -d $DB -qc "update nz_all
                set simple_geom=geom 
                where simple_geom isnull;"




--- On Sat, 5/26/12, Carson Farmer <carson.farmer at gmail.com> wrote:

From: Carson Farmer <carson.farmer at gmail.com>
Subject: Re: [Qgis-developer] Vector Layer Generalization
To: "Evgeniy Pashentsev" <ugnpaul at gmail.com>
Cc: qgis-developer at lists.osgeo.org
Date: Saturday, May 26, 2012, 10:11 AM

Excellent! Topology preserving simplification is something I've been
looking for!
> But I want to ask your advice on one thing. Is it normal for user
> to simplify all the features on a layer at once? I'm just not sure
> which way is more suitable for a regular user:
> - simplify all the features at once as it is now in my current prototype;
> - simplify selected feature and all the corresponding vertexes of
> the neighboring features;
> - or simplify only selected features;
> - or even something else.
> Although it is not very important for current work, I want to make sure
> I don't implement useless functionality.
Personally, I normally simplify an entire layer at once... for mapping
purposes, or simply to reduce drawing time or for computational/space
efficiency. It might be nice to also have the option to simplify
selected features only, but if this was an option, then I would expect
*only* those selected features to be simplified... and *not* their
neighbouring features...

That's my two cents anyway, looking forward to trying it out!

Carson


-- 
Dr. Carson J. Q. Farmer
Centre for GeoInformatics (CGI)
School of Geography and Geosciences
Irvine Building, University of St Andrews
St Andrews, Fife, KY16 9AL
Scotland, UK
_______________________________________________
Qgis-developer mailing list
Qgis-developer at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/qgis-developer/attachments/20120525/0a36bad8/attachment-0001.html


More information about the Qgis-developer mailing list