source: trunk/data/konvert/postnas_0.7/pp_laden.sql @ 163

Revision 163, 6.3 KB checked in by frank.jaeger, 8 years ago (diff)

Vers. 0.7: Flächen von Fluren, Gemarkungen, Gemeinden zusammen fassen und darstellen

Line 
1
2-- ALKIS PostNAS 0.7
3
4-- Post Processing (pp_) Teil 2: Laden der Tabellen
5
6-- Stand
7
8--  2012-02-13 PostNAS 07, Umbenennung
9--  2012-02-17 Optimierung
10
11
12-- ============================
13-- Tabellen des Post-Processing
14-- ============================
15
16-- Einige Informationen liegen nach der NAS-Konvertierung in der Datenbank "verstreut" vor.
17-- Die dynamische Aufbereitung über Views und Functions würde zu lange dauern und somit lange
18-- Antwortzeiten in WMS, WFS, Buchauskunft oder Navigation (Suche) verursachen.
19
20-- Im Rahmen eines "Post-Processing" werden diese Daten nach jeder Konvertierung (NBA-Aktialisierung)
21-- einmal komplett aufbereitet. Die benötigten Informationen stehen somit den Anwendungen mundgerecht zur Verfügung.
22
23-- Die per PostProcessing gefüllten Tabellen bekommen den Profix "pp_".
24
25
26-- ========================================================
27-- Tabellen fuer die Zuordnung vom Gemarkungen zu Gemeinden
28-- ========================================================
29
30-- Für die Regelung der Zugriffsberechtigung einer Gemeindeverwaltung auf die
31-- Flurstücke in ihrem Gebiet braucht man die Information, in welcher Gemeinde eine Gemarkung liegt.
32-- 'ax_gemeinde' und 'ax_gemarkung' haben aber im ALKIS keinerlei Beziehung zueinander - kaum zu glauben!
33-- Nur über die Auswertung der Flurstücke kann man die Zuordnung ermitteln.
34-- Da nicht ständig mit 'SELECT DISTINCT' sämtliche Flurstücke durchsucht werden können,
35-- muss diese Information als (redundante) Tabelle nach dem Laden zwischengespeichert werden.
36
37
38SET client_encoding = 'UTF-8';
39
40
41-- Alles auf Anfang!
42  DELETE FROM pp_gemeinde;
43  DELETE FROM pp_gemarkung;
44  DELETE FROM pp_flur;
45
46
47-- Vorkommende Paarungen Gemarkung <-> Gemeinde in ax_Flurstueck
48INSERT INTO pp_gemarkung
49  (               land, regierungsbezirk, kreis, gemeinde, gemarkung       )
50  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
51  FROM            ax_flurstueck
52  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
53;
54
55-- daraus: Vorkommende Gemeinden
56INSERT INTO pp_gemeinde
57  (               land, regierungsbezirk, kreis, gemeinde)
58  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde
59  FROM            pp_gemarkung
60  ORDER BY        land, regierungsbezirk, kreis, gemeinde
61;
62
63-- Namen der Gemeinde dazu als Optimierung bei der Auskunft
64UPDATE pp_gemeinde a
65   SET gemeindename =
66   ( SELECT b.bezeichnung
67     FROM    ax_gemeinde b
68     WHERE a.land=b.land
69       AND a.regierungsbezirk=b.regierungsbezirk
70       AND a.kreis=b.kreis
71       AND a.gemeinde=b.gemeinde
72   );
73
74-- Namen der Gemarkung dazu als Optimierung bei der Auskunft
75UPDATE pp_gemarkung a
76   SET gemarkungsname =
77   ( SELECT b.bezeichnung
78     FROM    ax_gemarkung b
79     WHERE a.land=b.land
80       AND a.gemarkung=b.gemarkungsnummer
81   );
82
83
84-- ==============================================================================
85-- Geometrien der Flurstücke schrittweise zu groesseren Einheiten zusammen fassen
86-- ==============================================================================
87
88-- Dies macht nur Sinn, wenn der Inhalt der Datenbenk einen ganzen Katasterbezirk enthält.
89-- Wenn ein Gebiet durch geometrische Filter im NBA ausgegeben wurde, dann gibt es Randstreifen,
90-- die zu Pseudo-Fluren zusammen gefasst werden. Fachlich falsch!
91
92INSERT INTO pp_flur (land, regierungsbezirk, kreis, gemarkung, flurnummer, anz_fs, the_geom )
93   SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer as gemarkung, f.flurnummer,
94           count(gml_id) as anz_fs,
95           multi(st_union(st_buffer(f.wkb_geometry,0))) AS the_geom
96     FROM  ax_flurstueck f
97  GROUP BY f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer, f.flurnummer;
98
99
100-- Fluren zu Gemarkungen zusammen fassen
101-- -------------------------------------
102
103-- Flächen vereinigen
104UPDATE pp_gemarkung a
105  SET the_geom =
106   ( SELECT multi(st_union(st_buffer(b.the_geom,0))) AS the_geom
107     FROM    pp_flur b
108     WHERE a.land=b.land AND a.gemarkung=b.gemarkung
109   );
110
111-- Fluren zaehlen
112UPDATE pp_gemarkung a
113  SET anz_flur =
114   ( SELECT count(flurnummer) AS anz_flur
115     FROM    pp_flur b
116     WHERE a.land=b.land AND a.gemarkung=b.gemarkung
117   ); -- Gemarkungsnummer ist je BundesLand eindeutig
118
119-- Geometrie vereinfachen (Wirkung siehe pp_gemarkung_analyse)
120UPDATE pp_gemarkung SET simple_geom = simplify(the_geom, 8.0);
121
122
123-- Gemarkungen zu Gemeinden zusammen fassen
124-- ----------------------------------------
125
126-- Flächen vereinigen
127UPDATE pp_gemeinde a
128  SET the_geom =
129   ( SELECT multi(st_union(st_buffer(b.the_geom,0))) AS the_geom
130     FROM    pp_gemarkung b
131     WHERE a.land=b.land AND a.gemeinde=b.gemeinde
132   );
133
134-- Gemarkungen zählen
135UPDATE pp_gemeinde a
136  SET anz_gemarkg =
137   ( SELECT count(gemarkung) AS anz_gemarkg
138     FROM    pp_gemarkung b
139     WHERE a.land=b.land AND a.gemeinde=b.gemeinde
140   );
141
142-- Geometrie vereinfachen (Wirkung siehe pp_gemeinde_analyse)
143UPDATE pp_gemeinde SET simple_geom = simplify(the_geom, 20.0);
144
145
146-- =======================================================
147-- Tabelle fuer die Zuordnung vom Eigentümern zu Gemeinden
148-- =======================================================
149
150
151-- erst mal sauber machen
152DELETE FROM gemeinde_person;
153
154-- alle direkten Buchungen mit View ermitteln und in Tabelle speichern
155-- Für eine Stadt: ca. 20 Sekunden
156INSERT INTO  gemeinde_person
157       (land, regierungsbezirk, kreis, gemeinde, person, buchtyp)
158 SELECT land, regierungsbezirk, kreis, gemeinde, person, 1
159   FROM gemeinde_person_typ1;
160
161
162-- noch die komplexeren Buchungen ergänzen (Recht an ..)
163-- Mit View ermitteln und in Tabelle speichern
164-- Für eine Stadt: ca. 10 Sekunden
165INSERT INTO  gemeinde_person
166       (  land,   regierungsbezirk,   kreis,   gemeinde,   person,  buchtyp)
167 SELECT q.land, q.regierungsbezirk, q.kreis, q.gemeinde, q.person,  2
168   FROM gemeinde_person_typ2 q   -- Quelle
169   LEFT JOIN gemeinde_person z   -- Ziel
170     ON q.person   = z.person    -- Aber nur, wenn dieser Fall im Ziel
171    AND q.land     = z.land
172    AND q.regierungsbezirk = z.regierungsbezirk
173    AND q.kreis    = z.kreis
174    AND q.gemeinde = z.gemeinde
175  WHERE z.gemeinde is Null;      -- ..  noch nicht vorhanden ist
176
177
178-- ENDE --
Note: See TracBrowser for help on using the repository browser.