source: trunk/import/sichten_wms.sql @ 330

Revision 330, 28.7 KB checked in by frank.jaeger, 10 years ago (diff)

Umstellung von PostNAS 0.7 auf PostNAS 0.8, ohne Tabelle "alkis_beziehungen".

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