source: trunk/import/sichten.sql @ 269

Revision 269, 35.6 KB checked in by frank.jaeger, 11 years ago (diff)

ALKIS-Mapfile: Neuer Layer "ax_gebaeude_txt" (Funktion und Name des Gebäudes). Views passend dazu.

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