source: trunk/import/sichten_wms.sql @ 276

Revision 276, 31.9 KB checked in by frank.jaeger, 11 years ago (diff)

Views um Thema "Bodenschätzung" erweitert, Mapbender-Nav korrigiert, sichten.sql wurde geteilt

Line 
1-- =====
2-- ALKIS
3-- =====
4
5--  PostNAS 0.7
6
7--  -----------------------------------------
8--  Sichten fuer Verwendung im mapfiles (wms)
9--  -----------------------------------------
10
11--  Dieses SQL sollte in jeder PostNAS-ALKIS-Datenbank verarbeitet werden, weil es vom Mapfile benötigt wird.
12
13--  2012-04-17 flstnr_ohne_position
14--  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden
15--  2012-10-29 Redundanzen in Beziehungen suchen (entstehen durch replace)
16--  2013-02-20 Mehrfache Buchungsstellen zum FS suchen, dies sind Auswirkungen eines Fehlers bei Replace
17--  2013-03-05 Beschriftungen aus ap_pto auseinander sortieren, neuer View "grenzpunkt"
18--  2013-03-12 Optimierung Hausnummern, View "gebaeude_txt" (Funktion und Name)
19--  2013-04-15 UnterdrÃŒcken doppelter Darstellung in den Views 'ap_pto_stra', 'ap_pto_nam', 'ap_pto_rest'
20--  2013-04-16 Thema "BodenschÀtzung" und fehlernde Kommentare zum Views ergÀnzt.
21--             Diese Datei aufgeteilt in "sichten.sql" und "sichten_wms.sql"
22
23
24-- WMS-Layer "ag_t_flurstueck"
25-- ---------------------------
26-- Die Geometrie befindet sich in "ap_pto", der Label in "ax_flurstueck"
27-- Die Verbindung erfolgt ÃŒber "alkis_beziehungen"
28
29-- Bruchnummerierung erzeugen
30-- ALT 2012-04-17: Diese Version zeigt nur die manuell gesetzten Positionen
31CREATE OR REPLACE VIEW s_flurstueck_nr
32AS
33 SELECT f.ogc_fid,
34        p.wkb_geometry,  -- Position des Textes
35        f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
36   FROM ap_pto             p
37   JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
38   JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
39  WHERE v.beziehungsart = 'dientZurDarstellungVon'
40    AND p.endet IS NULL  AND f.endet IS NULL;
41COMMENT ON VIEW s_flurstueck_nr IS 'Sicht fÃŒr Kartendarstellung ÃŒber PostProcessing: Bruchnummerierung FlurstÃŒck (nur manuell gesetzte Positionen)';
42
43-- Wenn keine manuelle Position gesetzt ist, wird die Flaechenmitte verwendet
44
45-- ACHTUNG: Dieser View kann nicht direkt im Mapserver-WMS verwendet werden.
46-- Die Anzeige ist zu langsam. Filterung Ìber BBOX kann nicht funktionieren, da zunÀchst ALLE Standardpositionen
47-- berechnet werden mÃŒssen, bevor darÃŒber gefiltert werden kann.
48
49-- In einer Hilfstabelle mit geometrischem Index zwischenspeichern.
50-- Siehe PostProcessing Tabelle "pp_flurstueck_nr"
51
52CREATE OR REPLACE VIEW s_flurstueck_nr2
53AS
54  SELECT f.ogc_fid,
55         p.wkb_geometry,  -- manuelle Position des Textes
56         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
57    FROM ap_pto             p
58    JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
59    JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
60   WHERE v.beziehungsart = 'dientZurDarstellungVon'
61     AND p.endet IS NULL
62     AND f.endet IS NULL
63 UNION
64  SELECT f.ogc_fid,
65         ST_PointOnSurface(f.wkb_geometry) AS wkb_geometry,  -- FlÀchenmitte als Position des Textes
66         f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
67    FROM      ax_flurstueck     f
68    LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
69   WHERE v.beziehungsart is NULL AND f.endet IS NULL;
70COMMENT ON VIEW s_flurstueck_nr2 IS 'Sicht fÃŒr Kartendarstellung ÃŒber PostProcessing: Bruchnummerierung FlurstÃŒck, auch Standard-Position. Nicht direkt fuer WMS verwenden!';
71
72
73-- Layer "ag_t_gebaeude"
74-- ---------------------
75-- Problem: Zu einigen GebÀuden gibt es mehrere Hausnummern.
76-- Diese unterscheiden sich im Feld ap_pto.advstandardmodell
77-- z.B. 3 verschiedene EintrÀge mit <NULL>, {DKKM500}, {DKKM1000}, (Beispiel; Lage, Lange Straße 15 c)
78
79 -- DROP VIEW s_hausnummer_gebaeude;
80 --     CREATE OR REPLACE VIEW s_hausnummer_gebaeude
81 --     AS
82 --      SELECT p.ogc_fid, p.wkb_geometry,
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 ON p.gml_id = v.beziehung_von
87 --        JOIN ax_lagebezeichnungmithausnummer l ON v.beziehung_zu  = l.gml_id
88 --       WHERE v.beziehungsart = 'dientZurDarstellungVon'
89 --             AND p.endet IS NULL AND l.endet IS NULL;
90 --     COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÀude';
91
92-- Verbesserte Version 2013-03-07
93-- Nimmt nun vorzugsweise den Text der Darstellung aus ap_pto (bei ibR immer gefÃŒllt).
94-- Wenn der nicht gefÃŒllt ist, wird statt dessen die Nummer aus der verknÃŒpften Labebezeichnung
95-- verwendet (der hÀufigste Fall bei AED).
96DROP VIEW s_hausnummer_gebaeude;
97CREATE OR REPLACE VIEW s_hausnummer_gebaeude
98AS
99 SELECT p.ogc_fid,
100        p.wkb_geometry,                               -- Point
101        p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
102    --  p.art,
103    --  p.advstandardmodell       AS modell,  -- TEST
104    --  p.horizontaleausrichtung  AS hor,     -- = 'zentrisch'
105    --  p.vertikaleausrichtung    AS ver,     -- = 'Basis' (oft), "Mitte" (selten)
106    --  p.schriftinhalt,                      -- WMS: das bessere LABELITEM, kann aber leer sein
107    --  l.hausnummer,                         -- WMS: LABELITEM default/native
108        COALESCE(p.schriftinhalt, l.hausnummer) AS hausnummer
109   FROM ap_pto p
110   JOIN alkis_beziehungen v
111     ON p.gml_id = v.beziehung_von
112   JOIN ax_lagebezeichnungmithausnummer l
113         ON v.beziehung_zu  = l.gml_id
114  WHERE p.art = 'HNR'
115    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÀherungslösung um Redundanzen zu unterdrÃŒcken
116    AND v.beziehungsart = 'dientZurDarstellungVon'
117        AND p.endet IS NULL
118        AND l.endet IS NULL;
119COMMENT ON VIEW s_hausnummer_gebaeude IS 'Sicht fÌr Kartendarstellung: Hausnummern der HauptgebÀude.';
120-- ibR: darzustellender Text steht immer in ap_pto.schriftinhalt
121-- AED: ap_pto.schriftinhalt ist meist leer, nur selten ein Eintrag
122
123-- ToDo: In PostProcessing die Hausnummer von l.hausnummer in p.schriftinhalt kopieren, wenn leer
124--   Das wÃŒrde die COALESCE-Trickserei ersparen
125
126
127-- Layer "ag_t_nebengeb"
128-- ---------------------
129-- 2013-03-05: Diese Abfrage liefert keine Daten mehr??
130--      CREATE OR REPLACE VIEW s_nummer_nebengebaeude
131--      AS
132--       SELECT p.ogc_fid, p.wkb_geometry,
133--                      p.drehwinkel * 57.296 AS drehwinkel,    -- umn: ANGLE [drehwinkel]
134--               -- l.pseudonummer,                     -- die HsNr des zugehoerigen Hauptgebaeudes
135--                      l.laufendenummer                -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
136--         FROM ap_pto p
137--         JOIN alkis_beziehungen v
138--               ON p.gml_id = v.beziehung_von
139--         JOIN ax_lagebezeichnungmitpseudonummer l
140--               ON v.beziehung_zu  = l.gml_id
141--        WHERE v.beziehungsart = 'dientZurDarstellungVon'
142--              AND p.endet IS NULL AND l.endet IS NULL;
143--      COMMENT ON VIEW s_nummer_nebengebaeude IS 'Sicht fÃŒr Kartendarstellung: Hausnummern NebengebÀude (manuelle Position)';
144
145-- Suche nach einem Ersatz:
146-- ax_gebaeude  >hat>  ax_lagebezeichnungmitpseudonummer, kein Drehwinkel.
147CREATE OR REPLACE VIEW lfdnr_nebengebaeude
148AS
149 SELECT g.ogc_fid,
150        g.wkb_geometry,
151    --  l.pseudonummer,                 -- TEST die HsNr des zugehoerigen Hauptgebaeudes
152        l.laufendenummer                -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
153   FROM ax_gebaeude g
154   JOIN alkis_beziehungen v
155     ON g.gml_id = v.beziehung_von
156   JOIN ax_lagebezeichnungmitpseudonummer l
157     ON v.beziehung_zu  = l.gml_id
158   WHERE v.beziehungsart = 'hat'
159     AND g.endet IS NULL
160     AND g.endet IS NULL;
161COMMENT ON VIEW lfdnr_nebengebaeude IS 'Sicht fÌr Kartendarstellung: Laufende Nummer des NebengebÀudes zu einer Lagebezeichnung mit der FlÀchengeometrie des GebÀudes';
162
163
164-- GebÀude-Text
165-- ------------
166CREATE OR REPLACE VIEW gebaeude_txt
167AS
168 SELECT g.ogc_fid,
169        g.wkb_geometry,
170        g.name,                    -- selten gefÃŒllt
171        f.bezeichner AS funktion   -- umn: LABELITEM
172   FROM ax_gebaeude g
173   JOIN ax_gebaeude_funktion f
174     ON g.gebaeudefunktion = f.wert
175  WHERE g.endet IS NULL
176    AND g.gebaeudefunktion < 9998; -- "Nach Quellenlage nicht zu spezifizieren" braucht man nicht anzeigen
177COMMENT ON VIEW gebaeude_txt IS 'Sicht fÌr Kartendarstellung: Name zum GebÀude und EntschlÌsselung der GebÀude-Funktion (Ersatz fÌr Symbole)';
178
179-- Layer "ag_p_flurstueck"
180-- -----------------------
181CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck
182AS
183 SELECT p.ogc_fid,
184        p.wkb_geometry,
185        p.drehwinkel * 57.296 AS drehwinkel,
186        f.flurstueckskennzeichen
187   FROM ap_ppo p
188   JOIN alkis_beziehungen v
189     ON p.gml_id = v.beziehung_von
190   JOIN ax_flurstueck f
191     ON v.beziehung_zu = f.gml_id
192  WHERE p.art = 'Haken'
193    AND v.beziehungsart = 'dientZurDarstellungVon'
194    AND f.endet IS NULL
195    AND p.endet IS NULL;
196COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck IS 'Sicht fÌr Kartendarstellung: Zugehörigkeitshaken zum FlurstÌck.';
197
198-- Layer "s_zuordungspfeil_flurstueck" (Signaturnummer 2004)
199-- -----------------------------------
200CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck
201AS
202 SELECT l.ogc_fid,
203        l.wkb_geometry
204   FROM ap_lpo l
205   JOIN alkis_beziehungen v
206     ON l.gml_id = v.beziehung_von
207   JOIN ax_flurstueck f
208     ON v.beziehung_zu = f.gml_id
209  WHERE l.art = 'Pfeil'
210    AND v.beziehungsart = 'dientZurDarstellungVon'
211    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
212    AND f.endet IS NULL
213    AND l.endet IS NULL;
214-- Die OBK-Alternative "sk2004_zuordnungspfeil" wird NICHT verwendet. Siehe dort.
215COMMENT ON VIEW s_zuordungspfeil_flurstueck IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil zur FlurstÃŒcksnummer, Liniengeometrie.';
216
217CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck
218AS
219 SELECT l.ogc_fid,
220        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
221        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
222        st_startpoint(l.wkb_geometry) AS wkb_geometry
223   FROM ap_lpo l
224   JOIN alkis_beziehungen v
225     ON l.gml_id = v.beziehung_von
226   JOIN ax_flurstueck f
227     ON v.beziehung_zu = f.gml_id
228  WHERE l.art = 'Pfeil'
229    AND v.beziehungsart = 'dientZurDarstellungVon'
230    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
231    AND f.endet IS NULL
232    AND l.endet IS NULL;
233-- Die OBK-Alternativen "sk2004_zuordnungspfeil_spitze" wird NICHT verwendet. Siehe dort.
234COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze, Punktgeometrie mit Drehwinkel.';
235
236-- Drehwinkel in Bogenmass, wird vom mapserver in Grad benötigt. Umrechnung durch Faktor (180 / Pi)
237
238-- Zuordnungspfeil BodenschÀtzung (Signaturnummer 2701)
239-- ----------------------------------------------------
240CREATE OR REPLACE VIEW s_zuordungspfeil_bodensch
241AS
242 SELECT l.ogc_fid,
243        l.wkb_geometry
244   FROM ap_lpo l
245   JOIN alkis_beziehungen v
246     ON l.gml_id = v.beziehung_von
247   JOIN ax_bodenschaetzung b
248     ON v.beziehung_zu = b.gml_id
249  WHERE l.art = 'Pfeil'
250    AND v.beziehungsart = 'dientZurDarstellungVon'
251    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
252    AND b.endet IS NULL
253    AND l.endet IS NULL;
254COMMENT ON VIEW s_zuordungspfeil_bodensch IS 'Sicht fÌr Kartendarstellung: Zuordnungspfeil BodenschÀtzung, Liniengeometrie.';
255
256CREATE OR REPLACE VIEW s_zuordungspfeilspitze_bodensch
257AS
258 SELECT l.ogc_fid,
259        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
260        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
261        st_startpoint(l.wkb_geometry) AS wkb_geometry
262   FROM ap_lpo l
263   JOIN alkis_beziehungen v
264     ON l.gml_id = v.beziehung_von
265   JOIN ax_bodenschaetzung b
266     ON v.beziehung_zu = b.gml_id
267  WHERE l.art = 'Pfeil'
268    AND v.beziehungsart = 'dientZurDarstellungVon'
269    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
270    AND b.endet IS NULL
271    AND l.endet IS NULL;
272-- Die OBK-Alternativen "sk2004_zuordnungspfeil_spitze" wird NICHT verwendet. Siehe dort.
273COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'Sicht fÌr Kartendarstellung: Zuordnungspfeil BodenschÀtzung, Spitze, Punktgeometrie mit Drehwinkel.';
274
275
276-- Layer NAME "ap_pto_stra" (Straße) GROUP "praesentation"
277-- -------------------------------------------------------
278-- Von doppelten Textpositionen nur das passendere Modell anzeigen.
279-- Eine Relation wird fuer die Gruppierung verwendet:
280--  ap_pto >dientZurDarstellungVon> ax_lagebezeichnungohnehausnummer
281CREATE OR REPLACE VIEW ap_pto_stra
282AS
283  SELECT p.ogc_fid,
284          -- p.advstandardmodell       AS modell,    -- TEST
285      -- l.gml_id, l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
286         p.schriftinhalt,                        -- WMS: LABELITEM
287         p.art,                                  -- WMS: CLASSITEM
288         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
289         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
290         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
291         p.wkb_geometry
292    FROM ap_pto p
293    JOIN alkis_beziehungen v   -- Relation zur Lagebezeichnung o. HsNr.
294      ON p.gml_id = v.beziehung_von
295    JOIN ax_lagebezeichnungohnehausnummer l
296      ON v.beziehung_zu = l.gml_id
297   WHERE NOT p.schriftinhalt IS NULL
298     AND  p.endet IS NULL                            -- nichts historisches
299     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln.
300     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
301     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
302           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
303           OR (p.advstandardmodell IS NULL
304               AND (SELECT s.ogc_fid                -- irgend ein Feld
305                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
306                      JOIN alkis_beziehungen vs     -- zur gleichen Lage o.HsNr
307                        ON s.gml_id = vs.beziehung_von
308                      JOIN ax_lagebezeichnungohnehausnummer ls
309                        ON vs.beziehung_zu = ls.gml_id
310                     WHERE ls.gml_id = l.gml_id
311                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
312                       AND NOT s.advstandardmodell IS NULL
313                     LIMIT 1  -- einer reicht als Beweis
314                                        ) IS NULL
315              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
316         )
317;
318COMMENT ON VIEW ap_pto_stra IS 'Sicht fÃŒr Kartendarstellung: Beschriftung aus ap_pto fÃŒr Lagebezeichnung mit Art "Straße", "Weg", "Platz" oder Klassifizierung. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe';
319-- ToDo: Im PostProcessing in einer Tabelle speichern.
320
321
322-- Layer NAME "ap_pto_nam" GROUP "praesentation"
323-- -------------------------------------------------------
324-- 'NAM' = Name (Eigenname) und 'ZNM' = Zweitname (touristischer oder volkstÃŒmlicher Name) zu ...
325--   -- AX_Strassenverkehr oder AX_Platz usw.
326--  ap_pto >dientZurDarstellungVon> ?irgendwas?
327
328-- Dieser View wird bisher nicht verwendet. Dazu mÃŒsste ein neuer Layer erzeugt werden und die
329-- Arten 'NAM' und 'ZNM' dann aus den View 'ap_pto_rest' heraus genommen werden.
330
331-- Entweder Layer trennen nach Text-Typen "NAM"+"ZNM" und dem Rest
332-- ODER           trennen nach fachlichen Ebenen wie "Nutzung" und "GebÀude" und ....
333
334CREATE OR REPLACE VIEW ap_pto_nam
335AS
336  SELECT p.ogc_fid,
337          -- p.advstandardmodell       AS modell,    -- TEST
338         p.schriftinhalt,                        -- WMS: LABELITEM
339         p.art,                                  -- WMS: CLASSITEM
340         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
341         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
342         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
343         p.wkb_geometry
344    FROM ap_pto p
345    JOIN alkis_beziehungen v       
346      ON p.gml_id = v.beziehung_von
347  --JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
348  --  ON v.beziehung_zu = l.gml_id
349   WHERE NOT p.schriftinhalt IS NULL
350     AND  p.endet IS NULL                            -- nichts historisches
351     AND  p.art   IN ('NAM','ZNM') -- Diese Werte als CLASSES in LAYER behandeln.
352     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
353     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
354           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
355           OR (p.advstandardmodell IS NULL
356               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
357                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
358                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
359                        ON s.gml_id = vs.beziehung_von
360                     WHERE vs.beziehung_zu = v.beziehung_zu
361                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
362                       AND NOT s.advstandardmodell IS NULL
363                     LIMIT 1  -- einer reicht als Beweis
364                                        ) IS NULL
365              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
366         )
367;
368COMMENT ON VIEW ap_pto_nam IS 'Sicht fÃŒr Kartendarstellung: Beschriftung mit Art = Name/Zweitname. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe.';
369-- ToDo: Im PostProcessing in einer Tabelle speichern.
370
371
372-- Layer NAME "ap_pto" GROUP "praesentation"
373-- ----------------------------------------
374-- REST: Texte, die nicht schon in einem anderen Layer ausgegeben werden
375-- Ersetzt den View "s_beschriftung"
376
377-- alte Version bis 2013-04-15
378-- Nachteil: es werden mehrere Texte zum gleichen Objekt angezeigt die fÃŒr verschiedene MaßstÀbe gedacht sind.
379--CREATE OR REPLACE VIEW ap_pto_rest
380--AS
381--  SELECT p.ogc_fid,
382--         p.schriftinhalt,
383--         p.art,
384--         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
385--         p.wkb_geometry
386--    FROM ap_pto p
387--   WHERE not p.schriftinhalt IS NULL
388--     AND p.endet IS NULL
389--     AND p.art NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG');
390
391
392-- 2013-04-15 Doppelte Darstellung aufgrund verschiedener "advstandardmodell" zum Objekt unterdrÃŒcken analog ap_pto_stra und ap_pto_nam
393CREATE OR REPLACE VIEW ap_pto_rest
394AS
395  SELECT p.ogc_fid,
396         p.schriftinhalt,
397         p.art,
398         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
399         p.wkb_geometry
400    FROM ap_pto p
401    JOIN alkis_beziehungen v   -- Relation zur ?irgendwas?
402      ON p.gml_id = v.beziehung_von
403   WHERE not p.schriftinhalt IS NULL
404     AND p.endet IS NULL
405     AND p.art   NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG')
406     -- Diese 'IN'-Liste fortschreiben bei Erweiterungen des Mapfiles
407     -- 'PNR' (Pseudonummer, lfd.-Nr.-NebengebÀude) kommt nicht mehr vor?
408    AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
409    AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
410           -- Ersatzweise auch "keine Angabe" (nul) akzeptieren, aber nur wenn es keinen besseren Text zu ?irgendwas? gibt
411           -- Es wird hier nur bis zur Verbindungstabelle "alkis_beziehungen" gesucht, ob am anderen Ende die gleiche gml_id verlinkt ist.
412           -- Diese gml_id können dann zu verschiedenen, unbekannten Objekttabellen linken.
413           OR (p.advstandardmodell IS NULL
414               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
415                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
416                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
417                        ON s.gml_id = vs.beziehung_von
418                     WHERE vs.beziehung_zu = v.beziehung_zu
419                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
420                       AND NOT s.advstandardmodell IS NULL
421                     LIMIT 1  -- einer reicht als Ausschlußkriterium
422                                        ) IS NULL
423              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
424         );
425COMMENT ON VIEW ap_pto_rest IS 'Sicht fÃŒr Kartendarstellung: Beschriftungen aus "ap_pto", die noch nicht in anderen Layern angezeigt werden.';
426-- ToDo: Im PostProcessing in einer Tabelle speichern.
427
428-- Layer "s_zuordungspfeil_gebaeude"
429-- -----------------------------------
430CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude
431AS
432 SELECT l.ogc_fid,
433     -- alkis_beziehungen.beziehungsart, -- TEST
434     -- ap_lpo.art, -- TEST
435        l.wkb_geometry
436   FROM ap_lpo l
437   JOIN alkis_beziehungen v
438     ON l.gml_id = v.beziehung_von
439   JOIN ax_gebaeude g
440     ON v.beziehung_zu = g.gml_id
441  WHERE l.art = 'Pfeil'
442    AND v.beziehungsart = 'dientZurDarstellungVon'
443    AND g.endet IS NULL
444    AND l.endet IS NULL;
445COMMENT ON VIEW s_zuordungspfeil_gebaeude IS 'Sicht fÌr Kartendarstellung: Zuordnungspfeil fÌr GebÀude-Nummer (NebengebÀude). Wird wahrscheinlich nicht mehr benötigt.';
446
447
448-- Grenzpunkte
449-- -----------
450--  ax_punktortta  >zeigtAuf?> AX_Grenzpunkt
451-- Zum Punktort des Grenzpunktes auch eine Information zur Vermarkung holen
452CREATE OR REPLACE VIEW grenzpunkt
453AS
454 SELECT o.ogc_fid,
455        o.wkb_geometry,
456     -- g.punktkennung,    -- ggf spÀter als labelitem "rrrrrhhhhAnnnnn" "32483 5751 0 02002"
457        g.abmarkung_marke, -- steuert die Darstellung >9000 = unvermarkt
458        v.beziehungsart
459   FROM ax_punktortta o
460   JOIN alkis_beziehungen v
461     ON o.gml_id = v.beziehung_von
462   JOIN ax_grenzpunkt g
463     ON v.beziehung_zu  = g.gml_id
464   WHERE v.beziehungsart = 'istTeilVon'
465     AND g.endet IS NULL
466     AND g.endet IS NULL;
467COMMENT ON VIEW grenzpunkt IS 'Sicht fÃŒr Kartendarstellung: ZusammenfÃŒhrung von Punktort (Geometrie) und AX_Grenzpunkt (Eigenschaften)';
468
469
470-- Sichten vom OBK (Oberbergischer Kreis)
471-- --------------------------------------
472--      CREATE OR REPLACE VIEW sk2004_zuordnungspfeil
473--      AS
474--       SELECT ap.ogc_fid, ap.wkb_geometry
475--       FROM ap_lpo ap
476--       WHERE ((ap.signaturnummer = '2004')
477--         AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
478--      COMMENT ON VIEW sk2004_zuordnungspfeil IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer"';
479
480--      CREATE OR REPLACE VIEW sk2004_zuordnungspfeil_spitze
481--      AS
482--       SELECT ap.ogc_fid, (((st_azimuth(st_pointn(ap.wkb_geometry, 1),
483--                      st_pointn(ap.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
484--                      st_startpoint(ap.wkb_geometry) AS wkb_geometry
485--       FROM ap_lpo ap
486--       WHERE ((ap.signaturnummer = '2004')
487--         AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
488
489-- Diese Versionen "sk2004_zuordnungspfeil" und "sk2004_zuordnungspfeil_spitze" werden ersetzt durch
490-- "s_zuordungspfeil_flurstueck" und "s_zuordungspfeilspitze_flurstueck".
491-- Grund: "signaturnummer" is NULL, wenn Daten aus AED-Software kommen. Das Feld ist nur bei ibR gefuellt.
492-- Die Alternativen filtern durch JOIN >dientZurDarstellungVon> ax_flurstueck.
493
494CREATE OR REPLACE VIEW sk2012_flurgrenze
495AS
496 SELECT fg.ogc_fid, fg.wkb_geometry
497   FROM ax_besondereflurstuecksgrenze fg
498  WHERE (3000 = ANY (fg.artderflurstuecksgrenze))
499    AND fg.advstandardmodell ~~ 'DLKM'::text;
500COMMENT ON VIEW sk2012_flurgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
501
502CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze
503AS
504 SELECT gemag.ogc_fid, gemag.wkb_geometry
505   FROM ax_besondereflurstuecksgrenze gemag
506  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze))
507    AND gemag.advstandardmodell ~~ 'DLKM'::text;
508COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
509
510CREATE OR REPLACE VIEW sk2018_bundeslandgrenze
511AS
512 SELECT blg.ogc_fid, blg.wkb_geometry
513   FROM ax_besondereflurstuecksgrenze blg
514  WHERE (7102 = ANY (blg.artderflurstuecksgrenze))
515    AND blg.advstandardmodell ~~ 'DLKM'::text;
516COMMENT ON VIEW sk2018_bundeslandgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
517
518CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze
519AS
520 SELECT rbg.ogc_fid, rbg.wkb_geometry
521   FROM ax_besondereflurstuecksgrenze rbg
522  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze))
523    AND rbg.advstandardmodell ~~ 'DLKM'::text;
524COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
525
526CREATE OR REPLACE VIEW sk2022_gemeindegrenze
527AS
528 SELECT gemg.ogc_fid, gemg.wkb_geometry
529   FROM ax_besondereflurstuecksgrenze gemg
530  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze))
531    AND gemg.advstandardmodell ~~ 'DLKM'::text;
532COMMENT ON VIEW sk2022_gemeindegrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
533
534
535-- Zusammenfassung "Politische Grenzen"  Art= 7102, 7103, 7104, 7106
536
537-- Grenze der Bundesrepublik Deutschland 7101 (G)
538-- .. des Bundeslandes 7102 (G)
539-- .. des Regierungsbezirks 7103 (G)
540-- .. des Landkreises 7104 (G)
541-- .. der Gemeinde 7106
542-- .. des Gemeindeteils 7107
543-- .. der Verwaltungsgemeinschaft 7108
544
545CREATE OR REPLACE VIEW sk201x_politische_grenze
546AS
547 SELECT ogc_fid, artderflurstuecksgrenze as art, wkb_geometry
548   FROM ax_besondereflurstuecksgrenze
549--WHERE ( ANY (artderflurstuecksgrenze) IN (7102,7103,7104,7106) )
550  WHERE (7102 = ANY (artderflurstuecksgrenze)
551     OR  7102 = ANY (artderflurstuecksgrenze)
552     OR  7103 = ANY (artderflurstuecksgrenze)
553     OR  7104 = ANY (artderflurstuecksgrenze)
554     OR  7106 = ANY (artderflurstuecksgrenze)
555    )
556    AND advstandardmodell ~~ 'DLKM'::text;
557
558COMMENT ON VIEW sk201x_politische_grenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
559-- GefÀllt mir nicht! Array-Felder eignen sich nicht als Filter. Optimierung: in Tabelle speichern
560
561
562-- Gruppe: BodenschÀtzung
563-- ----------------------
564
565-- FÌr Nachschlagen bei Feature-Info: EntschlÌsselung in Langform zu einer KlassenflÀche, ohne Geometrie.
566CREATE OR REPLACE VIEW s_bodensch_ent
567AS
568 SELECT bs.ogc_fid,
569      --bs.advstandardmodell,   -- NUR TEST
570        ka.bezeichner                      AS kulturart_e,
571        ba.bezeichner                      AS bodenart_e,
572        zs.bezeichner                      AS zustandsstufe_e,
573        bs.bodenzahlodergruenlandgrundzahl AS grundz,
574        bs.ackerzahlodergruenlandzahl      AS agzahl,
575        ea1.bezeichner                     AS entstehart1,
576        ea2.bezeichner                     AS entstehart2,
577        -- entstehungsartoderklimastufewasserverhaeltnisse ist array!
578        bs.sonstigeangaben,             -- integer array  - EntschlÃŒsseln?
579        bs.jahreszahl                           -- integer
580   FROM ax_bodenschaetzung bs
581   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
582   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
583   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
584   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
585          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert   -- [1] fast immer gefÃŒllt
586   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
587          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert   -- [2] manchmal gefÃŒllt
588   WHERE bs.endet IS NULL;
589COMMENT ON VIEW s_bodensch_ent IS 'Sicht fÌr Feature-Info: BodenschÀtzung, mit Langtexten entschlÌsselt';
590
591-- Variante 1: Nur EIN Layer.
592--             Label mittig in der FlÀche, dann ist auch kein Zuordnungs-Pfeil notwendig.
593
594-- KlassenflÀche (Geometrie) mit ihrem Kurz-Label-Text, der dann mittig an Standardposition angezeigt werden kann.
595CREATE OR REPLACE VIEW s_bodensch_wms
596AS
597 SELECT bs.ogc_fid,
598        bs.wkb_geometry,
599     -- bs.advstandardmodell,   -- NUR TEST
600     -- bs.entstehungsartoderklimastufewasserverhaeltnisse AS entstehart, -- Array der Keys, NUR TEST
601        ka.kurz AS kult,  -- Kulturart, CLASSITEM, steuert die Farbe
602     -- Viele Felder zusammen packen zu einem kompakten Zwei-Zeilen-Label:
603          ba.kurz  ||            -- Bodenart
604          zs.kurz  ||            -- Zustandsstufe
605          ea1.kurz ||            -- Entstehungsart oder Klimastufe, Wasserverhaeltnisse ist ein Array mit 1 bis 2 Elementen
606          coalesce (ea2.kurz, '') -- NULL vermeiden!
607          || ' ' ||              -- Zeilenwechsel im Label (UMN: WRAP)
608          bs.bodenzahlodergruenlandgrundzahl || '/' ||
609          bs.ackerzahlodergruenlandzahl
610        AS derlabel              -- LABELITEM Umbruch am Blank
611   FROM ax_bodenschaetzung bs
612   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
613   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
614   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
615   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
616          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert   -- [1] fast immer gefÃŒllt
617   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
618          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert   -- [2] manchmal gefÃŒllt
619   WHERE bs.endet IS NULL;
620COMMENT ON VIEW s_bodensch_wms IS 'Sicht fÌr Kartendarstellung: BodenschÀtzung mit kompakten Informationen fÌr Label.';
621
622
623-- Variante 2: FlÀche und Text als getrennte Layer. Text an manueller Position,
624--             ggf. außerhalb der FlÀche. Dann ist ein Zuordnungspfeil notwendig.
625
626-- Die FlÀche ohne Label
627CREATE OR REPLACE VIEW s_bodensch_po
628AS
629 SELECT ogc_fid,
630        wkb_geometry,
631        kulturart  -- Kulturart, numerischer SchlÃŒssel, CLASSITEM
632   FROM ax_bodenschaetzung
633  WHERE endet IS NULL;
634COMMENT ON VIEW s_bodensch_po IS 'Sicht fÌr Kartendarstellung: KlassenflÀche der BodenschÀtzung ohne Label.';
635
636-- Der Label zu den Klassenabschnitten
637-- ACHTUNG: Zu einigen Abschnitten gibt es mehrerere (identische) Label an verschiedenen Positionen!
638CREATE OR REPLACE VIEW s_bodensch_tx
639AS
640 SELECT bs.ogc_fid,
641        p.wkb_geometry,           -- Geomterie (Punkt) des Labels
642     -- bs.wkb_geometry,          -- Geometrie der FlÀche, nicht des Label
643        bs.advstandardmodell,     -- NUR TEST
644     -- bs.entstehungsartoderklimastufewasserverhaeltnisse AS entstehart, -- Array der Keys, NUR TEST
645        ka.kurz AS kult,  -- Kulturart, CLASSITEM, steuert die Farbe
646     -- p.horizontaleausrichtung,  -- Feinpositionierung  ..    (zentrisch)
647         -- p.vertikaleausrichtung,    --  .. des Labels            (basis)   -> uc
648     -- Viele Felder zusammen packen zu einem kompakten Zwei-Zeilen-Label:
649          ba.kurz  ||              -- Bodenart
650          zs.kurz  ||              -- Zustandsstufe
651          ea1.kurz ||              -- Entstehungsart oder Klimastufe, Wasserverhaeltnisse
652          coalesce (ea2.kurz, '')  -- Noch mal, ist ein Array mit 1 bis 2 Elementen
653          || ' ' ||                -- Zeilenwechsel im Label (UMN: WRAP ' ')
654          bs.bodenzahlodergruenlandgrundzahl || '/' ||
655          bs.ackerzahlodergruenlandzahl
656        AS derlabel                -- LABELITEM, Umbruch am Leerzeichen
657   FROM ap_pto                            p
658   JOIN alkis_beziehungen                 v  ON p.gml_id       = v.beziehung_von
659   JOIN ax_bodenschaetzung                bs ON v.beziehung_zu = bs.gml_id
660   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
661   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
662   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
663   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
664          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert
665   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
666          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert
667  WHERE -- v.beziehungsart = 'dientZurDarstellungVon' AND
668         p.endet  IS NULL
669     AND bs.endet IS NULL;
670COMMENT ON VIEW s_bodensch_tx IS 'Sicht fÌr Kartendarstellung: Kompakter Label zur KlassenflÀche der BodenschÀtzung an manueller Position. Der Label wird zusammengesetzt aus: Bodenart, Zustandsstufe, Entstehungsart oder Klimastufe/WasserverhÀltnisse, Bodenzahl oder GrÌnlandgrundzahl und Ackerzahl oder GrÌnlandzahl.';
671
672-- Redundanz suchen:
673--  SELECT ogc_fid, count(advstandardmodell) AS anzahl FROM s_bodensch_tx GROUP BY ogc_fid HAVING count(advstandardmodell) > 1;
674--  SELECT * FROM s_bodensch_tx WHERE ogc_fid in (2848, 1771, 3131, 3495) ORDER BY ogc_fid;
675
676-- END --
Note: See TracBrowser for help on using the repository browser.