source: Version-0.8/import/sichten_wms.sql @ 324

Revision 324, 40.5 KB checked in by frank.jaeger, 10 years ago (diff)

Beginn der Umstellung von Datenbank-Schema und Views.
Noch nicht ausgetestet.
Programme noch nicht umgestellt.

Line 
1-- =====
2-- ALKIS
3-- =====
4
5--  PostNAS
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
27--  2014-08-27 Die Tabelle "alkis_beziehungen" ÃŒberflÃŒssig machen.
28--             Relationen nun direkt ÃŒber neue Spalten in den Objekttabellen.
29
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
41/*
42-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
43
44CREATE OR REPLACE VIEW s_hausnummer_gebaeude
45AS
46 SELECT p.ogc_fid,
47        p.wkb_geometry,                            -- Point
48        p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
49    --  p.art,
50    --  p.advstandardmodell       AS modell,  -- TEST
51    --  p.horizontaleausrichtung  AS hor,     -- = 'zentrisch'
52    --  p.vertikaleausrichtung    AS ver,     -- = 'Basis' (oft), "Mitte" (selten)
53    --  p.schriftinhalt,                      -- WMS: das bessere LABELITEM, kann aber leer sein
54    --  l.hausnummer,                         -- WMS: LABELITEM default/native
55        COALESCE(p.schriftinhalt, l.hausnummer) AS hausnummer
56   FROM ap_pto p
57   JOIN alkis_beziehungen v
58     ON p.gml_id = v.beziehung_von
59   JOIN ax_lagebezeichnungmithausnummer l
60         ON v.beziehung_zu  = l.gml_id
61  WHERE p.art = 'HNR'
62    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÀherungslösung um Redundanzen zu unterdrÃŒcken
63    AND v.beziehungsart = 'dientZurDarstellungVon'
64        AND p.endet IS NULL
65        AND l.endet IS NULL;
66
67*/
68
69-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
70CREATE OR REPLACE VIEW s_hausnummer_gebaeude
71AS
72 SELECT p.ogc_fid,
73        p.wkb_geometry,                       -- Point
74        p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
75    --  p.horizontaleausrichtung  AS hor,     -- = 'zentrisch'
76    --  p.vertikaleausrichtung    AS ver,     -- = 'Basis' (oft), "Mitte" (selten)
77    --  p.schriftinhalt,                      -- WMS: das bessere LABELITEM, kann aber leer sein
78    --  l.hausnummer,                         -- WMS: LABELITEM default/native
79        COALESCE(p.schriftinhalt, l.hausnummer) AS hausnummer
80   FROM ap_pto p
81   JOIN ax_lagebezeichnungmithausnummer l       ON l.gml_id = ANY (p.dientzurdarstellungvon)
82  WHERE p.art = 'HNR'
83    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÀherungslösung um Redundanzen zu unterdrÃŒcken
84    AND p.endet IS NULL
85    AND l.endet IS NULL;
86
87COMMENT ON VIEW s_hausnummer_gebaeude IS 'Sicht fÌr Kartendarstellung: Hausnummern der HauptgebÀude.';
88-- ibR: darzustellender Text steht immer in ap_pto.schriftinhalt
89-- AED: ap_pto.schriftinhalt ist meist leer, nur selten ein Eintrag
90
91-- ToDo: In PostProcessing die Hausnummer von l.hausnummer in p.schriftinhalt kopieren, wenn leer
92--   Das wÃŒrde die COALESCE-Trickserei ersparen
93
94-- Layer "ag_t_nebengeb"
95-- ---------------------
96-- ax_gebaeude  >hat>  ax_lagebezeichnungmitpseudonummer, kein Drehwinkel.
97
98/*
99-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
100
101CREATE OR REPLACE VIEW lfdnr_nebengebaeude
102AS
103 SELECT g.ogc_fid,
104        g.wkb_geometry,
105    --  l.pseudonummer,      -- TEST die HsNr des zugehoerigen Hauptgebaeudes
106        l.laufendenummer     -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
107   FROM ax_gebaeude g
108   JOIN alkis_beziehungen v
109     ON g.gml_id = v.beziehung_von
110   JOIN ax_lagebezeichnungmitpseudonummer l
111     ON v.beziehung_zu  = l.gml_id
112   WHERE v.beziehungsart = 'hat'
113     AND g.endet IS NULL
114     AND l.endet IS NULL;
115
116*/
117-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
118CREATE OR REPLACE VIEW lfdnr_nebengebaeude
119AS
120 SELECT g.ogc_fid,
121        g.wkb_geometry,
122        l.laufendenummer     -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
123   FROM ax_gebaeude g
124   JOIN ax_lagebezeichnungmitpseudonummer l
125     ON g.hat = l.gml_id
126   WHERE g.endet IS NULL AND l.endet IS NULL;
127
128COMMENT ON VIEW lfdnr_nebengebaeude
129  IS 'Sicht fÃŒr Kartendarstellung: Laufende Nummer des NebengebÀudes zu einer Lagebezeichnung mit der FlÀchengeometrie des GebÀudes';
130
131-- GebÀude-Text
132-- ------------
133CREATE OR REPLACE VIEW gebaeude_txt
134AS
135 SELECT g.ogc_fid,
136        g.wkb_geometry,
137        g.name,                    -- selten gefÃŒllt
138        f.bezeichner AS funktion   -- umn: LABELITEM
139   FROM ax_gebaeude g
140   JOIN ax_gebaeude_funktion f
141     ON g.gebaeudefunktion = f.wert
142  WHERE g.endet IS NULL
143    AND g.gebaeudefunktion < 9998; -- "Nach Quellenlage nicht zu spezifizieren" braucht man nicht anzeigen
144
145COMMENT ON VIEW gebaeude_txt
146  IS 'Sicht fÃŒr Kartendarstellung: Name zum GebÀude und EntschlÃŒsselung der GebÀude-Funktion (Ersatz fÃŒr Symbole)';
147
148-- Layer "ag_p_flurstueck"
149-- -----------------------
150
151/*
152-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
153CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck
154AS
155 SELECT p.ogc_fid,
156        p.wkb_geometry,
157        p.drehwinkel * 57.296 AS drehwinkel,
158        f.flurstueckskennzeichen
159   FROM ap_ppo p
160   JOIN alkis_beziehungen v
161     ON p.gml_id = v.beziehung_von
162   JOIN ax_flurstueck f
163     ON v.beziehung_zu = f.gml_id
164  WHERE p.art = 'Haken'
165    AND v.beziehungsart = 'dientZurDarstellungVon'
166    AND f.endet IS NULL
167    AND p.endet IS NULL;
168
169*/
170
171-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
172CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck
173AS
174 SELECT p.ogc_fid,
175        p.wkb_geometry,
176        p.drehwinkel * 57.296 AS drehwinkel
177   FROM ap_ppo p
178   JOIN ax_flurstueck f
179     ON f.gml_id = ANY (p.dientZurDarstellungVon) 
180  WHERE p.art = 'Haken'
181    AND f.endet IS NULL
182    AND p.endet IS NULL;
183
184COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck
185  IS 'Sicht fÃŒr Kartendarstellung: Zugehörigkeitshaken zum FlurstÃŒck.';
186
187-- Layer "s_zuordungspfeil_flurstueck" (Signaturnummer 2004)
188-- -----------------------------------
189
190/*
191-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
192
193CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck
194AS
195 SELECT l.ogc_fid,
196        l.wkb_geometry
197   FROM ap_lpo l
198   JOIN alkis_beziehungen v
199     ON l.gml_id = v.beziehung_von
200   JOIN ax_flurstueck f
201     ON v.beziehung_zu = f.gml_id
202  WHERE l.art = 'Pfeil'
203    AND v.beziehungsart = 'dientZurDarstellungVon'
204    AND f.endet IS NULL
205    AND l.endet IS NULL;
206
207*/
208-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
209CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck
210AS
211 SELECT l.ogc_fid,
212        l.wkb_geometry
213   FROM ap_lpo l
214   JOIN ax_flurstueck f
215     ON f.gml_id = ANY (l.dientZurDarstellungVon)
216  WHERE l.art = 'Pfeil'
217    AND f.endet IS NULL
218    AND l.endet IS NULL;
219
220COMMENT ON VIEW s_zuordungspfeil_flurstueck
221  IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil zur FlurstÃŒcksnummer, Liniengeometrie.';
222
223/*
224-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
225CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck
226AS
227 SELECT l.ogc_fid,
228        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
229        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
230        st_startpoint(l.wkb_geometry) AS wkb_geometry
231   FROM ap_lpo l
232   JOIN alkis_beziehungen v
233     ON l.gml_id = v.beziehung_von
234   JOIN ax_flurstueck f
235     ON v.beziehung_zu = f.gml_id
236  WHERE l.art = 'Pfeil'
237    AND v.beziehungsart = 'dientZurDarstellungVon'
238    AND f.endet IS NULL
239    AND l.endet IS NULL;
240
241*/
242-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
243CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck
244AS
245 SELECT l.ogc_fid,
246        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
247        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
248        st_startpoint(l.wkb_geometry) AS wkb_geometry
249   FROM ap_lpo l
250   JOIN ax_flurstueck f
251     ON f.gml_id = ANY (l.dientzurdarstellungvon)
252  WHERE l.art = 'Pfeil'
253    AND f.endet IS NULL
254    AND l.endet IS NULL;
255
256COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck
257  IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze, Punktgeometrie mit Drehwinkel.';
258
259
260-- Drehwinkel in Bogenmass, wird vom mapserver in Grad benötigt. Umrechnung durch Faktor (180 / Pi)
261
262-- Zuordnungspfeil BodenschÀtzung (Signaturnummer 2701)
263-- ----------------------------------------------------
264
265/*
266-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
267CREATE OR REPLACE VIEW s_zuordungspfeil_bodensch
268AS
269 SELECT l.ogc_fid,
270        l.wkb_geometry
271   FROM ap_lpo l
272   JOIN alkis_beziehungen v
273     ON l.gml_id = v.beziehung_von
274   JOIN ax_bodenschaetzung b
275     ON v.beziehung_zu = b.gml_id
276  WHERE l.art = 'Pfeil'
277    AND v.beziehungsart = 'dientZurDarstellungVon'
278    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
279    AND b.endet IS NULL
280    AND l.endet IS NULL;
281
282*/
283
284-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
285CREATE OR REPLACE VIEW s_zuordungspfeil_bodensch
286AS
287 SELECT l.ogc_fid,
288        l.wkb_geometry
289   FROM ap_lpo l
290   JOIN ax_bodenschaetzung b
291     ON b.gml_id = ANY (l.dientzurdarstellungvon)
292  WHERE l.art = 'Pfeil'
293    AND ('DKKM1000' = ANY (l.advstandardmodell))
294    AND b.endet IS NULL
295    AND l.endet IS NULL;
296
297COMMENT ON VIEW s_zuordungspfeil_bodensch
298  IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil BodenschÀtzung, Liniengeometrie.';
299
300
301/*
302-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
303
304CREATE OR REPLACE VIEW s_zuordungspfeilspitze_bodensch
305AS
306 SELECT l.ogc_fid,
307        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
308        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
309        st_startpoint(l.wkb_geometry) AS wkb_geometry
310   FROM ap_lpo l
311   JOIN alkis_beziehungen v
312     ON l.gml_id = v.beziehung_von
313   JOIN ax_bodenschaetzung b
314     ON v.beziehung_zu = b.gml_id
315  WHERE l.art = 'Pfeil'
316    AND v.beziehungsart = 'dientZurDarstellungVon'
317    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
318    AND b.endet IS NULL
319    AND l.endet IS NULL;
320
321*/
322
323-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
324CREATE OR REPLACE VIEW s_zuordungspfeilspitze_bodensch
325AS
326 SELECT l.ogc_fid,
327        (((st_azimuth(st_pointn(l.wkb_geometry, 1),
328        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel,
329        st_startpoint(l.wkb_geometry) AS wkb_geometry
330   FROM ap_lpo l
331   JOIN ax_bodenschaetzung b
332     ON b.gml_id = ANY (l.dientzurdarstellungvon )
333  WHERE l.art = 'Pfeil'
334    AND 'DKKM1000' = ANY (l.advstandardmodell)
335    AND b.endet IS NULL
336    AND l.endet IS NULL;
337
338COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'Sicht fÌr Kartendarstellung: Zuordnungspfeil BodenschÀtzung, Spitze, Punktgeometrie mit Drehwinkel.';
339
340
341-- Layer NAME "ap_pto_stra" (Straße) GROUP "praesentation"
342-- -------------------------------------------------------
343-- Von doppelten Textpositionen nur das passendere Modell anzeigen.
344-- Eine Relation wird fuer die Gruppierung verwendet:
345--  ap_pto >dientZurDarstellungVon> ax_lagebezeichnungohnehausnummer
346
347-- 2014-08-26: Spalte gml_id hinzugefÃŒgt.
348-- Auch Zeilen mit leerem Schriftinhalt verwenden. Das wird im PostProcessing noch ergÀnzt.
349
350-- DROP VIEW ap_pto_stra;
351
352/*
353-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
354
355CREATE OR REPLACE VIEW ap_pto_stra
356AS
357  SELECT p.ogc_fid,
358         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
359      -- p.advstandardmodell       AS modell,    -- TEST
360      -- l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
361         p.schriftinhalt,                        -- WMS: LABELITEM
362         p.art,                                  -- WMS: CLASSITEM
363         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
364         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
365         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
366         p.wkb_geometry
367    FROM ap_pto p
368    JOIN alkis_beziehungen v   -- Relation zur Lagebezeichnung o. HsNr.
369      ON p.gml_id = v.beziehung_von
370    JOIN ax_lagebezeichnungohnehausnummer l
371      ON v.beziehung_zu = l.gml_id
372   WHERE -- NOT p.schriftinhalt IS NULL   AND
373          p.endet IS NULL                            -- nichts historisches
374     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln.
375     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
376
377     AND (   'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
378          OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein
379           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
380          OR (p.advstandardmodell IS NULL
381               AND (SELECT s.ogc_fid                -- irgend ein Feld
382                      FROM ap_pto s                 -- eines anderen Textes (suchen)
383                      JOIN alkis_beziehungen vs     -- zur gleichen Lage o.HsNr
384                        ON s.gml_id = vs.beziehung_von
385                      JOIN ax_lagebezeichnungohnehausnummer ls
386                        ON vs.beziehung_zu = ls.gml_id
387                     WHERE ls.gml_id = l.gml_id
388                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
389                       AND NOT s.advstandardmodell IS NULL
390                     LIMIT 1  -- einer reicht als Beweis
391                   ) IS NULL
392              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
393         )
394;
395
396*/
397
398-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
399CREATE OR REPLACE VIEW ap_pto_stra
400AS
401  SELECT p.ogc_fid,
402         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
403      -- p.advstandardmodell       AS modell,    -- TEST
404      -- l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
405         p.schriftinhalt,                        -- WMS: LABELITEM
406         p.art,                                  -- WMS: CLASSITEM
407         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
408         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
409         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
410         p.wkb_geometry
411    FROM ap_pto p
412    JOIN ax_lagebezeichnungohnehausnummer l
413      ON l.gml_id = ANY (p.dientzurdarstellungvon)
414   WHERE  p.endet IS NULL
415     AND  p.art IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- CLASSES im LAYER
416     AND (   'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
417          OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein
418           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
419          OR (p.advstandardmodell IS NULL
420               AND (SELECT s.ogc_fid                -- irgend ein Feld
421                      FROM ap_pto s                 -- eines anderen Textes (suchen)
422                      JOIN ax_lagebezeichnungohnehausnummer ls
423                        ON ls.gml_id = ANY(s.dientzurdarstellungvon)
424                      WHERE ls.gml_id = l.gml_id
425                       AND NOT s.advstandardmodell IS NULL
426                     LIMIT 1  -- einer reicht als Beweis
427                   ) IS NULL
428              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
429         )
430;
431
432COMMENT ON VIEW ap_pto_stra
433  IS 'Sicht fÃŒr Kartendarstellung: Beschriftung aus "ap_pto" fÃŒr Lagebezeichnung mit Art "Straße", "Weg", "Platz" oder Klassifizierung.
434 Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe. Dient im Script pp_laden.sql zum ersten FÃŒllen der Tabelle "pp_strassenname_p".';
435
436-- 2013-10-26: Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in den Tabellen "pp_strassenname" und "pp_strassenklas".
437-- Der View ÃŒbernimmt die Auswahl des passenden advstandardmodell und rechnet den Winkel passend um,
438-- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergÀnzt.
439
440-- DROP VIEW ap_lto_stra;
441
442/*
443-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
444
445CREATE OR REPLACE VIEW ap_lto_stra
446AS
447  SELECT p.ogc_fid,
448         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
449         p.schriftinhalt,                        -- WMS: LABELITEM
450         p.art,                                  -- WMS: CLASSITEM
451         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
452         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
453         p.wkb_geometry
454    FROM ap_lto p
455    JOIN alkis_beziehungen v   -- Relation zur Lagebezeichnung o. HsNr.
456      ON p.gml_id = v.beziehung_von
457    JOIN ax_lagebezeichnungohnehausnummer l
458      ON v.beziehung_zu = l.gml_id
459   WHERE  p.endet IS NULL                            -- nichts historisches
460     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln.
461     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
462     AND (    'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
463           OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein?
464           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
465           OR (p.advstandardmodell IS NULL
466               AND (SELECT s.ogc_fid                 -- irgend ein Feld
467                      FROM ap_lto s                  -- eines anderen Textes (suchen)
468                      JOIN alkis_beziehungen vs      -- zur gleichen Lage o.HsNr
469                        ON s.gml_id = vs.beziehung_von
470                      JOIN ax_lagebezeichnungohnehausnummer ls
471                        ON vs.beziehung_zu = ls.gml_id
472                     WHERE ls.gml_id = l.gml_id
473                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
474                       AND NOT s.advstandardmodell IS NULL
475                     LIMIT 1  -- einer reicht als Beweis
476                   ) IS NULL
477              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
478         )
479;
480
481*/
482-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
483CREATE OR REPLACE VIEW ap_lto_stra
484AS
485  SELECT p.ogc_fid,
486         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
487         p.schriftinhalt,                        -- WMS: LABELITEM
488         p.art,                                  -- WMS: CLASSITEM
489         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
490         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
491         p.wkb_geometry
492    FROM ap_lto p
493    JOIN ax_lagebezeichnungohnehausnummer l
494      ON l.gml_id = ANY (p.dientzurdarstellungvon)
495   WHERE  p.endet IS NULL
496     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln.
497     AND (    'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
498           OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein?
499           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
500           OR (p.advstandardmodell IS NULL
501               AND (SELECT s.ogc_fid                 -- irgend ein Feld
502                      FROM ap_lto s                  -- eines anderen Textes (suchen)
503                      JOIN ax_lagebezeichnungohnehausnummer ls
504                        ON ls.gml_id = ANY(s.dientzurdarstellungvon)
505                     WHERE ls.gml_id = l.gml_id
506                       AND NOT s.advstandardmodell IS NULL
507                     LIMIT 1  -- einer reicht als Beweis
508                   ) IS NULL
509              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
510         )
511;
512
513COMMENT ON VIEW ap_lto_stra
514  IS 'Sicht fÃŒr Kartendarstellung: Beschriftung aus "ap_lto" fÃŒr Lagebezeichnung mit Art "Straße", "Weg", "Platz" oder Klassifizierung.
515 Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe. Dient im Script pp_laden.sql zum ersten FÃŒllen der Tabelle "pp_strassenname_l".';
516
517-- 2014-08-26: Daten aus dem View "ap_lto_stra" werden im PostProcessing gespeichert in den Tabellen "pp_strassenname_l".
518-- Der View ÃŒbernimmt die Auswahl des passenden advstandardmodell.
519-- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergÀnzt.
520
521
522-- Layer NAME "ap_pto_nam" GROUP "praesentation"
523-- -------------------------------------------------------
524-- 'NAM' = Name (Eigenname) und 'ZNM' = Zweitname (touristischer oder volkstÃŒmlicher Name) zu ...
525--   -- AX_Strassenverkehr oder AX_Platz usw.
526--  ap_pto >dientZurDarstellungVon> ?irgendwas?
527
528-- Dieser View wird bisher nicht verwendet. Dazu mÃŒsste ein neuer Layer erzeugt werden und die
529-- Arten 'NAM' und 'ZNM' dann aus den View 'ap_pto_rest' heraus genommen werden.
530
531-- Entweder Layer trennen nach Text-Typen "NAM"+"ZNM" und dem Rest
532-- ODER           trennen nach fachlichen Ebenen wie "Nutzung" und "GebÀude" und ....
533
534/*
535-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
536
537CREATE OR REPLACE VIEW ap_pto_nam
538AS
539  SELECT p.ogc_fid,
540          -- p.advstandardmodell       AS modell,    -- TEST
541         p.schriftinhalt,                        -- WMS: LABELITEM
542         p.art,                                  -- WMS: CLASSITEM
543         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
544         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
545         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
546         p.wkb_geometry
547    FROM ap_pto p
548    JOIN alkis_beziehungen v       
549      ON p.gml_id = v.beziehung_von
550  --JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
551  --  ON v.beziehung_zu = l.gml_id
552   WHERE NOT p.schriftinhalt IS NULL
553     AND  p.endet IS NULL                            -- nichts historisches
554     AND  p.art   IN ('NAM','ZNM') -- Diese Werte als CLASSES in LAYER behandeln.
555     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
556     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
557           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
558           OR (p.advstandardmodell IS NULL
559               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
560                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
561                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
562                        ON s.gml_id = vs.beziehung_von
563                     WHERE vs.beziehung_zu = v.beziehung_zu
564                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
565                       AND NOT s.advstandardmodell IS NULL
566                     LIMIT 1  -- einer reicht als Beweis
567                                        ) IS NULL
568              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
569         )
570;
571
572*/
573
574-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
575CREATE OR REPLACE VIEW ap_pto_nam
576AS
577  SELECT p.ogc_fid,
578         p.schriftinhalt,                        -- WMS: LABELITEM
579         p.art,                                  -- WMS: CLASSITEM
580         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
581         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
582         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
583         p.wkb_geometry
584    FROM ap_pto p
585    JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
586      ON l.gml_id = ANY (p.dientzurdarstellungvon)
587   WHERE NOT p.schriftinhalt IS NULL
588     AND  p.endet IS NULL                            -- nichts historisches
589     AND  p.art   IN ('NAM','ZNM')                   -- CLASSES in LAYER
590     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
591           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
592           OR (p.advstandardmodell IS NULL
593               AND (SELECT s.gml_id                  -- irgend ein Feld
594                      FROM ap_pto s                  -- eines anderen Textes (suchen)
595                      JOIN nutzung l2                 -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
596                        ON l2.gml_id = ANY (s.dientzurdarstellungvon)
597                     WHERE NOT s.advstandardmodell IS NULL
598                     LIMIT 1  -- einer reicht als Beweis
599                   ) IS NULL
600              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
601         )
602;
603
604COMMENT ON VIEW ap_pto_nam
605  IS 'Sicht fÃŒr Kartendarstellung: Beschriftung mit Art = Name/Zweitname. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe.';
606-- ToDo: Im PostProcessing in einer Tabelle speichern.
607
608
609-- Layer NAME "ap_pto" GROUP "praesentation"
610-- ----------------------------------------
611-- REST: Texte, die nicht schon in einem anderen Layer ausgegeben werden
612-- Ersetzt den View "s_beschriftung"
613-- Doppelte Darstellung aufgrund verschiedener "advstandardmodell" zum Objekt unterdrÃŒcken analog ap_pto_stra und ap_pto_nam
614
615/*
616-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
617
618    +++ HIER HIN KOPIEREN  +++
619
620*/
621
622-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
623-- ToDo
624CREATE OR REPLACE VIEW ap_pto_rest
625AS
626  SELECT p.ogc_fid,
627         p.schriftinhalt,
628         p.art,
629         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
630         p.wkb_geometry
631    FROM ap_pto p
632    JOIN alkis_beziehungen v   -- Relation zur ?irgendwas?
633      ON p.gml_id = v.beziehung_von
634   WHERE not p.schriftinhalt IS NULL
635     AND p.endet IS NULL
636     AND p.art   NOT IN ('PNR','HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG') -- 'PNR',
637     -- Diese 'IN'-Liste fortschreiben bei Erweiterungen des Mapfiles
638     -- 'PNR' = Pseudonummer (lfd.-Nr.-NebengebÀude), Inhalte wie "(1)" oder "P50" - kommt nicht mehr vor, oder?
639    AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
640    AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
641           -- Ersatzweise auch "keine Angabe" (nul) akzeptieren, aber nur wenn es keinen besseren Text zu ?irgendwas? gibt
642           -- Es wird hier nur bis zur Verbindungstabelle "alkis_beziehungen" gesucht, ob am anderen Ende die gleiche gml_id verlinkt ist.
643           -- Diese gml_id können dann zu verschiedenen, unbekannten Objekttabellen linken.
644           OR (p.advstandardmodell IS NULL
645               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
646                                          FROM ap_pto s                 -- eines anderen Textes (suchen)
647                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
648                        ON s.gml_id = vs.beziehung_von
649                     WHERE vs.beziehung_zu = v.beziehung_zu
650                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
651                       AND NOT s.advstandardmodell IS NULL
652                     LIMIT 1  -- einer reicht als Ausschlußkriterium
653                                        ) IS NULL
654              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
655         );
656COMMENT ON VIEW ap_pto_rest
657  IS 'Sicht fÃŒr Kartendarstellung: Beschriftungen aus "ap_pto", die noch nicht in anderen Layern angezeigt werden.';
658-- ToDo: Im PostProcessing in einer Tabelle speichern.
659
660-- Kommt PNR (Pseudonummer) noch im Bestand vor?
661--  SELECT * FROM ap_pto WHERE art = 'PNR' LIMIT 100;
662
663
664-- Layer "s_zuordungspfeil_gebaeude"
665-- -----------------------------------
666
667/*
668-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
669
670    +++ HIER HIN KOPIEREN  +++
671
672*/
673-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
674-- ToDo
675
676CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude
677AS
678 SELECT l.ogc_fid,
679     -- alkis_beziehungen.beziehungsart, -- TEST
680     -- ap_lpo.art, -- TEST
681        l.wkb_geometry
682   FROM ap_lpo l
683   JOIN alkis_beziehungen v
684     ON l.gml_id = v.beziehung_von
685   JOIN ax_gebaeude g
686     ON v.beziehung_zu = g.gml_id
687  WHERE l.art = 'Pfeil'
688    AND v.beziehungsart = 'dientZurDarstellungVon'
689    AND g.endet IS NULL
690    AND l.endet IS NULL;
691COMMENT ON VIEW s_zuordungspfeil_gebaeude
692  IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil fÃŒr GebÀude-Nummer (NebengebÀude). Wird wahrscheinlich nicht mehr benötigt.';
693
694
695-- Grenzpunkte
696-- -----------
697--  ax_punktortta  >zeigtAuf?> AX_Grenzpunkt
698-- Zum Punktort des Grenzpunktes auch eine Information zur Vermarkung holen
699
700/*
701-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
702
703    +++ HIER HIN KOPIEREN  +++
704
705*/
706-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
707-- ToDo
708
709CREATE OR REPLACE VIEW grenzpunkt
710AS
711 SELECT o.ogc_fid,
712        o.wkb_geometry,
713     -- g.punktkennung,    -- ggf spÀter als labelitem "rrrrrhhhhAnnnnn" "32483 5751 0 02002"
714        g.abmarkung_marke, -- steuert die Darstellung >9000 = unvermarkt
715        v.beziehungsart
716   FROM ax_punktortta o
717   JOIN alkis_beziehungen v
718     ON o.gml_id = v.beziehung_von
719   JOIN ax_grenzpunkt g
720     ON v.beziehung_zu  = g.gml_id
721   WHERE v.beziehungsart = 'istTeilVon'
722     AND g.endet IS NULL
723     AND g.endet IS NULL;
724COMMENT ON VIEW grenzpunkt
725  IS 'Sicht fÃŒr Kartendarstellung: ZusammenfÃŒhrung von Punktort (Geometrie) und AX_Grenzpunkt (Eigenschaften)';
726
727
728-- Sichten vom OBK (Oberbergischer Kreis)
729-- --------------------------------------
730
731CREATE OR REPLACE VIEW sk2012_flurgrenze
732AS
733 SELECT fg.ogc_fid, fg.wkb_geometry
734   FROM ax_besondereflurstuecksgrenze fg
735  WHERE 3000   = ANY (fg.artderflurstuecksgrenze)
736    AND 'DLKM' = ANY (fg.advstandardmodell);
737COMMENT ON VIEW sk2012_flurgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
738
739CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze
740AS
741 SELECT gemag.ogc_fid, gemag.wkb_geometry
742   FROM ax_besondereflurstuecksgrenze gemag
743  WHERE 7003   = ANY (gemag.artderflurstuecksgrenze)
744    AND 'DLKM' = ANY (gemag.advstandardmodell);
745COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
746
747CREATE OR REPLACE VIEW sk2018_bundeslandgrenze
748AS
749 SELECT blg.ogc_fid, blg.wkb_geometry
750   FROM ax_besondereflurstuecksgrenze blg
751  WHERE 7102   = ANY (blg.artderflurstuecksgrenze)
752    AND 'DLKM' = ANY (blg.advstandardmodell);
753COMMENT ON VIEW sk2018_bundeslandgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
754
755CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze
756AS
757 SELECT rbg.ogc_fid, rbg.wkb_geometry
758   FROM ax_besondereflurstuecksgrenze rbg
759  WHERE 7103   = ANY (rbg.artderflurstuecksgrenze)
760    AND 'DLKM' = ANY (rbg.advstandardmodell);
761COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
762
763CREATE OR REPLACE VIEW sk2022_gemeindegrenze
764AS
765 SELECT gemg.ogc_fid, gemg.wkb_geometry
766   FROM ax_besondereflurstuecksgrenze gemg
767  WHERE 7106   = ANY (gemg.artderflurstuecksgrenze)
768    AND 'DLKM' = ANY (gemg.advstandardmodell);
769COMMENT ON VIEW sk2022_gemeindegrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
770
771
772-- Zusammenfassung "Politische Grenzen"  Art= 7102, 7103, 7104, 7106
773
774-- Grenze der Bundesrepublik Deutschland 7101 (G)
775-- .. des Bundeslandes 7102 (G)
776-- .. des Regierungsbezirks 7103 (G)
777-- .. des Landkreises 7104 (G)
778-- .. der Gemeinde 7106
779-- .. des Gemeindeteils 7107
780-- .. der Verwaltungsgemeinschaft 7108
781
782CREATE OR REPLACE VIEW sk201x_politische_grenze
783AS
784 SELECT ogc_fid, artderflurstuecksgrenze as art, wkb_geometry
785   FROM ax_besondereflurstuecksgrenze
786--WHERE ( ANY (artderflurstuecksgrenze) IN (7102,7103,7104,7106) )
787  WHERE (7102 = ANY (artderflurstuecksgrenze)
788     OR  7102 = ANY (artderflurstuecksgrenze)
789     OR  7103 = ANY (artderflurstuecksgrenze)
790     OR  7104 = ANY (artderflurstuecksgrenze)
791     OR  7106 = ANY (artderflurstuecksgrenze)
792    )
793    AND 'DLKM' = ANY (advstandardmodell);
794
795COMMENT ON VIEW sk201x_politische_grenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
796-- GefÀllt mir nicht! Array-Felder eignen sich nicht als Filter. Optimierung: in Tabelle speichern
797
798
799-- Gruppe: BodenschÀtzung
800-- ----------------------
801
802-- FÌr Nachschlagen bei Feature-Info: EntschlÌsselung in Langform zu einer KlassenflÀche, ohne Geometrie.
803CREATE OR REPLACE VIEW s_bodensch_ent
804AS
805 SELECT bs.ogc_fid,
806      --bs.advstandardmodell,   -- NUR TEST
807        ka.bezeichner                      AS kulturart_e,
808        ba.bezeichner                      AS bodenart_e,
809        zs.bezeichner                      AS zustandsstufe_e,
810        bs.bodenzahlodergruenlandgrundzahl AS grundz,
811        bs.ackerzahlodergruenlandzahl      AS agzahl,
812        ea1.bezeichner                     AS entstehart1,
813        ea2.bezeichner                     AS entstehart2,
814        -- entstehungsartoderklimastufewasserverhaeltnisse ist array!
815        bs.sonstigeangaben,                           -- integer array  - EntschlÃŒsseln?
816        so1.bezeichner                     AS sonst1, -- EnstschlÃŒsselung
817     -- so2.bezeichner                     AS sonst2, -- immer leer?
818        bs.jahreszahl                                 -- integer
819   FROM ax_bodenschaetzung bs
820   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
821   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
822   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
823   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
824          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert   -- [1] fast immer gefÃŒllt
825   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
826          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert   -- [2] manchmal gefÃŒllt
827   LEFT JOIN ax_bodenschaetzung_sonstigeangaben so1 ON bs.sonstigeangaben[1] = so1.wert -- [1] selten gefÃŒllt
828 --LEFT JOIN ax_bodenschaetzung_sonstigeangaben so2 ON bs.sonstigeangaben[2] = so2.wert -- [2] fast nie
829   WHERE bs.endet IS NULL;
830COMMENT ON VIEW s_bodensch_ent IS 'Sicht fÌr Feature-Info: BodenschÀtzung, mit Langtexten entschlÌsselt';
831
832-- Variante 1: Nur EIN Layer.
833--             Label mittig in der FlÀche, dann ist auch kein Zuordnungs-Pfeil notwendig.
834
835-- KlassenflÀche (Geometrie) mit ihrem Kurz-Label-Text, der dann mittig an Standardposition angezeigt werden kann.
836CREATE OR REPLACE VIEW s_bodensch_wms
837AS
838 SELECT bs.ogc_fid,
839        bs.wkb_geometry,
840     -- bs.advstandardmodell,   -- NUR TEST
841     -- bs.entstehungsartoderklimastufewasserverhaeltnisse AS entstehart, -- Array der Keys, NUR TEST
842        ka.kurz AS kult,  -- Kulturart, CLASSITEM, steuert die Farbe
843     -- Viele Felder zusammen packen zu einem kompakten Zwei-Zeilen-Label:
844          ba.kurz  ||            -- Bodenart
845          zs.kurz  ||            -- Zustandsstufe
846          ea1.kurz ||            -- Entstehungsart oder Klimastufe, Wasserverhaeltnisse ist ein Array mit 1 bis 2 Elementen
847          coalesce (ea2.kurz, '') -- NULL vermeiden!
848          || ' ' ||              -- Zeilenwechsel im Label (UMN: WRAP)
849          bs.bodenzahlodergruenlandgrundzahl || '/' ||
850          bs.ackerzahlodergruenlandzahl
851        AS derlabel              -- LABELITEM Umbruch am Blank
852   FROM ax_bodenschaetzung bs
853   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
854   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
855   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
856   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
857          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert   -- [1] fast immer gefÃŒllt
858   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
859          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert   -- [2] manchmal gefÃŒllt
860   WHERE bs.endet IS NULL;
861COMMENT ON VIEW s_bodensch_wms IS 'Sicht fÌr Kartendarstellung: BodenschÀtzung mit kompakten Informationen fÌr Label.';
862
863
864-- Variante 2: FlÀche und Text als getrennte Layer. Text an manueller Position,
865--             ggf. außerhalb der FlÀche. Dann ist ein Zuordnungspfeil notwendig.
866
867-- Die FlÀche ohne Label
868CREATE OR REPLACE VIEW s_bodensch_po
869AS
870 SELECT ogc_fid,
871        wkb_geometry,
872        kulturart  -- Kulturart, numerischer SchlÃŒssel, CLASSITEM
873   FROM ax_bodenschaetzung
874  WHERE endet IS NULL;
875COMMENT ON VIEW s_bodensch_po IS 'Sicht fÌr Kartendarstellung: KlassenflÀche der BodenschÀtzung ohne Label.';
876
877-- Der Label zu den Klassenabschnitten
878-- ACHTUNG: Zu einigen Abschnitten gibt es mehrerere (identische) Label an verschiedenen Positionen!
879CREATE OR REPLACE VIEW s_bodensch_tx
880AS
881 SELECT bs.ogc_fid,
882        p.wkb_geometry,           -- Geomterie (Punkt) des Labels
883     -- bs.wkb_geometry,          -- Geometrie der FlÀche, nicht des Label
884        bs.advstandardmodell,     -- NUR TEST
885     -- bs.entstehungsartoderklimastufewasserverhaeltnisse AS entstehart, -- Array der Keys, NUR TEST
886        ka.kurz AS kult,  -- Kulturart, CLASSITEM, steuert die Farbe
887     -- p.horizontaleausrichtung,  -- Feinpositionierung  ..    (zentrisch)
888         -- p.vertikaleausrichtung,    --  .. des Labels            (basis)   -> uc
889     -- Viele Felder zusammen packen zu einem kompakten Zwei-Zeilen-Label:
890          ba.kurz  ||              -- Bodenart
891          zs.kurz  ||              -- Zustandsstufe
892          ea1.kurz ||              -- Entstehungsart oder Klimastufe, Wasserverhaeltnisse
893          coalesce (ea2.kurz, '')  -- Noch mal, ist ein Array mit 1 bis 2 Elementen
894          || ' ' ||                -- Zeilenwechsel im Label (UMN: WRAP ' ')
895          bs.bodenzahlodergruenlandgrundzahl || '/' ||
896          bs.ackerzahlodergruenlandzahl
897        AS derlabel                -- LABELITEM, Umbruch am Leerzeichen
898   FROM ap_pto                            p
899   JOIN alkis_beziehungen                 v  ON p.gml_id       = v.beziehung_von
900   JOIN ax_bodenschaetzung                bs ON v.beziehung_zu = bs.gml_id
901   LEFT JOIN ax_bodenschaetzung_kulturart      ka ON bs.kulturart = ka.wert
902   LEFT JOIN ax_bodenschaetzung_bodenart       ba ON bs.bodenart  = ba.wert
903   LEFT JOIN ax_bodenschaetzung_zustandsstufe  zs ON bs.zustandsstufeoderbodenstufe = zs.wert
904   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea1
905          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[1] = ea1.wert
906   LEFT JOIN ax_bodenschaetzung_entstehungsartoderklimastufe ea2
907          ON bs.entstehungsartoderklimastufewasserverhaeltnisse[2] = ea2.wert
908  WHERE -- v.beziehungsart = 'dientZurDarstellungVon' AND
909         p.endet  IS NULL
910     AND bs.endet IS NULL;
911COMMENT 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.';
912
913-- Redundanz suchen:
914--  SELECT ogc_fid, count(advstandardmodell) AS anzahl FROM s_bodensch_tx GROUP BY ogc_fid HAVING count(advstandardmodell) > 1;
915--  SELECT * FROM s_bodensch_tx WHERE ogc_fid in (2848, 1771, 3131, 3495) ORDER BY ogc_fid;
916
917-- END --
Note: See TracBrowser for help on using the repository browser.