-- Vereinfachung der Geometrie mit der PostGIS-Function ST_Simplify -- Stand 2010-10-11 -- Kommentar siehe Datei "alkis_geom_simplify.sql" -- Siehe Diskussion auf der Mailingliste -- http://www.postgis.org/documentation/manual-1.3/ch06.html#id2575027 -- ST_Simplify(geometry, tolerance) -- Returns a "simplified" version of the given geometry using the Douglas-Peuker algorithm. -- Will actually do something only with (multi)lines and (multi)polygons but you can safely call it with any kind of geometry. -- Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function. -- Note that returned geometry might loose its simplicity (see IsSimple) -- geeignete Tabellen für die Optimierung: CREATE VIEW simplify_optimierbare_tabellen AS SELECT f_table_name, type FROM geometry_columns WHERE not f_geometry_column = 'dummy' AND type in ('LINESTRING', 'POLYGON', 'MULTIPOLYGON'); -- ,'GEOMETRY' ? -- liefert u.a.: -- --"ax_flurstueck" "MULTIPOLYGON" --"ax_wald" "POLYGON" --"ax_wohnbauflaeche" "POLYGON" -- einfacher Test der Function CREATE VIEW flst_simple AS SELECT gml_id, flurstueckskennzeichen, st_simplify(wkb_geometry, 0.01) AS geom_simple FROM ax_flurstueck LIMIT 200; -- Mengenanalyse zum Finden der passenden Toleranz -- Je eine Spalte zaehlt die durchschnittliche Anzahl von Punkten im Geometriefeld -- Anzezeigt wird: ursprüngliche Anzahl und Simplify mit 1mm, 1cm und 5 cm. -- Flurstueck CREATE VIEW analyse_simple_flst AS SELECT count(gml_id) AS anzahl, round(avg(ST_npoints(wkb_geometry)),2) AS punktanzahl_orig, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.001))),2) AS punktanzahl_simply_mm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.01))),2) AS punktanzahl_simply_cm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.05))),2) AS punktanzahl_simply_5cm FROM ax_flurstueck ; -- Nutzungsart Wald CREATE VIEW analyse_simple_wald AS SELECT count(gml_id) AS anzahl, round(avg(ST_npoints(wkb_geometry)),2) AS punktanzahl_orig, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.001))),2) AS punktanzahl_simply_mm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.01))),2) AS punktanzahl_simply_cm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.05))),2) AS punktanzahl_simply_5cm FROM ax_wald ; -- Nutzungsart Wohnflaeche CREATE VIEW analyse_simple_wohn AS SELECT count(gml_id) AS anzahl, round(avg(ST_npoints(wkb_geometry)),2) AS punktanzahl_orig, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.001))),2) AS punktanzahl_simply_mm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.01))),2) AS punktanzahl_simply_cm, round(avg(ST_npoints(st_simplify(wkb_geometry, 0.05))),2) AS punktanzahl_simply_5cm FROM ax_wohnbauflaeche ; -- -- Tabelle Anz.Punkte 1 mm 1 cm 5 cm -- ----------------- -------- ------ ------ ------ ------ -- Musterkarte RLP: -- ax_flurstueck 2369 20.45 10.24 9.06 8.80 -- ax_wald 89 20.70 11.53 11.15 11.08 -- ax_wohnbauflaeche 76 28.37 12.59 11.53 10.91 -- Lage/Lippe: -- ax_flurstueck 23589 30.55 12.60 11.57 11.08 -- ax_wald 1207 61.44 27.88 27.24 26.28 -- ax_wohnbauflaeche 2357 44.41 18.60 16.55 15.54 -- Die Mengenanalyse zeigt eine grosse Optimierung bereits im Millimeter-Bereich. -- END --