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

Revision 176, 7.5 KB checked in by frank.jaeger, 12 years ago (diff)

Flurstücksnummern an Standard-Position aus Fläche generieren

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