source: trunk/import/sichten_wms.sql @ 296

Revision 296, 33.0 KB checked in by frank.jaeger, 10 years ago (diff)

PostProcesssing? Straßen-Namen, Tab pp_strassenname ersetzt ap_pto_stra

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