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

Revision 162, 6.2 KB checked in by frank.jaeger, 12 years ago (diff)

Entwurf: Post-Processing-Scripte Flur/Gemarkung/Gemeinde?

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