source: trunk/import/sichten.sql @ 265

Revision 265, 29.7 KB checked in by frank.jaeger, 11 years ago (diff)

View zum Suchen und SQL-Befehl zum Löschen alter Versionen der ALKIS-Beziehungen zw. Flurstück und Buchungsstelle. Diese werden bei Replace nicht korrekt entfernt, wenn gleichzeitig Flurstück und Buchung geändert werden.

Line 
1-- =====
2-- ALKIS
3-- =====
4
5--  PostNAS 0.7
6
7--  2012-02-25 PostNAS 07, Umbenennung
8--  2012-04-17 flstnr_ohne_position
9--  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden
10--  2012-10-29 Redundanzen in Beziehungen suchen (entstehen durch replace)
11--  2013-02-20 Mehrfache Buchungsstellen zum FS suchen, dies sind Auswirkungen eines Fehlers bei Replace
12
13--  -----------------------------------------
14--  Sichten fuer Verwendung im mapfiles (wms)
15--  -----------------------------------------
16
17
18-- WMS-Layer "ag_t_flurstueck"
19-- ---------------------------
20
21-- Die Geometrie befindet sich in "ap_pto", der Label in "ax_flurstueck"
22-- Die Verbindung erfolgt ÃŒber "alkis_beziehungen"
23
24
25-- Bruchnummerierung erzeugen
26-- ALT 2012-04-17: Diese Version zeigt nur die manuell gesetzten Positionen
27CREATE OR REPLACE VIEW s_flurstueck_nr
28AS
29 SELECT f.ogc_fid,
30        p.wkb_geometry,  -- Position des Textes
31        f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
32   FROM ap_pto             p
33   JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
34   JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
35  WHERE v.beziehungsart = 'dientZurDarstellungVon'
36    AND p.endet IS NULL
37    AND f.endet IS NULL
38  --AND p."art" = 'ZAE_NEN'
39  ;
40
41COMMENT ON VIEW s_flurstueck_nr IS 'fuer Kartendarstellung: Bruchnummerierung FlurstÃŒck';
42
43-- NEU 2012-04-17
44-- Wenn keine manuelle Position gesetzt ist, wird die Flaechenmitte verwendet
45
46-- ACHTUNG: Dieser View kann nicht direkt im Mapserver-WMS verwendet werden.
47-- Die Anzeige ist zu langsam. Filterung Ìber BBOX kann nicht funktionieren, da zunÀchst ALLE Standardpositionen
48-- berechnet werden mÃŒssen, bevor darÃŒber gefiltert werden kann.
49
50-- FAZIT: In einer Hilfstabelle mit geometrischem Index zwischenspeichern.
51--        Siehe PostProcessing Tabelle "pp_flurstueck_nr"
52
53CREATE OR REPLACE VIEW s_flurstueck_nr2
54AS
55  SELECT f.ogc_fid,
56         p.wkb_geometry,  -- manuelle Position des Textes
57         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
58    FROM ap_pto             p
59    JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
60    JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
61   WHERE v.beziehungsart = 'dientZurDarstellungVon'
62     AND p.endet IS NULL
63     AND f.endet IS NULL
64   --AND p."art" = 'ZAE_NEN'
65 UNION
66  SELECT f.ogc_fid,
67         ST_PointOnSurface(f.wkb_geometry) AS wkb_geometry,  -- Flaechenmitte als Position des Textes
68         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
69    FROM      ax_flurstueck     f
70    LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
71   WHERE v.beziehungsart is NULL
72     AND f.endet IS NULL
73  ;
74
75COMMENT ON VIEW s_flurstueck_nr2 IS 'Bruchnummerierung FlurstÃŒck, auch Standard-Position. Nicht direkt fuer WMS verwenden';
76
77
78-- Layer "ag_t_gebaeude"
79-- ---------------------
80
81-- Problem: Zu einigen GebÀuden gibt es mehrere Hausnummern.
82-- Diese unterscheiden sich im Feld ap-pto.advstandardmodell
83-- z.B. 3 verschiedene EintrÀge mit <NULL>, {DKKM500}, {DKKM1000}, (Beispiel; Lage, Lange Straße 15 c)
84
85
86CREATE OR REPLACE VIEW s_hausnummer_gebaeude
87AS
88 SELECT p.ogc_fid,
89        p.wkb_geometry,                         -- Point
90        p.drehwinkel * 57.296 AS drehwinkel,    -- umn: ANGLE [drehwinkel]
91        l.hausnummer                            -- umn: LABELITEM
92   FROM ap_pto p
93   JOIN alkis_beziehungen v
94     ON p.gml_id = v.beziehung_von
95   JOIN ax_lagebezeichnungmithausnummer l
96     ON v.beziehung_zu  = l.gml_id
97  WHERE v.beziehungsart = 'dientZurDarstellungVon'
98    AND p.endet IS NULL
99    AND l.endet IS NULL;
100
101COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÀude';
102
103
104-- Layer "ag_t_nebengeb"
105-- ---------------------
106
107CREATE OR REPLACE VIEW s_nummer_nebengebaeude
108AS
109 SELECT p.ogc_fid,
110        p.wkb_geometry,
111        p.drehwinkel * 57.296 AS drehwinkel,    -- umn: ANGLE [drehwinkel]
112     -- v.beziehungsart,                -- TEST
113     -- l.pseudonummer,                 -- die HsNr des zugehoerigen Hauptgebaeudes
114        l.laufendenummer                -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
115   FROM ap_pto p
116   JOIN alkis_beziehungen v
117     ON p.gml_id = v.beziehung_von
118   JOIN ax_lagebezeichnungmitpseudonummer l
119     ON v.beziehung_zu  = l.gml_id
120  WHERE v.beziehungsart = 'dientZurDarstellungVon'
121    AND p.endet IS NULL
122    AND l.endet IS NULL
123;
124
125COMMENT ON VIEW s_nummer_nebengebaeude IS 'fuer Kartendarstellung: Hausnummern NebengebÀude';
126
127
128-- Layer "ag_p_flurstueck"
129-- -----------------------
130
131CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck
132AS
133 SELECT p.ogc_fid,
134        p.wkb_geometry,
135        p.drehwinkel * 57.296 AS drehwinkel,
136        f.flurstueckskennzeichen
137   FROM ap_ppo p
138   JOIN alkis_beziehungen v
139     ON p.gml_id = v.beziehung_von
140   JOIN ax_flurstueck f
141     ON v.beziehung_zu = f.gml_id
142  WHERE p.art = 'Haken'
143    AND v.beziehungsart = 'dientZurDarstellungVon'
144    AND f.endet IS NULL
145    AND p.endet IS NULL;
146
147COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck IS 'fuer Kartendarstellung';
148
149
150-- Layer "s_zuordungspfeil_flurstueck"
151-- -----------------------------------
152
153CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck
154AS
155 SELECT l.ogc_fid,
156        l.wkb_geometry
157   FROM ap_lpo l
158   JOIN alkis_beziehungen v
159     ON l.gml_id = v.beziehung_von
160   JOIN ax_flurstueck f
161     ON v.beziehung_zu = f.gml_id
162  WHERE l.art = 'Pfeil'
163    AND v.beziehungsart = 'dientZurDarstellungVon'
164    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
165    AND f.endet IS NULL
166    AND l.endet IS NULL;
167
168COMMENT ON VIEW s_zuordungspfeil_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer';
169
170
171CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck
172AS
173 SELECT l.ogc_fid,
174        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
175        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
176        st_startpoint(l.wkb_geometry) AS wkb_geometry
177   FROM ap_lpo l
178   JOIN alkis_beziehungen v
179     ON l.gml_id = v.beziehung_von
180   JOIN ax_flurstueck f
181     ON v.beziehung_zu = f.gml_id
182  WHERE l.art = 'Pfeil'
183    AND v.beziehungsart = 'dientZurDarstellungVon'
184    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
185    AND f.endet IS NULL
186    AND l.endet IS NULL;
187
188COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze';
189
190
191
192-- Layer NAME "ap_pto" GROUP "praesentation"
193-- ----------------------------------------
194-- Texte, die nicht schon in einem anderen Layer ausgegeben werden
195
196CREATE OR REPLACE VIEW s_beschriftung
197AS
198  SELECT p.ogc_fid,
199         p.schriftinhalt,
200         p.art,
201         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
202         p.wkb_geometry
203    FROM ap_pto p
204   WHERE not p.schriftinhalt IS NULL
205     AND p.endet IS NULL
206     AND p.art NOT IN ('HNR', 'PNR');
207
208-- Feb. 2012 PostNAS 0.6: 'ZAE_NEN' kommt nicht mehr vor!
209
210-- Diese 'IN'-Liste fortschreiben bei Erweiterungen des Mapfiles
211-- Wenn ein Text zum fachlich passenden Layer angezeigt wird, dann hier ausblenden,
212-- d.h. die Kennung in die Klammer eintragen.
213
214-- Werte in ap_pto.art:
215-- 'HNR'  = Hausnummer
216-- 'PNR'  = Pseudo-Nummer = laufende Nummer NebengebÀude
217
218-- Ermittlung der vorkommenden Arten mit:
219--   SELECT DISTINCT art FROM ap_pto ORDER BY art;
220
221-- Noch nicht berÃŒcksichtigt:
222   
223--"AGT""ART""ATP""BBD""BezKlassifizierungStrasse""BSA""BWF""BWF_ZUS""FKT""Fliessgewaesser""FreierText"
224--"Friedhof""Gewanne""GFK""Halde_LGT""HHO""NAM""PKN""Platz""PRO""SPG""SPO""StehendesGewaesser"
225--"Strasse""VEG""Vorratsbehaelter""Weg""Weitere Höhe""ZNM""<NULL>"
226
227COMMENT ON VIEW s_beschriftung IS 'ap_pto, die noch nicht in anderen Layern angezeigt werden';
228
229
230-- Layer "s_zuordungspfeil_gebaeude"
231-- -----------------------------------
232
233CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude
234AS
235 SELECT l.ogc_fid,
236     -- alkis_beziehungen.beziehungsart, -- TEST
237     -- ap_lpo.art, -- TEST
238        l.wkb_geometry
239   FROM ap_lpo l
240   JOIN alkis_beziehungen v
241     ON l.gml_id = v.beziehung_von
242   JOIN ax_gebaeude g
243     ON v.beziehung_zu = g.gml_id
244  WHERE l.art = 'Pfeil'
245    AND v.beziehungsart = 'dientZurDarstellungVon'
246    AND g.endet IS NULL
247    AND l.endet IS NULL;
248
249COMMENT ON VIEW s_zuordungspfeil_gebaeude IS 'fuer Kartendarstellung: Zuordnungspfeil fÌr GebÀude-Nummer';
250
251
252-- Sichten vom OBK (Oberbergischer Kreis)
253-- --------------------------------------
254
255-- Dazu notwendig: Feld "ax_besondereflurstuecksgrenze.artderflurstuecksgrenze" als Array "integer[]" !
256-- Anpassung DB-Schema erfolgte am 18.09.2011
257-- ap_lpo.signaturnummer = '2004' ist in 0.7 schema nun ein varchar
258
259
260CREATE OR REPLACE VIEW sk2004_zuordnungspfeil
261AS
262 SELECT ap.ogc_fid, ap.wkb_geometry
263 FROM ap_lpo ap
264 WHERE ((ap.signaturnummer = '2004')
265   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
266
267COMMENT ON VIEW sk2004_zuordnungspfeil IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer"';
268-- krz: ap.signaturnummer is NULL in allen SÀtzen
269--      Siehe s_zuordungspfeil_flurstueck
270
271-- ap_lpo.signaturnummer = '2004' ist in 0.7 schema nun ein varchar
272
273CREATE OR REPLACE VIEW sk2004_zuordnungspfeil_spitze
274AS
275 SELECT ap.ogc_fid, (((st_azimuth(st_pointn(ap.wkb_geometry, 1),
276        st_pointn(ap.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
277        st_startpoint(ap.wkb_geometry) AS wkb_geometry
278 FROM ap_lpo ap
279 WHERE ((ap.signaturnummer = '2004')
280   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
281-- krz: ap.signaturnummer is NULL in allen SÀtzen
282
283
284CREATE OR REPLACE VIEW sk2012_flurgrenze
285AS
286 SELECT fg.ogc_fid, fg.wkb_geometry
287   FROM ax_besondereflurstuecksgrenze fg
288  WHERE (3000 = ANY (fg.artderflurstuecksgrenze))
289    AND fg.advstandardmodell ~~ 'DLKM'::text;
290
291COMMENT ON VIEW sk2012_flurgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
292
293
294CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze
295AS
296 SELECT gemag.ogc_fid, gemag.wkb_geometry
297   FROM ax_besondereflurstuecksgrenze gemag
298  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze))
299    AND gemag.advstandardmodell ~~ 'DLKM'::text;
300
301COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
302
303
304CREATE OR REPLACE VIEW sk2018_bundeslandgrenze
305AS
306 SELECT blg.ogc_fid, blg.wkb_geometry
307   FROM ax_besondereflurstuecksgrenze blg
308  WHERE (7102 = ANY (blg.artderflurstuecksgrenze))
309    AND blg.advstandardmodell ~~ 'DLKM'::text;
310
311COMMENT ON VIEW sk2018_bundeslandgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
312
313
314CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze
315AS
316 SELECT rbg.ogc_fid, rbg.wkb_geometry
317   FROM ax_besondereflurstuecksgrenze rbg
318  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze))
319    AND rbg.advstandardmodell ~~ 'DLKM'::text;
320
321COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
322
323
324CREATE OR REPLACE VIEW sk2022_gemeindegrenze
325AS
326 SELECT gemg.ogc_fid, gemg.wkb_geometry
327   FROM ax_besondereflurstuecksgrenze gemg
328  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze))
329    AND gemg.advstandardmodell ~~ 'DLKM'::text;
330
331COMMENT ON VIEW sk2022_gemeindegrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
332
333
334-- Zusammenfassung "Politische Grenzen"  Art= 7102, 7103, 7104, 7106
335
336-- Grenze der Bundesrepublik Deutschland 7101 (G)
337-- Grenze des Bundeslandes 7102 (G)
338-- Grenze des Regierungsbezirks 7103 (G)
339-- Grenze des Landkreises 7104 (G)
340-- Grenze der Gemeinde 7106
341-- Grenze des Gemeindeteils 7107
342-- Grenze der Verwaltungsgemeinschaft 7108
343
344CREATE OR REPLACE VIEW sk201x_politische_grenze
345AS
346 SELECT ogc_fid, artderflurstuecksgrenze as art, wkb_geometry
347   FROM ax_besondereflurstuecksgrenze
348
349-- WHERE ( ANY (artderflurstuecksgrenze) IN (7102,7103,7104,7106) )
350
351  WHERE (7102 = ANY (artderflurstuecksgrenze)
352     OR  7102 = ANY (artderflurstuecksgrenze)
353     OR  7103 = ANY (artderflurstuecksgrenze)
354     OR  7104 = ANY (artderflurstuecksgrenze)
355     OR  7106 = ANY (artderflurstuecksgrenze)
356    )
357    AND advstandardmodell ~~ 'DLKM'::text;
358
359COMMENT ON VIEW sk201x_politische_grenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
360-- GefÀllt mir nicht!
361-- Array-Felder eignen sich nicht als Filter. Optimierung: in Tabelle speichern
362
363
364--  ------------------------------------------
365--  Sichten fuer Fehlersuche und Daten-Analyse
366--  ------------------------------------------
367
368
369-- FlurstÃŒcke mit Anzeige der FlurstÃŒcksnummer an der "Standardposition"
370
371-- Nach der Konvertierung aus ALK hat zunÀchst jedes FlurstÌck eine explizit gesetzte Position der FlurstÌcksnummer.
372
373-- Nach einer manuellen Teilung bekommen die neuen FlurstÃŒcke im ALKIS nur dann eine Position,
374-- wenn die Positioin manuell bestimmt (verschoben) wurde.
375-- Wenn die FlurstÃŒcksnummer an ihrer "Standardposition" angezeigt werden soll,
376-- dann wird diese in den Daten (DHK, NAS) nicht gesetzt.
377-- Der Konverter PostNAS konvertiert aber nur die Daten, die er bekommt, er setzt nicht die Standard-Position
378-- fÃŒr die FlurstÃŒcke, die ohne eine manuelle Position kommen.
379
380-- Diese FÀlle identifizieren
381CREATE OR REPLACE VIEW flstnr_ohne_position
382AS
383 SELECT f.gml_id,
384        f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS such -- Suchstring fÃŒr ALKIS-Navigation nach FS-Kennzeichen
385 FROM        ax_flurstueck     f
386   LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
387 --LEFT JOIN ap_pto            p  ON p.gml_id       = v.beziehung_von
388  WHERE v.beziehungsart is NULL
389    AND f.endet IS NULL
390--ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
391  ;
392
393COMMENT ON VIEW flstnr_ohne_position IS 'FlurstÌcke ohne manuell gesetzte Position fÌr die PrÀsentation der FS-Nr';
394
395
396-- Zeigt die Texte an, die nicht in einem der Mapfile-Views verarbeitet werden
397CREATE OR REPLACE VIEW s_allgemeine_texte
398AS
399 SELECT p.ogc_fid,
400      --p.wkb_geometry,
401      --p.gml_id,
402        p.art,
403        p.drehwinkel * 57.296 AS drehwinkel,   -- * 180 / Pi
404        p.schriftinhalt
405   FROM ap_pto p
406  WHERE NOT p.art = 'ZAE_NEN'
407    AND NOT p.art = 'HNR'
408    AND NOT p.art = 'FKT'
409    AND NOT p.art = 'Friedhof'
410    AND p.schriftinhalt IS NOT NULL
411    AND p.endet IS NULL;
412
413
414-- Analyse zu o.g. Fehler:
415--  Welche Inhalte kommen im Feld ap_pto.art vor?
416CREATE OR REPLACE VIEW ap_pto_arten
417AS
418  SELECT DISTINCT art
419    FROM ap_pto;
420
421
422-- Umbruch im Label?
423-- z.B. "Schwimm-/nbecken"
424-- Sind 2 Buchstaben in Mapfile bei "WRAP" möglich?
425CREATE OR REPLACE VIEW texte_mit_umbruch
426AS
427 SELECT ogc_fid, schriftinhalt, art
428   FROM ap_pto
429  WHERE not schriftinhalt is null
430    AND schriftinhalt like '%/n%';
431
432-- ... schriftinhalt like '%/%';
433-- RLP: FlurstÌcks-Bruchnummer art='ZAE_NEN' als Schriftinhalt (2 FÀlle)
434
435
436
437CREATE OR REPLACE VIEW s_allgemeine_texte_arten
438AS
439 SELECT DISTINCT art
440   FROM s_allgemeine_texte;
441
442-- dies liefert die Werte:
443--  Bahnverkehr, BWF, FKT_LGT, Fliessgewaesser, FreierText, Gewanne, NAM, Platz,
444--  StehendesGewaesser, Strasse, urn:adv:fachdatenv, Weg, ZNM
445
446
447
448-- EXTENT fÃŒr das Mapfile eines Mandanten ermitteln
449
450CREATE OR REPLACE VIEW flurstuecks_minmax AS
451 SELECT min(st_xmin(wkb_geometry)) AS r_min,
452        min(st_ymin(wkb_geometry)) AS h_min,
453        max(st_xmax(wkb_geometry)) AS r_max,
454        max(st_ymax(wkb_geometry)) AS h_max
455   FROM ax_flurstueck f
456   WHERE f.endet IS NULL;
457
458COMMENT ON VIEW flurstuecks_minmax IS 'Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile';
459
460
461
462-- Nach Laden der Keytables:
463
464-- MAP ALT:
465-- DATA "wkb_geometry from (SELECT ogc_fid, gml_id, artderfestlegung, name, bezeichnung, stelle, wkb_geometry FROM ax_bauraumoderbodenordnungsrecht) as foo using unique ogc_fid using SRID=25832"
466
467CREATE OR REPLACE VIEW baurecht
468AS
469  SELECT r.ogc_fid,
470         r.wkb_geometry,
471         r.gml_id,
472         r.artderfestlegung as adfkey, -- Art der Festlegung - Key
473         r."name",                     -- Eigenname des Gebietes
474         r.stelle,                     -- Stelle Key
475         r.bezeichnung AS rechtbez,    -- Verfahrensnummer
476         a.bezeichner  AS adfbez,      -- Art der Festlegung - Bezeichnung
477         d.bezeichnung AS stellbez     -- Stelle Bezeichnung
478      -- , d.stellenart                -- weiter entschluesseln?
479    FROM ax_bauraumoderbodenordnungsrecht r
480    LEFT JOIN ax_bauraumoderbodenordnungsrecht_artderfestlegung a
481      ON r.artderfestlegung = a.wert
482    LEFT JOIN ax_dienststelle d
483      ON r.land   = d.land
484     AND r.stelle = d.stelle
485  WHERE r.endet IS NULL
486    AND d.endet IS NULL
487 ;
488
489-- MAP NEU:
490-- DATA "wkb_geometry from (SELECT ogc_fid, gml_id, adfkey, name, stelle, rechtbez, adfbez, stellbez, wkb_geometry FROM baurecht) as foo using unique ogc_fid using SRID=25832" # gespeicherter View
491
492
493-- Man glaubt es kaum, aber im ALKIS haben Gemeinde und Gemarkung keinerlei Beziehung miteinander
494-- Nur durch Auswertung der FlurstÃŒcke kann man ermitteln, in welcher Gemeinde eine Gemarkung liegt.
495
496-- 2011-12-08 umbenannt
497
498CREATE OR REPLACE VIEW gemarkung_in_gemeinde
499AS
500  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
501  FROM            ax_flurstueck
502  WHERE           endet IS NULL
503  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
504;
505
506COMMENT ON VIEW gemarkung_in_gemeinde IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
507
508
509-- Untersuchen, welche Geometrie-Typen vorkommen
510
511CREATE OR REPLACE VIEW arten_von_flurstuecksgeometrie
512AS
513 SELECT   count(gml_id) as anzahl,
514          st_geometrytype(wkb_geometry)
515 FROM     ax_flurstueck
516 WHERE    endet IS NULL
517 GROUP BY st_geometrytype(wkb_geometry);
518
519
520-- A d r e s s e n
521
522-- Verschluesselte Lagebezeichnung (Strasse und Hausnummer) fuer eine Gemeinde
523-- Schluessel der Gemeinde nach Bedarf anpassen!
524
525--  FEHLER: Funktion to_char(character varying, unknown) existiert nicht
526
527
528CREATE OR REPLACE VIEW adressen_hausnummern
529AS
530    SELECT
531        s.bezeichnung AS strassenname,
532         g.bezeichnung AS gemeindename,
533         l.land,
534         l.regierungsbezirk,
535         l.kreis,
536         l.gemeinde,
537         l.lage        AS strassenschluessel,
538         l.hausnummer
539    FROM   ax_lagebezeichnungmithausnummer l 
540    JOIN   ax_gemeinde g
541      ON l.kreis=g.kreis
542     AND l.gemeinde=g.gemeinde
543    JOIN   ax_lagebezeichnungkatalogeintrag s
544      ON l.kreis=s.kreis
545     AND l.gemeinde=s.gemeinde
546     AND l.lage = s.lage        -- ab PostNAS 0.6
547    WHERE     l.gemeinde = 40;  -- "40" = Stadt Lage
548
549
550-- Zuordnung dieser Adressen zu Flurstuecken
551-- Schluessel der Gemeinde nach Bedarf anpassen!
552
553CREATE OR REPLACE VIEW adressen_zum_flurstueck
554AS
555    SELECT
556           f.gemarkungsnummer,
557           f.flurnummer,
558           f.zaehler,
559           f.nenner,
560           g.bezeichnung AS gemeindename,
561           s.bezeichnung AS strassenname,
562           l.lage        AS strassenschluessel,
563           l.hausnummer
564      FROM   ax_flurstueck f
565      JOIN   alkis_beziehungen v
566        ON f.gml_id=v.beziehung_von
567      JOIN   ax_lagebezeichnungmithausnummer l 
568        ON l.gml_id=v.beziehung_zu
569      JOIN   ax_gemeinde g
570        ON l.kreis=g.kreis
571       AND l.gemeinde=g.gemeinde
572      JOIN   ax_lagebezeichnungkatalogeintrag s
573        ON l.kreis=s.kreis
574       AND l.gemeinde=s.gemeinde
575       AND l.lage = s.lage   -- ab PostNAS 0.6
576     WHERE v.beziehungsart='weistAuf'
577       AND l.gemeinde = 40  -- "40" = Stadt Lage
578     ORDER BY
579           f.gemarkungsnummer,
580           f.flurnummer,
581           f.zaehler,
582           f.nenner;
583
584
585-- FlurstÃŒcke eines EigentÃŒmers
586-- ----------------------------
587
588-- Dieser View liefert nur die (einfache) Buchungsart "GrundstÃŒck"
589-- Solche FÀlle wie "Erbbaurecht an GrundstÌck" oder "Wohnungs-/Teileigentum an aufgeteiltes GrundstÌck"
590-- oder "Miteigentum an aufteteiltes GrundstÃŒck" fehlen in deisere Auswertung.
591-- Dazu siehe: "rechte_eines_eigentuemers".
592
593-- Das Ergbenis ist gedacht fÃŒr den Export als CSV und Weiterverarbeitung mit einer Tabellenkalkulation
594-- oder einer einfachen Datenbank.
595
596-- Auch ein Export als Shape ist moeglich (dafuer: geom hinzugefuegt, Feldnamen gekuerzt)
597-- Kommando:
598--  pgsql2shp -h localhost -p 5432 -f "/data/.../alkis_fs_gemeinde.shp"  [db-name]  public.flurstuecke_eines_eigentuemers
599
600-- Übersicht der Tabellen:
601--
602-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle >istGebucht> Flurstueck
603--                                              *-> Bezirk                *-> Buchungsart     *-> Gemarkung
604
605-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
606
607CREATE OR REPLACE VIEW flurstuecke_eines_eigentuemers
608AS
609   SELECT
610      k.bezeichnung                AS gemarkung,
611      k.gemarkungsnummer           AS gemkg_nr,
612      f.flurnummer                 AS flur,
613      f.zaehler                    AS fs_zaehler,
614      f.nenner                     AS fs_nenner,
615      f.amtlicheflaeche            AS flaeche,
616      f.wkb_geometry               AS geom,  -- fuer Export als Shape
617   -- g.bezirk,
618      b.bezeichnung                AS bezirkname,
619      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
620      g.blattart,
621      s.laufendenummer             AS bvnr,
622      art.bezeichner               AS buchgsart,
623   -- s.zaehler || '/' || s.nenner AS buchg_anteil,
624      n.laufendenummernachdin1421  AS name_num,
625   -- n.zaehler || '/' || n.nenner AS nam_anteil,
626      p.nachnameoderfirma          AS nachname --,
627   -- p.vorname
628   FROM       ax_person              p
629        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
630        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
631        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
632        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
633        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
634        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
635        JOIN  ax_buchungsstelle      s    ON s.gml_id = bgs.beziehung_von
636        JOIN  ax_buchungsstelle_buchungsart art ON s.buchungsart = art.wert
637        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = s.gml_id
638        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
639        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
640   WHERE p.nachnameoderfirma LIKE 'Gemeinde %'   -- ** Bei Bedarf anpassen!
641     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
642     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
643     AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
644     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
645     AND p.endet IS NULL
646     AND n.endet IS NULL
647     AND g.endet IS NULL
648     AND b.endet IS NULL
649     AND s.endet IS NULL
650     AND f.endet IS NULL
651     AND k.endet IS NULL
652   ORDER BY   
653         k.bezeichnung,
654         f.flurnummer,
655         f.zaehler,
656         f.nenner,
657         g.bezirk,
658         g.buchungsblattnummermitbuchstabenerweiterung,
659         s.laufendenummer
660;
661
662
663-- Rechte eines EigentÃŒmers
664-- ------------------------
665
666-- Dieser View sucht speziell die FÀlle wo eine Buchungsstelle ein Recht "an" einer anderen Buchungsstelle hat.
667--  - "Erbbaurecht *an* GrundstÃŒck"
668--  - "Wohnungs-/Teileigentum *an* Aufgeteiltes GrundstÃŒck"
669--  - "Miteigentum *an* Aufteteiltes GrundstÃŒck"
670-- Suchkriterium ist der Name des EigentÃŒmers auf dem "herrschenden" Grundbuch, also dem Besitzer des Rechtes.
671
672-- Diese FÀlle fehlen im View "flurstuecke_eines_eigentuemers".
673
674-- Übersicht der Tabellen:
675--
676-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle-h >an> Stelle-d >istGebucht> Flurstueck
677--
678
679-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
680
681
682CREATE OR REPLACE VIEW rechte_eines_eigentuemers
683AS
684   SELECT
685      k.bezeichnung                AS gemarkung,
686      k.gemarkungsnummer           AS gemkg_nr,
687      f.flurnummer                 AS flur,
688      f.zaehler                    AS fs_zaehler,
689      f.nenner                     AS fs_nenner,
690      f.amtlicheflaeche            AS flaeche,
691      f.wkb_geometry               AS geom,  -- fuer Export als Shape
692   -- g.bezirk,
693      b.bezeichnung                AS bezirkname,
694      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
695   -- g.blattart,
696      sh.laufendenummer            AS bvnr_herr,
697      sh.zaehler || '/' || sh.nenner AS buchg_anteil_herr,
698      arth.bezeichner              AS buchgsa_herr,
699      bss.beziehungsart            AS bez_art,
700      artd.bezeichner              AS buchgsa_dien,
701      sd.laufendenummer            AS bvnr_dien,
702   -- sd.zaehler || '/' || sd.nenner AS buchg_anteil_dien,
703      n.laufendenummernachdin1421  AS name_num,
704   -- n.zaehler || '/' || n.nenner AS nam_anteil,
705      p.nachnameoderfirma          AS nachname --, 
706   -- p.vorname
707   FROM       ax_person              p
708        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
709        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
710        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
711        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
712        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
713        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
714        JOIN  ax_buchungsstelle      sh   ON sh.gml_id = bgs.beziehung_von  -- herrschende Buchung
715        JOIN  ax_buchungsstelle_buchungsart arth ON sh.buchungsart = arth.wert
716        JOIN  alkis_beziehungen      bss  ON sh.gml_id = bss.beziehung_von
717        JOIN  ax_buchungsstelle      sd   ON sd.gml_id = bss.beziehung_zu   -- dienende Buchung
718        JOIN  ax_buchungsstelle_buchungsart artd ON sd.buchungsart = artd.wert
719        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = sd.gml_id
720        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
721        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
722   WHERE p.nachnameoderfirma LIKE 'Stadt %'   -- ** Bei Bedarf anpassen!
723     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
724     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
725     AND bgs.beziehungsart = 'istBestandteilVon' -- B-Stelle herr   >> Grundbuch
726     AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
727     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
728     AND p.endet IS NULL
729     AND n.endet IS NULL
730     AND g.endet IS NULL
731     AND b.endet IS NULL
732     AND sh.endet IS NULL
733     AND sd.endet IS NULL
734     AND f.endet IS NULL
735     AND k.endet IS NULL
736   ORDER BY   
737         k.bezeichnung,
738         f.flurnummer,
739         f.zaehler,
740         f.nenner,
741         g.bezirk,
742         g.buchungsblattnummermitbuchstabenerweiterung,
743         sh.laufendenummer
744;
745
746CREATE OR REPLACE VIEW beziehungen_redundant
747AS
748SELECT *
749 FROM alkis_beziehungen AS bezalt
750 WHERE EXISTS
751       (SELECT ogc_fid
752         FROM alkis_beziehungen AS bezneu
753        WHERE bezalt.beziehung_von = bezneu.beziehung_von
754          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
755          AND bezalt.beziehungsart = bezneu.beziehungsart
756          AND bezalt.ogc_fid       < bezneu.ogc_fid
757        );
758
759COMMENT ON VIEW beziehungen_redundant IS 'alkis_beziehungen zu denen es eine identische neue Version gibt.';
760
761
762CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
763AS
764SELECT *
765 FROM alkis_beziehungen AS bezalt
766 WHERE EXISTS
767       (SELECT ogc_fid
768         FROM alkis_beziehungen AS bezneu
769        WHERE bezalt.beziehung_von = bezneu.beziehung_von
770          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
771          AND bezalt.beziehungsart = bezneu.beziehungsart
772          AND bezalt.ogc_fid       < bezneu.ogc_fid
773        )
774     -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
775     -- die aktuell noch in der Delet-Tabelle stehen
776     AND EXISTS
777        (SELECT ogc_fid
778         FROM delete
779         WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
780            OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
781        );
782
783COMMENT ON VIEW beziehungen_redundant_in_delete IS 'alkis_beziehungen zu denen es eine identische neue Version gibt und wo das Objekt noch in der delete-Tabelle vorkommt.';
784
785
786-- Suche nach Fehler durch "Replace"
787-- Wenn ax_flurstueck ÃŒber "replace" ausgetauscht wird und dabei gleichzeitig eine andere
788-- Buchungsstelle bekommt, dann bleibt die alte Buchungsstelle in den alkis_beziehungen.
789-- Mail PostNAS Mailingliste von 2013-02-20
790
791-- Version Marvin Brandt, Unna:
792
793-- CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
794-- AS
795--  SELECT gml_id, anzahl FROM
796--  ( SELECT f.*,
797--     ( SELECT count(f2.gml_id) as anzahl
798--       FROM ax_flurstueck f2
799--       JOIN alkis_beziehungen a1
800--          ON f2.gml_id = a1.beziehung_von
801--         AND a1.beziehungsart = 'istGebucht'
802--       WHERE f2.gml_id = f.gml_id
803--     ) as anzahl
804--     FROM ax_flurstueck f
805--  ) as sub
806--  WHERE sub.anzahl > 1;
807
808-- Version Frank JÀger, Lemgo (keep it simple)
809CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
810AS
811  SELECT f.gml_id, count(b.ogc_fid) AS anzahl
812    FROM ax_flurstueck f
813    JOIN alkis_beziehungen b
814      ON f.gml_id = b.beziehung_von
815  WHERE b.beziehungsart = 'istGebucht'
816  GROUP BY f.gml_id
817  HAVING count(b.ogc_fid) > 1;
818
819-- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert.
820-- Doppelte Verweise zÀhlen ohne zu prÌfen, ob die gml_id in ax_flurstueck existiert.
821--  SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
822--    FROM alkis_beziehungen b
823--   WHERE b.beziehungsart = 'istGebucht'
824--  GROUP BY b.beziehung_von
825--  HAVING count(b.ogc_fid) > 1;
826
827COMMENT ON VIEW mehrfache_buchung_zu_fs IS 'Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen';
828
829
830-- END --
Note: See TracBrowser for help on using the repository browser.