source: trunk/import/sichten_wms.sql @ 358

Revision 344, 28.8 KB checked in by frank.jaeger, 10 years ago (diff)

HQ-Print-Version des MapProxy?-WMS, Verbesserungen der Präsentationsobjekte "Straßennamen" im WMS.

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