source: trunk/import/pp_praesentation_action.sql @ 293

Revision 293, 5.0 KB checked in by thomas.baschetti, 7 years ago (diff)

Post Processing (pp_) Teil 3: Präsentationsobjekte ergänzen / reparieren

-- Dies Script "pp_praesentation_action.sql" dient der Reparatur von fehlenden Präsentationsobjekten.
-- Voraussetzung ist, dass vorher das Script "pp_praesentation_sichten.sql" verarbeitet wurde.

  • Property svn:keywords set to Id
Line 
1
2-- ALKIS PostNAS 0.7
3
4-- Post Processing (pp_) Teil 3: PrÀsentationsobjekte ergÀnzen / reparieren
5
6-- Dies Script "pp_praesentation_action.sql" dient der Reparatur von fehlenden PrÀsentationsobjekten.
7-- Voraussetzung ist, dass vorher das Script "pp_praesentation_sichten.sql" verarbeitet wurde.
8
9-- Dies Script muss im Rahmen des Post-Processing nach jeder Konvertierung laufen.
10-- Das Sichten-Sript muss nur beim Anlegen der Datenbank einmalig verarbeitet werden
11
12-- Stand
13--  2013-10-16  F.J. krz: Straßennamen fehlen in den PrÀsentationsobjekten, Tabelle "ap_pto"
14
15-- ========================================
16-- Straßen-Namen und Straßen-Klassifikation
17-- ========================================
18
19--
20-- Weitere Kommantare und ErlÀuterungen siehe in "pp_praesentation_sichten.sql".
21--
22
23-- Reparatur Sonderfall
24-- ====================
25
26  -- Gibt es FÀlle, wo der Label in einem benachbarten FS liegt?
27  -- Hat er dann einen Zuordnungspfeil?
28  -- Dann mÃŒssten diese SonderfÀlle zuerst gefÃŒllt werden.
29
30
31
32-- Reparatur Normalfall
33-- ====================
34
35   -- Label   >liegt in>   FlurstÃŒck     >zeigtAuf>       Lage o.H.   -->   Katalog
36   --        (Geometrisch)            (Alkis_Beziehung)             (JOIN)
37
38-- N a m e n
39UPDATE ap_pto  p          -- PrÀsentationsobjekte Punktförmig
40   SET schriftinhalt =    -- Hier fehlt der Label
41   -- Subquery "Gib mir den Straßennamen":
42   -- Diese Subquery darf nur eine einzige Zeile liefern damit der Inhalt in eine Spalte passt.
43    (SELECT k.bezeichnung                        -- Straßenname ...
44       FROM ax_lagebezeichnungkatalogeintrag  k  --   .. aus Katalog
45       JOIN ax_lagebezeichnungohnehausnummer  l  -- wobei dieser Katalogeintrag
46            ON     k.land=l.land
47               AND k.regierungsbezirk=l.regierungsbezirk
48               AND k.kreis=l.kreis
49               AND k.gemeinde=l.gemeinde
50               AND k.lage=l.lage
51       JOIN alkis_beziehungen  b  ON l.gml_id = b.beziehung_zu  -- in Beziehung steht
52       JOIN ax_flurstueck      f  ON f.gml_id = b.beziehung_von -- zu dem FlurstÃŒck
53      WHERE b.beziehungsart = 'zeigtAuf'
54        AND ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÀche der Label liegt
55    --LIMIT 1  -- siehe unten !
56    )
57 WHERE     p.art = 'Strasse'  -- Filter
58   AND     p.schriftinhalt IS NULL
59   AND NOT p.wkb_geometry  IS NULL
60   -- Die ap_pto zunÀchst auslassen, zu dessen FlurstÃŒcken es mehrere Lagebezeichnungen gibt.
61   AND p.gml_id NOT IN (SELECT * FROM pp_praes_strassen_name_ausnahmen); -- siehe unten !
62
63
64-- "LIMIT 1" wozu?
65
66-- Es wird möglicherweise mal mehr als 1 Wert je Subquery geliefert.
67-- Dann ist dies SQL nicht ausfÃŒhrbar und bricht ab.
68
69-- In den Testdaten "Mustermonzel" sind Name und Klassifikation nicht unterscheidbar weil
70-- die Klassifikation nicht als art='BezKlassifizierungStrasse' sondern auch als art='strasse'
71-- eingetragen ist. Dann werden 2 Zeilen geliefert, die AusfÃŒhrung bricht ab.
72
73-- In aktuellen Daten ist diese Ursache ausgeschaltet.
74-- Es gibt trotzdem SonderfÀlle, bei dem mehrere Werte geliefert werden.
75-- Wenn das ÃŒber die Verschneidung gefundene FlurstÃŒcke mehrer "Lagebezeichnung ohne Hausnummer" hat,
76-- dann kann zur Zeit nicht jedes dieser Label der passenden Position aus ap_pto zugewiesen weden.
77-- Die obige Lösung funktioniert nur bei 1:1-Konstallationen.
78
79-- Welcher Label gehört dann zu welcher Position?
80-- Es gibt keine Verbindung (alkis_beziehung) zwischen "ap_pto" und "lagebezeichnung*".
81
82-- Die Lösung Ìber "LIMIT 1" macht die Query ausfÌhrbar, fÌhrt aber dazu, dass nur einer der
83-- mehrfachen Label an allen Positionen angezeigt wird, was falsch ist.
84
85-- Die alternative Lösung Ìber
86--    "p.gml_id NOT IN (SELECT * FROM pp_praes_strassen_name_ausnahmen)"
87-- lÀsst die Label dagegen zunÀchst leer.
88-- Diese FÀlle bleiben dann durch obigen Views weiterhin erkennbar.
89
90
91-- K l a s s i f i k a t i o n e n
92-- (analog zu strassen)
93UPDATE ap_pto  p          -- PrÀsentationsobjekte Punktförmig
94   SET schriftinhalt =    -- Hier fehlt der Label
95   -- Subquery "Gib mir die Straßen-Klassifikation":
96   -- Diese Subquery darf nur eine einzige Zeile liefern damit der Inhalt in eine Spalte passt.
97    (SELECT k.bezeichnung                        -- Straßenname ...
98       FROM ax_lagebezeichnungkatalogeintrag  k  --   .. aus Katalog
99       JOIN ax_lagebezeichnungohnehausnummer  l  -- wobei dieser Katalogeintrag
100            ON     k.land=l.land
101               AND k.regierungsbezirk=l.regierungsbezirk
102               AND k.kreis=l.kreis
103               AND k.gemeinde=l.gemeinde
104               AND k.lage=l.lage
105       JOIN alkis_beziehungen  b  ON l.gml_id = b.beziehung_zu  -- in Beziehung steht
106       JOIN ax_flurstueck      f  ON f.gml_id = b.beziehung_von -- zu dem FlurstÃŒck
107      WHERE b.beziehungsart = 'zeigtAuf'
108        AND ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÀche der Label liegt
109    -- LIMIT 1
110    )
111 WHERE     p.art = 'BezKlassifizierungStrasse' -- Filter
112   AND     p.schriftinhalt IS NULL
113   AND NOT p.wkb_geometry  IS NULL;
114
115-- ENDE --
Note: See TracBrowser for help on using the repository browser.