source: trunk/import/sichten_wms.sql @ 339

Revision 339, 28.5 KB checked in by frank.jaeger, 10 years ago (diff)

Rückbau von "substring(gml_id)" in Views und Programmen.
Namensänderung von Schlüsseltabellen von ax_* auf v_*.

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