source: trunk/import/sichten.sql @ 266

Revision 266, 32.4 KB checked in by frank.jaeger, 11 years ago (diff)

Arbeiten am ALKIS-Mapfile als Entwicklerversion _entw.map zusätzlich hochgeladen.
Views und Mapproxy dazu angepasst.

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