source: trunk/import/pp_gebiete.sql @ 354

Revision 354, 7.2 KB checked in by frank.jaeger, 8 years ago (diff)

Die Uebersichten (vereinfachte Geometrie) fuer Flur, Gemarkung und Gemeinde werden nicht mehr bei jeder Aktualisierung neu generiert. Dadurch wird das Post-Processing etwas beschleunigt.

Line 
1
2-- ALKIS PostNAS 0.8
3
4-- Post Processing (pp_) Teil 2 B: Laden der Tabellen fÃŒr Gebiete
5
6-- Stand
7--  2015-10-27 Die Erzeugung der vereinfachten Geometrie von Gemeinde, Gemarkung und Flur
8--             wird von "pp_laden.sql" ausgegliedert in dies Script "pp_gebiete.sql".
9--             Dieses Script braucht NICHT nach jeder Aktualisierung der Datenbank laufen.
10
11-- Geometrie glÀtten und vereinfachen fÌr Flur, Gemarkung und Gemeinde:
12-- Die "simplen" Geometrien sollen nur fÃŒr die Darstellung einer Übersicht verwendet werden.
13-- Ablage der simplen Geometrie in einem alternativen Geometriefeld im gleichen Datensatz.
14
15SET client_encoding = 'UTF-8';
16
17-- Tabellen fuer die Zuordnung vom Gemarkungen zu Gemeinden
18-- ========================================================
19
20-- FÃŒr die Regelung der Zugriffsberechtigung einer Gemeindeverwaltung auf die
21-- FlurstÃŒcke in ihrem Gebiet braucht man die Information, in welcher Gemeinde eine Gemarkung liegt.
22-- 'ax_gemeinde' und 'ax_gemarkung' haben aber im ALKIS keinerlei Beziehung zueinander - kaum zu glauben!
23-- Nur ÃŒber die Auswertung der FlurstÃŒcke kann man die Zuordnung ermitteln.
24-- Da nicht stÀndig mit 'SELECT DISTINCT' sÀmtliche FlurstÌcke durchsucht werden können,
25-- muss diese Information als (redundante) Tabelle nach dem Laden zwischengespeichert werden.
26
27
28-- G E M A R K U N G
29
30TRUNCATE pp_gemarkung;
31-- Vorkommende Paarungen Gemarkung <-> Gemeinde in ax_Flurstueck
32INSERT INTO pp_gemarkung
33  (               land, regierungsbezirk, kreis, gemeinde, gemarkung       )
34  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
35  FROM            ax_flurstueck
36  WHERE           endet IS NULL
37  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer ;
38
39-- Namen der Gemarkung dazu als Optimierung bei der Auskunft
40UPDATE pp_gemarkung a
41   SET gemarkungsname =
42   ( SELECT b.bezeichnung
43     FROM    ax_gemarkung b
44     WHERE a.land=b.land
45       AND a.gemarkung=b.gemarkungsnummer
46       AND b.endet IS NULL
47   );
48
49
50-- G E M E I N D E
51
52TRUNCATE pp_gemeinde;
53-- Vorkommende Gemeinden aus den Gemarkungen
54INSERT INTO pp_gemeinde
55  (               land, regierungsbezirk, kreis, gemeinde)
56  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde
57  FROM            pp_gemarkung
58  ORDER BY        land, regierungsbezirk, kreis, gemeinde;
59
60-- Namen der Gemeinde dazu als Optimierung bei der Auskunft
61UPDATE pp_gemeinde a
62   SET gemeindename =
63   ( SELECT b.bezeichnung
64     FROM    ax_gemeinde b
65     WHERE a.land=b.land
66       AND a.regierungsbezirk=b.regierungsbezirk
67       AND a.kreis=b.kreis
68       AND a.gemeinde=b.gemeinde
69       AND b.endet IS NULL
70   );
71
72
73-- Geometrien der FlurstÃŒcke schrittweise zu groesseren Einheiten zusammen fassen
74-- ==============================================================================
75-- http://postgis.net/docs/manual-1.5/ST_Union.html (Aggregate version)
76-- http://postgis.net/docs/manual-1.5/ST_Collect.html
77
78-- Wenn ein Gebiet durch geometrische Filter im NBA-Verfahren ausgegeben wurde, dann gibt es
79-- Randstreifen, die zu Pseudo-Fluren zusammen gefasst werden.
80-- Diese werden fÃŒr den WMS durch einen View ausgefiltert, der nur eine Gemeinde darstellt.
81
82-- AusfÃŒhrungszeit: 1 mittlere Stadt mit ca. 14.000 FlurstÃŒcken > 100 Sek
83
84TRUNCATE pp_flur;
85
86INSERT INTO pp_flur (land, regierungsbezirk, kreis, gemeinde, gemarkung, flurnummer, anz_fs, the_geom )
87   SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemeinde, f.gemarkungsnummer as gemarkung, f.flurnummer,
88           count(gml_id) as anz_fs,
89           ST_Multi(st_union(st_buffer(f.wkb_geometry,0.06))) AS the_geom -- Zugabe um ZwischenrÀume zu vermeiden
90     FROM  ax_flurstueck f
91     WHERE f.endet IS NULL AND NOT f.wkb_geometry IS NULL
92  GROUP BY f.land, f.regierungsbezirk, f.kreis, f.gemeinde, f.gemarkungsnummer, f.flurnummer;
93
94-- Vereinfachte Geometrie der Flur fÃŒr die Darstelung im WMS in einem kleinen Maßstab
95UPDATE pp_flur      SET simple_geom = st_simplify(the_geom, 0.5);
96
97
98-- Fluren zu Gemarkungen zusammen fassen
99-- -------------------------------------
100
101-- FlÀchen vereinigen
102UPDATE pp_gemarkung a
103  SET the_geom =
104   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.15))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden
105       FROM pp_flur b
106      WHERE a.land      = b.land
107        AND a.gemarkung = b.gemarkung
108   );
109-- Hierbei können Exceptions auftreten wobei das Geometriefeld einzelner Gemarkungen leer bleibt.
110-- Die Ursache ist unklar.
111--  TopologyException: found non-noded intersection between LINESTRING
112
113-- Praktische Lösung:
114-- Bei den Gemarkungen, die nichts abbekommen haben, mit schrittweise groesserem Buffer noch mal versuchen.
115UPDATE pp_gemarkung a
116  SET the_geom =
117   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.20))) AS the_geom -- Puffer vergroessert
118       FROM pp_flur b
119      WHERE a.land      = b.land
120        AND a.gemarkung = b.gemarkung
121   ) WHERE the_geom IS NULL;
122
123UPDATE pp_gemarkung a
124  SET the_geom =
125   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.30))) AS the_geom -- Puffer vergroessert
126       FROM pp_flur b
127      WHERE a.land      = b.land
128        AND a.gemarkung = b.gemarkung
129   ) WHERE the_geom IS NULL;
130
131/* Guggst du (auf leeren Geometry-Typ achten:
132
133   SELECT gemarkungsname, geometrytype(the_geom) AS typ,
134     st_isvalid(the_geom) AS vali, st_asewkt(the_geom) AS ewkt
135   FROM pp_gemarkung;
136
137*/
138
139-- Die Fluren in der Gemarkung zaehlen
140UPDATE pp_gemarkung a
141  SET anz_flur =
142   ( SELECT count(flurnummer) AS anz_flur
143     FROM    pp_flur b
144     WHERE a.land      = b.land
145       AND a.gemarkung = b.gemarkung
146   ); -- Gemarkungsnummer ist je BundesLand eindeutig
147
148
149-- Vereinfachte Geometrie der Gemarkung fÃŒr die Darstellung im WMS in einem kleinen Maßstab
150-- Gemarkung (Wirkung siehe pp_gemarkung_analyse)
151UPDATE pp_gemarkung SET simple_geom = st_simplify(the_geom, 2.2);
152
153
154-- Gemarkungen zu Gemeinden zusammen fassen
155-- ----------------------------------------
156
157-- FlÀchen vereinigen
158UPDATE pp_gemeinde a
159  SET the_geom =
160   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.2))) AS the_geom -- noch mal Zugabe
161     FROM    pp_gemarkung b
162     WHERE a.land     = b.land
163       AND a.gemeinde = b.gemeinde
164   );
165-- Hierbei können Exceptions auftreten wobei das Geometriefeld einzelner Gemarkungen leer bleibt.
166-- Die Ursache ist unklar.
167
168-- Praktische Lösung:
169-- weitere Versuche mit mehr Puffer, wenn Exception auftrat
170UPDATE pp_gemeinde a
171  SET the_geom =
172   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.3))) AS the_geom -- MEHR Zugabe
173     FROM    pp_gemarkung b
174     WHERE a.land     = b.land
175       AND a.gemeinde = b.gemeinde
176   ) WHERE the_geom IS NULL;
177
178UPDATE pp_gemeinde a
179  SET the_geom =
180   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.4))) AS the_geom -- noch MEHR Zugabe
181     FROM    pp_gemarkung b
182     WHERE a.land     = b.land
183       AND a.gemeinde = b.gemeinde
184   ) WHERE the_geom IS NULL;
185
186
187-- Vereinfachte Geometrie der Gemeinde fÃŒr die Darstellung im WMS in einem kleinen Maßstab
188-- Gemeinde (Wirkung siehe pp_gemeinde_analyse)
189UPDATE pp_gemeinde  SET simple_geom = st_simplify(the_geom, 5.0);
190
191-- Gemarkungen in der Gemeinde zÀhlen
192UPDATE pp_gemeinde a
193  SET anz_gemarkg =
194   ( SELECT count(gemarkung) AS anz_gemarkg
195     FROM    pp_gemarkung b
196     WHERE a.land     = b.land
197       AND a.gemeinde = b.gemeinde
198   );
199
200-- ENDE --
Note: See TracBrowser for help on using the repository browser.