source: trunk/data/konvert/postnas_0.5/alkis_geom_simplify.sql @ 163

Revision 53, 7.1 KB checked in by frank.jaeger, 13 years ago (diff)
Line 
1
2-- ----------------------------------------------------------------
3-- Vereinfachung der Geometrie mit der PostGIS-Function ST_Simplify
4-- ----------------------------------------------------------------
5
6-- ALKIS / PostNAS 0.5
7
8-- "Tuning" der Anwendung durch Reduktion der Datenmenge.
9-- "Unnötige" Zwischenpunkte in der Geometrie werden entfernt.
10-- Für die Kartendarstellung hat das keine Qualitätseinbußen, weil die Toleranzwerte
11-- weit unterhalb der Darstellungsgenauigkeit liegen.
12-- Es kann aber Probleme geben bei Rechenoperationen mit den Flächen weil vorher "genau" übereinander
13-- liegende Geometrien möglicherweise unterschiedlich reduziert werden.
14-- Bei einem Objekt ist ein Zwischenpunkt vielleicht unnötig weil der Umring gerade weiter läuft.
15-- Bei einem anderen Objekt zweigt der Umring aber ab, so das der Punkt nicht entfernt wird.
16-- Dabei kann eine winzige Abweichung entstehen, die bei Verschneidungen zu etwas anderen Ergebnissen führt.
17-- Die Abweichungen sind nur gering aber mathematisch gilt eben:  "0.0 <> 0.000001".
18-- Dies ist bei der Gestaltung von Anwendungen zu berücksichtigen.
19
20
21-- Stand
22
23-- 2010-10-11
24--  erstmalige Anwendung, Toleranz 2 mm
25
26-- 2010-10-11
27--  Reduzierung auf 1 mm. Es sollen nur Zwischenpunkte "in der Geraden" entfernt werden.
28--  Der Toleranzwert soll nur die Rundungsungenauigkeiten enthalten.
29--  Es kann Probleme geben bei Verschneidung von Flächen. Die PostGIS-Function "st_intersects"
30--  liefert auch Flächen, die sich am Rand berühren.
31--  Wenn wirklich nur überlappende Flächen gewünscht sind, dann müssen diese mit
32--     "st_area(st_intersection(a.geom,b.geom)) > 0"
33--  heraus gefiltert werden.
34--  Nach Anwendung dieses Simplify-Scriptes ist aber 0 nicht mehr 0. Es muss statt dessen mit
35--  (etwas schwammigen) Grenzwerten gearbeitet werden.
36--  Wenn z.B. die Ergebnis-Fläche sowieso auf eine Nachkommastelle gerundet wird, dann kann als Schwellwert
37--     "st_area(st_intersection(a.geom,b.geom)) > 0.05"
38--  verwendet werden. Es werden dann keine Flächen angezeigt, die gerundet als '0.0' angezeigt würden.
39--  Im Zweifelsfall, z.B. wenn mit der Datenbank sehr viele Verschneidungen präzise berechnet werden solllen,
40--  sollte dieses Script nicht verwendet werden.
41
42
43-- 2010-11-10
44--  neue Tabelle "nutzung"
45
46
47-- Mengenanalyse siehe file "alkis_test_simplify.sql".
48
49
50-- Daten im Geometriefeld optimieren:
51
52UPDATE "ap_lpo"
53SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
54
55UPDATE "ax_leitung"
56SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
57
58UPDATE "ax_transportanlage"
59SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
60
61UPDATE "ax_besondereflurstuecksgrenze"
62SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
63
64UPDATE "ax_wald"
65SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
66
67UPDATE "ax_gehoelz"
68SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
69
70UPDATE "ax_fliessgewaesser"
71SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
72
73UPDATE "ax_stehendesgewaesser"
74SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
75
76UPDATE "ax_wohnbauflaeche"
77SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
78
79UPDATE "ax_sportfreizeitunderholungsflaeche"
80SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
81
82UPDATE "ax_landwirtschaft"
83SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
84
85UPDATE "ax_strassenverkehr"
86SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
87
88UPDATE "ax_weg"
89SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
90
91UPDATE "ax_flaechegemischternutzung"
92SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
93
94UPDATE "ax_industrieundgewerbeflaeche"
95SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
96
97UPDATE "ax_flaechebesondererfunktionalerpraegung"
98SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
99
100UPDATE "ax_platz"
101SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
102
103UPDATE "ax_halde"
104SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
105
106UPDATE "ax_bergbaubetrieb"
107SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
108
109UPDATE "ax_tagebaugrubesteinbruch"
110SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
111
112UPDATE "ax_friedhof"
113SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
114
115UPDATE "ax_flugverkehr"
116SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
117
118UPDATE "ax_schiffsverkehr"
119SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
120
121UPDATE "ax_bahnverkehr"
122SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
123
124UPDATE "ax_hafenbecken"
125SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
126
127UPDATE "ax_heide"
128SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
129
130UPDATE "ax_moor"
131SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
132
133UPDATE "ax_sumpf"
134SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
135
136UPDATE "ax_unlandvegetationsloseflaeche"
137SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
138
139UPDATE "ax_besonderegebaeudelinie"
140SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
141
142UPDATE "ax_gebaeude"
143SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
144
145UPDATE "ax_bauteil"
146SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
147
148UPDATE "ax_bauwerkoderanlagefuersportfreizeitunderholung"
149SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
150
151UPDATE "ax_bauwerkimgewaesserbereich"
152SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
153
154UPDATE "ax_turm"
155SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
156
157UPDATE "ax_vorratsbehaelterspeicherbauwerk"
158SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
159
160UPDATE "ax_klassifizierungnachwasserrecht"
161SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
162
163UPDATE "ax_naturumweltoderbodenschutzrecht"
164SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
165
166UPDATE "ax_bewertung"
167SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
168
169UPDATE "ax_klassifizierungnachstrassenrecht"
170SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
171
172UPDATE "ax_schutzzone"
173SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
174
175UPDATE "ax_bodenschaetzung"
176SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
177
178UPDATE "ax_bauraumoderbodenordnungsrecht"
179SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
180
181UPDATE "ax_denkmalschutzrecht"
182SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
183
184UPDATE "ax_anderefestlegungnachwasserrecht"
185SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
186
187
188-- Zusammen gefasste Nutzungarten
189UPDATE "nutzung"
190SET    wkb_geometry = st_simplify(wkb_geometry, 0.001);
191
192
193-- Vaccum der Datenbank ist notwendig um die gewonnen Reduzierung endgueltig zu erschließen.
194
195
196-- Fuer weitere Fortfuehrungen (NBA-Verfahren) einen Trigger einrichten?
197
198-- Function zum Simplifizieren des Geometriefeldes:
199--    CREATE OR REPLACE FUNCTION axsimlify()
200--      RETURNS TRIGGER AS
201--    $$
202--    BEGIN
203--      NEW.wkb_geometry := ST_Simplify(NEW.wkb_geometry, 0.001); -- Toleranz 1 Millimeter
204--      RETURN NEW;
205--    END;
206--    $$
207--    LANGUAGE 'plpgsql';
208
209
210-- fuer alle Tabellen:
211
212--    CREATE TRIGGER axsimplify
213--      BEFORE INSERT ON ax_wohnbauflaeche
214--      FOR EACH ROW EXECUTE PROCEDURE axsimlify();
215
216
217-- weitere. Liste wie oben ....
218
219
220-- END --
Note: See TracBrowser for help on using the repository browser.