source: trunk/import/sichten_wms.sql @ 294

Revision 278, 32.6 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation mit ALKIS-Daten komplett überarbeitet.

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