source: trunk/import/sichten.sql @ 275

Revision 275, 40.9 KB checked in by frank.jaeger, 11 years ago (diff)

Buchauskunft: deprecated "import_request_variables" ersetzt. In 'sichten.sql' die Mehrfachdarstellung unterdrückt, nur noch advstandardmodell='DKKM1000'.

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--  2013-03-05 Beschriftungen aus ap_pto auseinander sortieren, neuer View "grenzpunkt"
13--  2013-03-12 Optimierung Hausnummern, View "gebaeude_txt" (Funktion und Name)
14--  2013-04-15 UnterdrÃŒcken doppelter Darstellung in den Views 'ap_pto_stra', 'ap_pto_nam', 'ap_pto_rest'
15
16--  -----------------------------------------
17--  Sichten fuer Verwendung im mapfiles (wms)
18--  -----------------------------------------
19
20-- WMS-Layer "ag_t_flurstueck"
21-- ---------------------------
22-- Die Geometrie befindet sich in "ap_pto", der Label in "ax_flurstueck"
23-- Die Verbindung erfolgt ÃŒber "alkis_beziehungen"
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;
38COMMENT ON VIEW s_flurstueck_nr IS 'fuer Kartendarstellung: Bruchnummerierung FlurstÃŒck (nur manuell gesetzte Positionen)';
39
40-- Wenn keine manuelle Position gesetzt ist, wird die Flaechenmitte verwendet
41
42-- ACHTUNG: Dieser View kann nicht direkt im Mapserver-WMS verwendet werden.
43-- Die Anzeige ist zu langsam. Filterung Ìber BBOX kann nicht funktionieren, da zunÀchst ALLE Standardpositionen
44-- berechnet werden mÃŒssen, bevor darÃŒber gefiltert werden kann.
45
46-- In einer Hilfstabelle mit geometrischem Index zwischenspeichern.
47-- Siehe PostProcessing Tabelle "pp_flurstueck_nr"
48
49CREATE OR REPLACE VIEW s_flurstueck_nr2
50AS
51  SELECT f.ogc_fid,
52         p.wkb_geometry,  -- manuelle Position des Textes
53         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
54    FROM ap_pto             p
55    JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
56    JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
57   WHERE v.beziehungsart = 'dientZurDarstellungVon'
58     AND p.endet IS NULL
59     AND f.endet IS NULL
60 UNION
61  SELECT f.ogc_fid,
62         ST_PointOnSurface(f.wkb_geometry) AS wkb_geometry,  -- Flaechenmitte als Position des Textes
63         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
64    FROM      ax_flurstueck     f
65    LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
66   WHERE v.beziehungsart is NULL
67     AND f.endet IS NULL;
68
69COMMENT ON VIEW s_flurstueck_nr2 IS 'Bruchnummerierung FlurstÃŒck, auch Standard-Position. Nicht direkt fuer WMS verwenden!';
70
71
72-- Layer "ag_t_gebaeude"
73-- ---------------------
74-- Problem: Zu einigen GebÀuden gibt es mehrere Hausnummern.
75-- Diese unterscheiden sich im Feld ap_pto.advstandardmodell
76-- z.B. 3 verschiedene EintrÀge mit <NULL>, {DKKM500}, {DKKM1000}, (Beispiel; Lage, Lange Straße 15 c)
77
78 --   DROP VIEW s_hausnummer_gebaeude;
79 --     CREATE OR REPLACE VIEW s_hausnummer_gebaeude
80 --     AS
81 --      SELECT p.ogc_fid,
82 --                     p.wkb_geometry,                                  -- Point
83 --                     p.drehwinkel * 57.296 AS drehwinkel, -- umn: ANGLE [drehwinkel]
84 --                     l.hausnummer                                     -- umn: LABELITEM
85 --        FROM ap_pto p
86 --        JOIN alkis_beziehungen v
87 --              ON p.gml_id = v.beziehung_von
88 --        JOIN ax_lagebezeichnungmithausnummer l
89 --              ON v.beziehung_zu  = l.gml_id
90 --       WHERE v.beziehungsart = 'dientZurDarstellungVon'
91 --             AND p.endet IS NULL
92 --             AND l.endet IS NULL;
93 --     COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÀude';
94
95-- Verbesserte Version 2013-03-07
96-- Nimmt nun vorzugsweise den Text der Darstellung aus ap_pto (bei ibR immer gefÃŒllt).
97-- Wenn der nicht gefÃŒllt ist, wird statt dessen die Nummer aus der verknÃŒpften Labebezeichnung
98-- verwendet (der hÀufigste Fall bei AED).
99DROP VIEW s_hausnummer_gebaeude;
100CREATE OR REPLACE VIEW s_hausnummer_gebaeude
101AS
102 SELECT p.ogc_fid,
103        p.wkb_geometry,                               -- Point
104        p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
105    --  p.art,
106    --  p.advstandardmodell       AS modell,  -- TEST
107    --  p.horizontaleausrichtung  AS hor,     -- = 'zentrisch'
108    --  p.vertikaleausrichtung    AS ver,     -- = 'Basis' (oft), "Mitte" (selten)
109    --  p.schriftinhalt,                      -- WMS: das bessere LABELITEM, kann aber leer sein
110    --  l.hausnummer,                         -- WMS: LABELITEM default/native
111        COALESCE(p.schriftinhalt, l.hausnummer) AS hausnummer
112   FROM ap_pto p
113   JOIN alkis_beziehungen v
114     ON p.gml_id = v.beziehung_von
115   JOIN ax_lagebezeichnungmithausnummer l
116         ON v.beziehung_zu  = l.gml_id
117  WHERE p.art = 'HNR'
118    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÀherungslösung um Redundanzen zu unterdrÃŒcken
119    AND v.beziehungsart = 'dientZurDarstellungVon'
120        AND p.endet IS NULL
121        AND l.endet IS NULL
122-- LIMIT 200 -- TEST
123;
124COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÀude';
125
126-- Welche Karten-Typen ?
127--   SELECT DISTINCT advstandardmodell FROM ap_pto p WHERE p.art = 'HNR';
128-- Liefert:
129--   "{DKKM1000}"
130--   "{DKKM1000,DKKM500}"
131--   "{DKKM500}"
132--   ""    (IS NULL)
133
134-- ibR (Mi-Lk): darzustellender Text steht immer in ap_pto.schriftinhalt
135-- AED (Lippe): ap_pto.schriftinhalt ist meist leer, nur selten ein Eintrag
136
137-- ToDo: Wie bei ap_pto_stra von mehren ap_pto zu einer Hausnummer die geeignete auswÀhlen
138
139-- ToDo: In PostProcessing die Hausnummer von l.hausnummer in p.schriftinhalt kopieren, wenn leer
140--   Das wÃŒrde die COALESCE-Trickserei ersparen
141
142-- Layer "ag_t_nebengeb"
143-- ---------------------
144-- 2013-03-05: Diese Abfrage liefert keine Daten mehr??
145--      CREATE OR REPLACE VIEW s_nummer_nebengebaeude
146--      AS
147--       SELECT p.ogc_fid,
148--                      p.wkb_geometry,
149--                      p.drehwinkel * 57.296 AS drehwinkel,    -- umn: ANGLE [drehwinkel]
150--               -- l.pseudonummer,                     -- die HsNr des zugehoerigen Hauptgebaeudes
151--                      l.laufendenummer                -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
152--         FROM ap_pto p
153--         JOIN alkis_beziehungen v
154--               ON p.gml_id = v.beziehung_von
155--         JOIN ax_lagebezeichnungmitpseudonummer l
156--               ON v.beziehung_zu  = l.gml_id
157--        WHERE v.beziehungsart = 'dientZurDarstellungVon'
158--              AND p.endet IS NULL
159--              AND l.endet IS NULL;
160--      COMMENT ON VIEW s_nummer_nebengebaeude IS 'fuer Kartendarstellung: Hausnummern NebengebÀude';
161
162-- Suche nach einem Ersatz:
163-- ax_gebaeude  >hat>  ax_lagebezeichnungmitpseudonummer, kein Drehwinkel.
164CREATE OR REPLACE VIEW lfdnr_nebengebaeude
165AS
166 SELECT g.ogc_fid,
167        g.wkb_geometry,
168    --  l.pseudonummer,                 -- TEST die HsNr des zugehoerigen Hauptgebaeudes
169        l.laufendenummer                -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
170   FROM ax_gebaeude g
171   JOIN alkis_beziehungen v
172     ON g.gml_id = v.beziehung_von
173   JOIN ax_lagebezeichnungmitpseudonummer l
174     ON v.beziehung_zu  = l.gml_id
175   WHERE v.beziehungsart = 'hat'
176     AND g.endet IS NULL
177     AND g.endet IS NULL;
178COMMENT ON VIEW lfdnr_nebengebaeude IS 'Laufende Nummer des NebengebÀudes zu einer Lagebezeichnung mit der FlÀchengeometrie des GebÀudes';
179
180
181-- GebÀude-Text
182-- ------------
183CREATE OR REPLACE VIEW gebaeude_txt
184AS
185 SELECT g.ogc_fid,
186        g.wkb_geometry,
187        g.name,                    -- selten gefÃŒllt
188        f.bezeichner AS funktion   -- umn: LABELITEM
189   FROM ax_gebaeude g
190   JOIN ax_gebaeude_funktion f
191     ON g.gebaeudefunktion = f.wert
192  WHERE g.endet IS NULL
193    AND g.gebaeudefunktion < 9998; -- "Nach Quellenlage nicht zu spezifizieren" braucht man nicht anzeigen
194COMMENT ON VIEW gebaeude_txt IS 'EntschlÌsselung der GebÀude-Funktion (Ersatz fÌr Symbole)';
195
196-- Layer "ag_p_flurstueck"
197-- -----------------------
198CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck
199AS
200 SELECT p.ogc_fid,
201        p.wkb_geometry,
202        p.drehwinkel * 57.296 AS drehwinkel,
203        f.flurstueckskennzeichen
204   FROM ap_ppo p
205   JOIN alkis_beziehungen v
206     ON p.gml_id = v.beziehung_von
207   JOIN ax_flurstueck f
208     ON v.beziehung_zu = f.gml_id
209  WHERE p.art = 'Haken'
210    AND v.beziehungsart = 'dientZurDarstellungVon'
211    AND f.endet IS NULL
212    AND p.endet IS NULL;
213
214COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck IS 'fuer Kartendarstellung';
215
216-- Layer "s_zuordungspfeil_flurstueck"
217-- -----------------------------------
218CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck
219AS
220 SELECT l.ogc_fid,
221        l.wkb_geometry
222   FROM ap_lpo l
223   JOIN alkis_beziehungen v
224     ON l.gml_id = v.beziehung_von
225   JOIN ax_flurstueck f
226     ON v.beziehung_zu = f.gml_id
227  WHERE l.art = 'Pfeil'
228    AND v.beziehungsart = 'dientZurDarstellungVon'
229    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
230    AND f.endet IS NULL
231    AND l.endet IS NULL;
232
233COMMENT ON VIEW s_zuordungspfeil_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer';
234
235
236CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck
237AS
238 SELECT l.ogc_fid,
239        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
240        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
241        st_startpoint(l.wkb_geometry) AS wkb_geometry
242   FROM ap_lpo l
243   JOIN alkis_beziehungen v
244     ON l.gml_id = v.beziehung_von
245   JOIN ax_flurstueck f
246     ON v.beziehung_zu = f.gml_id
247  WHERE l.art = 'Pfeil'
248    AND v.beziehungsart = 'dientZurDarstellungVon'
249    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
250    AND f.endet IS NULL
251    AND l.endet IS NULL;
252
253COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze';
254
255-- Drehwinkel in Bogenmass, wird vom mapserver in Grad benötigt.
256-- Umrechnung durch Faktor (180 / Pi)
257
258
259-- Layer NAME "ap_pto_stra" (Straße) GROUP "praesentation"
260-- -------------------------------------------------------
261-- Von doppelten Textpositionen nur das passendere Modell anzeigen.
262-- Eine Relation wird fuer die Gruppierung verwendet:
263--  ap_pto >dientZurDarstellungVon> ax_lagebezeichnungohnehausnummer
264CREATE OR REPLACE VIEW ap_pto_stra
265AS
266  SELECT p.ogc_fid,
267          -- p.advstandardmodell       AS modell,    -- TEST
268      -- l.gml_id, l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
269         p.schriftinhalt,                        -- WMS: LABELITEM
270         p.art,                                  -- WMS: CLASSITEM
271         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
272         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
273         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
274         p.wkb_geometry
275    FROM ap_pto p
276    JOIN alkis_beziehungen v   -- Relation zur Lagebezeichnung o. HsNr.
277      ON p.gml_id = v.beziehung_von
278    JOIN ax_lagebezeichnungohnehausnummer l
279      ON v.beziehung_zu = l.gml_id
280   WHERE NOT p.schriftinhalt IS NULL
281     AND  p.endet IS NULL                            -- nichts historisches
282     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln.
283     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
284     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
285           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
286           OR (p.advstandardmodell IS NULL
287               AND (SELECT s.ogc_fid                -- irgend ein Feld
288                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
289                      JOIN alkis_beziehungen vs     -- zur gleichen Lage o.HsNr
290                        ON s.gml_id = vs.beziehung_von
291                      JOIN ax_lagebezeichnungohnehausnummer ls
292                        ON vs.beziehung_zu = ls.gml_id
293                     WHERE ls.gml_id = l.gml_id
294                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
295                       AND NOT s.advstandardmodell IS NULL
296                     LIMIT 1  -- einer reicht als Beweis
297                                        ) IS NULL
298              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
299         )
300;
301COMMENT ON VIEW ap_pto_stra IS 'Beschriftung aus ap_pto fÃŒr Lagebezeichnung mit Art "Straße", "Weg", "Platz" oder Klassifizierung. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe';
302
303
304-- Layer NAME "ap_pto_nam" GROUP "praesentation"
305-- -------------------------------------------------------
306-- 'NAM' = Name (Eigenname) und 'ZNM' = Zweitname (touristischer oder volkstÃŒmlicher Name) zu ...
307--   -- AX_Strassenverkehr oder AX_Platz usw.
308--  ap_pto >dientZurDarstellungVon> ?irgendwas?
309
310-- Dieser View wird bisher nicht verwendet. Dazu mÃŒsste ein neuer Layer erzeugt werden und die
311-- Arten 'NAM' und 'ZNM' dann aus den View 'ap_pto_rest' heraus genommen werden.
312
313-- Entweder Layer trennen nach Text-Typen "NAM"+"ZNM" und dem Rest
314-- ODER           trennen nach fachlichen Ebenen wie "Nutzung" und "GebÀude" und ....
315
316CREATE OR REPLACE VIEW ap_pto_nam
317AS
318  SELECT p.ogc_fid,
319          -- p.advstandardmodell       AS modell,    -- TEST
320         p.schriftinhalt,                        -- WMS: LABELITEM
321         p.art,                                  -- WMS: CLASSITEM
322         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
323         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
324         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
325         p.wkb_geometry
326    FROM ap_pto p
327    JOIN alkis_beziehungen v       
328      ON p.gml_id = v.beziehung_von
329  --JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
330  --  ON v.beziehung_zu = l.gml_id
331   WHERE NOT p.schriftinhalt IS NULL
332     AND  p.endet IS NULL                            -- nichts historisches
333     AND  p.art   IN ('NAM','ZNM') -- Diese Werte als CLASSES in LAYER behandeln.
334     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
335     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
336           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
337           OR (p.advstandardmodell IS NULL
338               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
339                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
340                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
341                        ON s.gml_id = vs.beziehung_von
342                     WHERE vs.beziehung_zu = v.beziehung_zu
343                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
344                       AND NOT s.advstandardmodell IS NULL
345                     LIMIT 1  -- einer reicht als Beweis
346                                        ) IS NULL
347              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
348         )
349;
350COMMENT ON VIEW ap_pto_nam IS 'Beschriftung mit Art = Name/Zweitname. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe';
351
352
353-- Layer NAME "ap_pto" GROUP "praesentation"
354-- ----------------------------------------
355-- REST: Texte, die nicht schon in einem anderen Layer ausgegeben werden
356-- Ersetzt den View "s_beschriftung"
357
358-- alte Version bis 2013-04-15
359-- Nachteil: es werden mehrere Texte zum gleichen Objekt angezeigt die fÃŒr verschiedene MaßstÀbe gedacht sind.
360--CREATE OR REPLACE VIEW ap_pto_rest
361--AS
362--  SELECT p.ogc_fid,
363--         p.schriftinhalt,
364--         p.art,
365--         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
366--         p.wkb_geometry
367--    FROM ap_pto p
368--   WHERE not p.schriftinhalt IS NULL
369--     AND p.endet IS NULL
370--     AND p.art NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG');
371
372
373-- 2013-04-15 Doppelte Darstellung aufgrund verschiedener "advstandardmodell" zum Objekt unterdrÃŒcken analog ap_pto_stra und ap_pto_nam
374CREATE OR REPLACE VIEW ap_pto_rest
375AS
376  SELECT p.ogc_fid,
377         p.schriftinhalt,
378         p.art,
379         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
380         p.wkb_geometry
381    FROM ap_pto p
382    JOIN alkis_beziehungen v   -- Relation zur ?irgendwas?
383      ON p.gml_id = v.beziehung_von
384   WHERE not p.schriftinhalt IS NULL
385     AND p.endet IS NULL
386     AND p.art   NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG')
387     -- Diese 'IN'-Liste fortschreiben bei Erweiterungen des Mapfiles
388     -- 'PNR' (Pseudonummer, lfd.-Nr.-NebengebÀude) kommt nicht mehr vor?
389    AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
390    AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
391           -- Ersatzweise auch "keine Angabe" (nul) akzeptieren, aber nur wenn es keinen besseren Text zu ?irgendwas? gibt
392           -- Es wird hier nur bis zur Verbindungstabelle "alkis_beziehungen" gesucht, ob am anderen Ende die gleiche gml_id verlinkt ist.
393           -- Diese gml_id können dann zu verschiedenen, unbekannten Objekttabellen linken.
394           OR (p.advstandardmodell IS NULL
395               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
396                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
397                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
398                        ON s.gml_id = vs.beziehung_von
399                     WHERE vs.beziehung_zu = v.beziehung_zu
400                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
401                       AND NOT s.advstandardmodell IS NULL
402                     LIMIT 1  -- einer reicht als Ausschlußkriterium
403                                        ) IS NULL
404              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
405         );
406COMMENT ON VIEW ap_pto_rest IS 'Beschriftungen aus "ap_pto", die noch nicht in anderen Layern angezeigt werden';
407
408
409-- Texte, die NICHT dargestellt werden sollen.
410-- -------------------------------------------
411-- Texte und Text-Fragmente aus der Konvertierung ALK+ALB, die noch nicht gelöscht worden sind.
412CREATE OR REPLACE VIEW ap_pto_muell
413AS
414  SELECT p.ogc_fid,
415         p.schriftinhalt,
416         p.art,
417         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
418         p.wkb_geometry
419    FROM ap_pto p
420   WHERE not p.schriftinhalt IS NULL
421     AND p.endet IS NULL
422     AND p.art IN ('AOG_AUG','PNR');
423COMMENT ON VIEW ap_pto_muell IS 'Beschriftungen aus "ap_pto", die NICHT dargestellt werden sollen.';
424
425-- ENDE BESCHRIFTUNG
426
427-- Layer "s_zuordungspfeil_gebaeude"
428-- -----------------------------------
429CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude
430AS
431 SELECT l.ogc_fid,
432     -- alkis_beziehungen.beziehungsart, -- TEST
433     -- ap_lpo.art, -- TEST
434        l.wkb_geometry
435   FROM ap_lpo l
436   JOIN alkis_beziehungen v
437     ON l.gml_id = v.beziehung_von
438   JOIN ax_gebaeude g
439     ON v.beziehung_zu = g.gml_id
440  WHERE l.art = 'Pfeil'
441    AND v.beziehungsart = 'dientZurDarstellungVon'
442    AND g.endet IS NULL
443    AND l.endet IS NULL;
444COMMENT ON VIEW s_zuordungspfeil_gebaeude IS 'fuer Kartendarstellung: Zuordnungspfeil fÌr GebÀude-Nummer';
445
446-- Grenzpunkte
447-- -----------
448--  ax_punktortta  >zeigtAuf?> AX_Grenzpunkt
449-- Zum Punktort des Grenzpunktes auch eine Information zur Vermarkung holen
450CREATE OR REPLACE VIEW grenzpunkt
451AS
452 SELECT o.ogc_fid,
453        o.wkb_geometry,
454     -- g.punktkennung,    -- ggf spÀter als labelitem "rrrrrhhhhAnnnnn" "32483 5751 0 02002"
455        g.abmarkung_marke, -- steuert die Darstellung >9000 = unvermarkt
456        v.beziehungsart
457   FROM ax_punktortta o
458   JOIN alkis_beziehungen v
459     ON o.gml_id = v.beziehung_von
460   JOIN ax_grenzpunkt g
461     ON v.beziehung_zu  = g.gml_id
462   WHERE v.beziehungsart = 'istTeilVon'
463     AND g.endet IS NULL
464     AND g.endet IS NULL;
465COMMENT ON VIEW grenzpunkt IS 'ZusammenfÃŒhrung von Punktort (Geometrie) und AX_Grenzpunkt (Eigenschaften)';
466
467-- Sichten vom OBK (Oberbergischer Kreis)
468-- --------------------------------------
469CREATE OR REPLACE VIEW sk2004_zuordnungspfeil
470AS
471 SELECT ap.ogc_fid, ap.wkb_geometry
472 FROM ap_lpo ap
473 WHERE ((ap.signaturnummer = '2004')
474   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
475COMMENT ON VIEW sk2004_zuordnungspfeil IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer"';
476
477CREATE OR REPLACE VIEW sk2004_zuordnungspfeil_spitze
478AS
479 SELECT ap.ogc_fid, (((st_azimuth(st_pointn(ap.wkb_geometry, 1),
480        st_pointn(ap.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
481        st_startpoint(ap.wkb_geometry) AS wkb_geometry
482 FROM ap_lpo ap
483 WHERE ((ap.signaturnummer = '2004')
484   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
485-- krz: ap.signaturnummer is NULL in allen SÀtzen
486
487CREATE OR REPLACE VIEW sk2012_flurgrenze
488AS
489 SELECT fg.ogc_fid, fg.wkb_geometry
490   FROM ax_besondereflurstuecksgrenze fg
491  WHERE (3000 = ANY (fg.artderflurstuecksgrenze))
492    AND fg.advstandardmodell ~~ 'DLKM'::text;
493COMMENT ON VIEW sk2012_flurgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
494
495CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze
496AS
497 SELECT gemag.ogc_fid, gemag.wkb_geometry
498   FROM ax_besondereflurstuecksgrenze gemag
499  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze))
500    AND gemag.advstandardmodell ~~ 'DLKM'::text;
501COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
502
503CREATE OR REPLACE VIEW sk2018_bundeslandgrenze
504AS
505 SELECT blg.ogc_fid, blg.wkb_geometry
506   FROM ax_besondereflurstuecksgrenze blg
507  WHERE (7102 = ANY (blg.artderflurstuecksgrenze))
508    AND blg.advstandardmodell ~~ 'DLKM'::text;
509COMMENT ON VIEW sk2018_bundeslandgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
510
511CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze
512AS
513 SELECT rbg.ogc_fid, rbg.wkb_geometry
514   FROM ax_besondereflurstuecksgrenze rbg
515  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze))
516    AND rbg.advstandardmodell ~~ 'DLKM'::text;
517COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
518
519CREATE OR REPLACE VIEW sk2022_gemeindegrenze
520AS
521 SELECT gemg.ogc_fid, gemg.wkb_geometry
522   FROM ax_besondereflurstuecksgrenze gemg
523  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze))
524    AND gemg.advstandardmodell ~~ 'DLKM'::text;
525COMMENT ON VIEW sk2022_gemeindegrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
526
527
528-- Zusammenfassung "Politische Grenzen"  Art= 7102, 7103, 7104, 7106
529
530-- Grenze der Bundesrepublik Deutschland 7101 (G)
531-- .. des Bundeslandes 7102 (G)
532-- .. des Regierungsbezirks 7103 (G)
533-- .. des Landkreises 7104 (G)
534-- .. der Gemeinde 7106
535-- .. des Gemeindeteils 7107
536-- .. der Verwaltungsgemeinschaft 7108
537
538CREATE OR REPLACE VIEW sk201x_politische_grenze
539AS
540 SELECT ogc_fid, artderflurstuecksgrenze as art, wkb_geometry
541   FROM ax_besondereflurstuecksgrenze
542--WHERE ( ANY (artderflurstuecksgrenze) IN (7102,7103,7104,7106) )
543  WHERE (7102 = ANY (artderflurstuecksgrenze)
544     OR  7102 = ANY (artderflurstuecksgrenze)
545     OR  7103 = ANY (artderflurstuecksgrenze)
546     OR  7104 = ANY (artderflurstuecksgrenze)
547     OR  7106 = ANY (artderflurstuecksgrenze)
548    )
549    AND advstandardmodell ~~ 'DLKM'::text;
550
551COMMENT ON VIEW sk201x_politische_grenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
552-- GefÀllt mir nicht! Array-Felder eignen sich nicht als Filter. Optimierung: in Tabelle speichern
553
554
555--  ------------------------------------------
556--  Sichten fuer Fehlersuche und Daten-Analyse
557--  ------------------------------------------
558
559-- FlurstÃŒcke mit Anzeige der FlurstÃŒcksnummer an der "Standardposition"
560
561-- Nach der Konvertierung aus ALK hat zunÀchst jedes FlurstÌck eine explizit gesetzte Position der FlurstÌcksnummer.
562
563-- Nach einer manuellen Teilung bekommen die neuen FlurstÃŒcke im ALKIS nur dann eine Position,
564-- wenn die Positioin manuell bestimmt (verschoben) wurde.
565-- Wenn die FlurstÃŒcksnummer an ihrer "Standardposition" angezeigt werden soll,
566-- dann wird diese in den Daten (DHK, NAS) nicht gesetzt.
567-- Der Konverter PostNAS konvertiert aber nur die Daten, die er bekommt, er setzt nicht die Standard-Position
568-- fÃŒr die FlurstÃŒcke, die ohne eine manuelle Position kommen.
569
570-- Diese FÀlle identifizieren
571CREATE OR REPLACE VIEW flstnr_ohne_position
572AS
573 SELECT f.gml_id,
574        f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS such -- Suchstring fÃŒr ALKIS-Navigation nach FS-Kennzeichen
575 FROM        ax_flurstueck     f
576   LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
577 --LEFT JOIN ap_pto            p  ON p.gml_id       = v.beziehung_von
578  WHERE v.beziehungsart is NULL
579    AND f.endet IS NULL
580--ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
581  ;
582COMMENT ON VIEW flstnr_ohne_position IS 'FlurstÌcke ohne manuell gesetzte Position fÌr die PrÀsentation der FS-Nr';
583
584-- Umbruch im Label? z.B. "Schwimm-/nbecken"
585-- Sind 2 Buchstaben in Mapfile bei "WRAP" möglich?
586CREATE OR REPLACE VIEW texte_mit_umbruch
587AS
588 SELECT ogc_fid, schriftinhalt, art
589   FROM ap_pto
590  WHERE not schriftinhalt is null
591    AND schriftinhalt like '%/n%';
592
593
594-- EXTENT fÃŒr das Mapfile eines Mandanten ermitteln
595CREATE OR REPLACE VIEW flurstuecks_minmax AS
596 SELECT min(st_xmin(wkb_geometry)) AS r_min,
597        min(st_ymin(wkb_geometry)) AS h_min,
598        max(st_xmax(wkb_geometry)) AS r_max,
599        max(st_ymax(wkb_geometry)) AS h_max
600   FROM ax_flurstueck f
601   WHERE f.endet IS NULL;
602COMMENT ON VIEW flurstuecks_minmax IS 'Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile';
603
604-- Nach Laden der Keytables:
605CREATE OR REPLACE VIEW baurecht
606AS
607  SELECT r.ogc_fid,
608         r.wkb_geometry,
609         r.gml_id,
610         r.artderfestlegung as adfkey, -- Art der Festlegung - Key
611         r."name",                     -- Eigenname des Gebietes
612         r.stelle,                     -- Stelle Key
613         r.bezeichnung AS rechtbez,    -- Verfahrensnummer
614         a.bezeichner  AS adfbez,      -- Art der Festlegung - Bezeichnung
615         d.bezeichnung AS stellbez     -- Stelle Bezeichnung
616      -- , d.stellenart                -- weiter entschluesseln?
617    FROM ax_bauraumoderbodenordnungsrecht r
618    LEFT JOIN ax_bauraumoderbodenordnungsrecht_artderfestlegung a
619      ON r.artderfestlegung = a.wert
620    LEFT JOIN ax_dienststelle d
621      ON r.land   = d.land
622     AND r.stelle = d.stelle
623  WHERE r.endet IS NULL
624    AND d.endet IS NULL ;
625
626-- Man glaubt es kaum, aber im ALKIS haben Gemeinde und Gemarkung keinerlei Beziehung miteinander
627-- Nur durch Auswertung der FlurstÃŒcke kann man ermitteln, in welcher Gemeinde eine Gemarkung liegt.
628CREATE OR REPLACE VIEW gemarkung_in_gemeinde
629AS
630  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
631  FROM            ax_flurstueck
632  WHERE           endet IS NULL
633  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
634;
635
636COMMENT ON VIEW gemarkung_in_gemeinde IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
637
638
639-- Untersuchen, welche Geometrie-Typen vorkommen
640CREATE OR REPLACE VIEW arten_von_flurstuecksgeometrie
641AS
642 SELECT   count(gml_id) as anzahl,
643          st_geometrytype(wkb_geometry)
644 FROM     ax_flurstueck
645 WHERE    endet IS NULL
646 GROUP BY st_geometrytype(wkb_geometry);
647
648
649-- A d r e s s e n
650
651-- Verschluesselte Lagebezeichnung (Strasse und Hausnummer) fuer eine Gemeinde
652-- Schluessel der Gemeinde nach Bedarf anpassen!
653
654--  FEHLER: Funktion to_char(character varying, unknown) existiert nicht
655
656
657CREATE OR REPLACE VIEW adressen_hausnummern
658AS
659    SELECT
660        s.bezeichnung AS strassenname,
661         g.bezeichnung AS gemeindename,
662         l.land,
663         l.regierungsbezirk,
664         l.kreis,
665         l.gemeinde,
666         l.lage        AS strassenschluessel,
667         l.hausnummer
668    FROM   ax_lagebezeichnungmithausnummer l 
669    JOIN   ax_gemeinde g
670      ON l.kreis=g.kreis
671     AND l.gemeinde=g.gemeinde
672    JOIN   ax_lagebezeichnungkatalogeintrag s
673      ON l.kreis=s.kreis
674     AND l.gemeinde=s.gemeinde
675     AND l.lage = s.lage        -- ab PostNAS 0.6
676    WHERE     l.gemeinde = 40;  -- "40" = Stadt Lage
677
678
679-- Zuordnung dieser Adressen zu Flurstuecken
680-- Schluessel der Gemeinde nach Bedarf anpassen!
681
682CREATE OR REPLACE VIEW adressen_zum_flurstueck
683AS
684    SELECT
685           f.gemarkungsnummer,
686           f.flurnummer,
687           f.zaehler,
688           f.nenner,
689           g.bezeichnung AS gemeindename,
690           s.bezeichnung AS strassenname,
691           l.lage        AS strassenschluessel,
692           l.hausnummer
693      FROM   ax_flurstueck f
694      JOIN   alkis_beziehungen v
695        ON f.gml_id=v.beziehung_von
696      JOIN   ax_lagebezeichnungmithausnummer l 
697        ON l.gml_id=v.beziehung_zu
698      JOIN   ax_gemeinde g
699        ON l.kreis=g.kreis
700       AND l.gemeinde=g.gemeinde
701      JOIN   ax_lagebezeichnungkatalogeintrag s
702        ON l.kreis=s.kreis
703       AND l.gemeinde=s.gemeinde
704       AND l.lage = s.lage   -- ab PostNAS 0.6
705     WHERE v.beziehungsart='weistAuf'
706       AND l.gemeinde = 40  -- "40" = Stadt Lage
707     ORDER BY
708           f.gemarkungsnummer,
709           f.flurnummer,
710           f.zaehler,
711           f.nenner;
712
713-- Punktförmige  P r À s e n t a t i o n s o b j k t e  (ap_pto)
714-- Ermittlung der vorkommenden Arten
715CREATE OR REPLACE VIEW beschriftung_was_kommt_vor
716AS
717  SELECT DISTINCT art, horizontaleausrichtung, vertikaleausrichtung
718    FROM ap_pto
719   WHERE not schriftinhalt is null
720  ORDER BY art;
721COMMENT ON VIEW beschriftung_was_kommt_vor IS 'Analyse der vorkommenden Kombinationen in ap_pto (Beschriftung)';
722
723-- Ergebnis:
724-- 2013: PostNAS 0.7  (aus 150,260,340)
725-- ------------------
726--      "AOG_AUG"                               "zentrisch";"Basis"  - Schriftinhalkt immer nur "I" ?
727--      "BWF"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
728--      "BWF_ZUS"                               "zentrisch";"Basis"
729--      "FKT"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"
730--      "FKT_TEXT"                              "zentrisch";"Mitte"
731--      "FreierText"                    "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
732--      "FreierTextHHO"                 "zentrisch";"Mitte"
733--      "Friedhof"                              "zentrisch";"Basis"
734--      "Gewanne"                               "zentrisch";"Basis"/"zentrisch";"Mitte"
735--      "GFK"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
736--      "HNR"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"  --> Hausnummer, group gebaeude
737--      "HHO"                                   "zentrisch";"Mitte"  -- HHO = objekthoehe zu ax_gebaeude?
738--      "NAM"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
739--      "SPO"                                   "zentrisch";"Basis"/
740--      "Vorratsbehaelter"              "zentrisch";"Basis"
741--      "WeitereHoehe"                  "zentrisch";"Mitte"
742--      "ZAE_NEN"                               "zentrisch";"Basis"
743--      "ZNM"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
744
745--* Layer "ap_pto_stra"
746--                          hor ; ver / hor ; ver
747--      "BezKlassifizierungStrasse" "zent.";"Basis"     / "linksbÃŒndig";"Basis"
748--      "Platz"                                 "zentrisch";"Basis" / "zentrisch";"Mitte"
749--      "Strasse"                               "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
750--      "Weg"                                   "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
751
752--* geplanter layer "ap_pto_wasser"
753--      "StehendesGewaesser"    "zentrisch";"Basis"
754--      "Fliessgewaesser"               "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
755
756
757-- FlurstÃŒcke eines EigentÃŒmers
758-- ----------------------------
759
760-- Dieser View liefert nur die (einfache) Buchungsart "GrundstÃŒck"
761-- Solche FÀlle wie "Erbbaurecht an GrundstÌck" oder "Wohnungs-/Teileigentum an aufgeteiltes GrundstÌck"
762-- oder "Miteigentum an aufteteiltes GrundstÃŒck" fehlen in deisere Auswertung.
763-- Dazu siehe: "rechte_eines_eigentuemers".
764
765-- Das Ergbenis ist gedacht fÃŒr den Export als CSV und Weiterverarbeitung mit einer Tabellenkalkulation
766-- oder einer einfachen Datenbank.
767
768-- Auch ein Export als Shape ist moeglich (dafuer: geom hinzugefuegt, Feldnamen gekuerzt)
769-- Kommando:
770--  pgsql2shp -h localhost -p 5432 -f "/data/.../alkis_fs_gemeinde.shp"  [db-name]  public.flurstuecke_eines_eigentuemers
771
772-- Übersicht der Tabellen:
773--
774-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle >istGebucht> Flurstueck
775--                                              *-> Bezirk                *-> Buchungsart     *-> Gemarkung
776
777-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
778
779CREATE OR REPLACE VIEW flurstuecke_eines_eigentuemers
780AS
781   SELECT
782      k.bezeichnung                AS gemarkung,
783      k.gemarkungsnummer           AS gemkg_nr,
784      f.flurnummer                 AS flur,
785      f.zaehler                    AS fs_zaehler,
786      f.nenner                     AS fs_nenner,
787      f.amtlicheflaeche            AS flaeche,
788      f.wkb_geometry               AS geom,  -- fuer Export als Shape
789   -- g.bezirk,
790      b.bezeichnung                AS bezirkname,
791      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
792      g.blattart,
793      s.laufendenummer             AS bvnr,
794      art.bezeichner               AS buchgsart,
795   -- s.zaehler || '/' || s.nenner AS buchg_anteil,
796      n.laufendenummernachdin1421  AS name_num,
797   -- n.zaehler || '/' || n.nenner AS nam_anteil,
798      p.nachnameoderfirma          AS nachname --,
799   -- p.vorname
800   FROM       ax_person              p
801        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
802        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
803        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
804        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
805        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
806        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
807        JOIN  ax_buchungsstelle      s    ON s.gml_id = bgs.beziehung_von
808        JOIN  ax_buchungsstelle_buchungsart art ON s.buchungsart = art.wert
809        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = s.gml_id
810        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
811        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
812   WHERE p.nachnameoderfirma LIKE 'Gemeinde %'   -- ** Bei Bedarf anpassen!
813     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
814     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
815     AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
816     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
817     AND p.endet IS NULL
818     AND n.endet IS NULL
819     AND g.endet IS NULL
820     AND b.endet IS NULL
821     AND s.endet IS NULL
822     AND f.endet IS NULL
823     AND k.endet IS NULL
824   ORDER BY   
825         k.bezeichnung,
826         f.flurnummer,
827         f.zaehler,
828         f.nenner,
829         g.bezirk,
830         g.buchungsblattnummermitbuchstabenerweiterung,
831         s.laufendenummer
832;
833
834
835-- Rechte eines EigentÃŒmers
836-- ------------------------
837-- Dieser View sucht speziell die FÀlle wo eine Buchungsstelle ein Recht "an" einer anderen Buchungsstelle hat.
838--  - "Erbbaurecht *an* GrundstÃŒck"
839--  - "Wohnungs-/Teileigentum *an* Aufgeteiltes GrundstÃŒck"
840--  - "Miteigentum *an* Aufteteiltes GrundstÃŒck"
841-- Suchkriterium ist der Name des EigentÃŒmers auf dem "herrschenden" Grundbuch, also dem Besitzer des Rechtes.
842
843-- Diese FÀlle fehlen im View "flurstuecke_eines_eigentuemers".
844
845-- Übersicht der Tabellen:
846--
847-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle-h >an> Stelle-d >istGebucht> Flurstueck
848
849-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
850
851
852CREATE OR REPLACE VIEW rechte_eines_eigentuemers
853AS
854   SELECT
855      k.bezeichnung                AS gemarkung,
856      k.gemarkungsnummer           AS gemkg_nr,
857      f.flurnummer                 AS flur,
858      f.zaehler                    AS fs_zaehler,
859      f.nenner                     AS fs_nenner,
860      f.amtlicheflaeche            AS flaeche,
861      f.wkb_geometry               AS geom,  -- fuer Export als Shape
862   -- g.bezirk,
863      b.bezeichnung                AS bezirkname,
864      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
865   -- g.blattart,
866      sh.laufendenummer            AS bvnr_herr,
867      sh.zaehler || '/' || sh.nenner AS buchg_anteil_herr,
868      arth.bezeichner              AS buchgsa_herr,
869      bss.beziehungsart            AS bez_art,
870      artd.bezeichner              AS buchgsa_dien,
871      sd.laufendenummer            AS bvnr_dien,
872   -- sd.zaehler || '/' || sd.nenner AS buchg_anteil_dien,
873      n.laufendenummernachdin1421  AS name_num,
874   -- n.zaehler || '/' || n.nenner AS nam_anteil,
875      p.nachnameoderfirma          AS nachname --, 
876   -- p.vorname
877   FROM       ax_person              p
878        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
879        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
880        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
881        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
882        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
883        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
884        JOIN  ax_buchungsstelle      sh   ON sh.gml_id = bgs.beziehung_von  -- herrschende Buchung
885        JOIN  ax_buchungsstelle_buchungsart arth ON sh.buchungsart = arth.wert
886        JOIN  alkis_beziehungen      bss  ON sh.gml_id = bss.beziehung_von
887        JOIN  ax_buchungsstelle      sd   ON sd.gml_id = bss.beziehung_zu   -- dienende Buchung
888        JOIN  ax_buchungsstelle_buchungsart artd ON sd.buchungsart = artd.wert
889        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = sd.gml_id
890        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
891        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
892   WHERE p.nachnameoderfirma LIKE 'Stadt %'   -- ** Bei Bedarf anpassen!
893     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
894     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
895     AND bgs.beziehungsart = 'istBestandteilVon' -- B-Stelle herr   >> Grundbuch
896     AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
897     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
898     AND p.endet IS NULL
899     AND n.endet IS NULL
900     AND g.endet IS NULL
901     AND b.endet IS NULL
902     AND sh.endet IS NULL
903     AND sd.endet IS NULL
904     AND f.endet IS NULL
905     AND k.endet IS NULL
906   ORDER BY   
907         k.bezeichnung,
908         f.flurnummer,
909         f.zaehler,
910         f.nenner,
911         g.bezirk,
912         g.buchungsblattnummermitbuchstabenerweiterung,
913         sh.laufendenummer
914;
915
916CREATE OR REPLACE VIEW beziehungen_redundant
917AS
918SELECT *
919 FROM alkis_beziehungen AS bezalt
920 WHERE EXISTS
921       (SELECT ogc_fid
922         FROM alkis_beziehungen AS bezneu
923        WHERE bezalt.beziehung_von = bezneu.beziehung_von
924          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
925          AND bezalt.beziehungsart = bezneu.beziehungsart
926          AND bezalt.ogc_fid       < bezneu.ogc_fid
927        );
928
929COMMENT ON VIEW beziehungen_redundant IS 'alkis_beziehungen zu denen es eine identische neue Version gibt.';
930
931
932CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
933AS
934SELECT *
935 FROM alkis_beziehungen AS bezalt
936 WHERE EXISTS
937       (SELECT ogc_fid
938         FROM alkis_beziehungen AS bezneu
939        WHERE bezalt.beziehung_von = bezneu.beziehung_von
940          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
941          AND bezalt.beziehungsart = bezneu.beziehungsart
942          AND bezalt.ogc_fid       < bezneu.ogc_fid
943        )
944     -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
945     -- die aktuell noch in der Delet-Tabelle stehen
946     AND EXISTS
947        (SELECT ogc_fid
948         FROM delete
949         WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
950            OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
951        );
952
953COMMENT 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.';
954
955
956-- Suche nach Fehler durch "Replace"
957-- Wenn ax_flurstueck ÃŒber "replace" ausgetauscht wird und dabei gleichzeitig eine andere
958-- Buchungsstelle bekommt, dann bleibt die alte Buchungsstelle in den alkis_beziehungen.
959-- Mail PostNAS Mailingliste von 2013-02-20
960CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
961AS
962  SELECT f.gml_id, count(b.ogc_fid) AS anzahl
963    FROM ax_flurstueck f
964    JOIN alkis_beziehungen b
965      ON f.gml_id = b.beziehung_von
966  WHERE b.beziehungsart = 'istGebucht'
967  GROUP BY f.gml_id
968  HAVING count(b.ogc_fid) > 1;
969
970-- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert.
971-- Doppelte Verweise zÀhlen ohne zu prÌfen, ob die gml_id in ax_flurstueck existiert.
972--  SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
973--    FROM alkis_beziehungen b
974--   WHERE b.beziehungsart = 'istGebucht'
975--  GROUP BY b.beziehung_von
976--  HAVING count(b.ogc_fid) > 1;
977
978COMMENT ON VIEW mehrfache_buchung_zu_fs IS 'Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen';
979
980-- END --
Note: See TracBrowser for help on using the repository browser.