source: trunk/import/pp_praesentation_sichten.sql @ 293

Revision 293, 11.2 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_sichten.sql" dient der Vorbereitung der Reparatur,
7-- die mit dem Script "pp_praesentation_action.sql" durchgefÃŒhrt wird.
8
9-- Dies Script muss beim Anlegen der Datenbank verarbeitet werden und wenn sich die Sichten verÀndert haben.
10-- Das Action-Script muss im Rahmen des Post-Processing nach jeder Konvertierung laufen.
11
12-- Stand
13--  2013-10-16  F.J. krz: Straßennamen fehlen in den PrÀsentationsobjekten, Tabelle "ap_pto"
14
15
16-- ========================================
17-- Straßen-Namen und Straßen-Klassifikation
18-- ========================================
19
20-- Bei den NAS-Daten, die vom Land Niedersachsen an die Kommunen abgegeben werden,
21-- tritt in zunehmenden Umfang folgendes Problem auf (Stand Oktober 2013):
22
23-- Die Namen und Klassifikationen der Straßen fehlen in der Tabelle "ap_pto".
24-- Somit fehlt das Label fÃŒr die Darstellung des Straßennamens in der Karte.
25-- Position und Drehwinkel sind dort aber noch vorhanden.
26
27-- Der Name, der in anderen Tabellen vorhanden ist, muss nach "ap_pto" kopiert werden,
28-- damit die WMS-Kartendarstellung wieder komplett ist.
29
30-- Tabelle: ap_pto
31-- Spalten:
32--  art:                         'strasse', 'BezKlassifizierungStrasse'
33--  schriftinhalt:               leer
34--  signaturnummer:              ??
35--  drehwinkel und wkb_geometry: gefÃŒllt
36
37-- Hintergrund:
38-- Der Straßenname ist nach der Migration der ALKIS-Daten aus ALB und ALK zunÀchst redundant gespeichert worden.
39-- Er befindet sich "im Original" in "ax_lagebezeichnungkatalogeintrag.bezeichnung".
40-- FÃŒr die Darstellung im Kartenbild ist der gleiche Name oder eine Variante davon (AbkÃŒrzung, getrennt-Schreibung)
41-- auch in jedem PrÀsentationsobjekt noch einmal abgelegt.
42-- Diese Redundanz fÃŒhrt bei einer Änderung des Namens zu einem erhöhten Aufwand.
43-- Ziel ist es daher, die identischen Kopien des Namens-Textes in "ap_pto" nicht mehr zu fÃŒhren.
44-- Dort ist nur noch dann ein Eintrag zu finden, wenn Text (oder Signaturnummer?) nicht identisch sind.
45
46-- Signaturnummern werden auch nur noch dann erfasst, wenn mehrere Werte möglich sind.
47
48-- In Niedersachsen wurde oder wird das Löschen der identischen Texte in ap_pto möglicherweise als Nachmigration gezielt
49-- durchgefÌhrt. Die Mehrzahl der Texte ist bereits gelöscht!
50-- In NRW tritt dies erst seit dem letzten Update der EQK (ibR, Stand Oktober 2013) zunÀchst bei den FÀllen auf,
51-- die seit dem Update fortgefÃŒhrt wurden. Eine großflÀchige gezielte Entfernung wurde nicht bemerkt.
52
53
54-- Es soll versucht werden, dies Label durch die Zuordnung der Schrift-Position
55-- in einem FlurstÃŒck und ÃŒber dessen Lagebezeichnung zu rekonstruieren.
56
57-- "Label"   >liegt in>   "FlurstÃŒck"    >hat Lagebezeichnung>   "Straßenname"
58--           (geometrische                 (Beziehung)
59--           Verschniedung)
60
61
62-- Simulation der Fehlersituation in einem TEST-Bestand
63-- ----------------------------------------------------
64
65-- VORSICHT! - Nur in einer Test-Kopie ausfÌhren. Löscht Daten!
66
67  -- UPDATE ap_pto SET schriftinhalt = NULL  WHERE art = 'Strasse';
68  -- UPDATE ap_pto SET schriftinhalt = NULL  WHERE art = 'BezKlassifizierungStrasse';
69
70
71-- Anzeige der leeren SÀtze
72-- ---------------------------------------
73
74-- Diese Views ermitteln, ob der Fall im vorliegenden Datenbestand vorkommt.
75-- Dies ist in zunehmend in Niedersachsen der Fall.
76
77-- In NRW-Daten wurden weniger FÀlle gefunden.
78
79-- Dann ist jeweils auch die Signaturnummer leer.
80-- Daher sollte "signaturnummer" nicht als Filter bei der "Reparatur" verwendet werden.
81
82
83-- DROP VIEW pp_praes_strassen_name_leer;
84CREATE OR REPLACE VIEW pp_praes_strassen_name_leer
85AS
86        SELECT gml_id, schriftinhalt, signaturnummer, art, drehwinkel
87          FROM ap_pto
88         WHERE schriftinhalt IS NULL
89           AND art = 'Strasse'
90        -- AND (signaturnummer = '4107' OR signaturnummer = '8113') -- char
91;
92COMMENT ON VIEW pp_praes_strassen_name_leer
93  IS 'Es fehlt der Name der Straße in der PrÀsentationstabelle ap_pto.';
94
95
96--DROP VIEW pp_praes_strassen_klass_leer;
97CREATE OR REPLACE VIEW pp_praes_strassen_klass_leer
98AS
99        SELECT gml_id, schriftinhalt, signaturnummer, art, drehwinkel
100          FROM ap_pto
101         WHERE schriftinhalt IS NULL  -- oder '' ?
102           AND art = 'BezKlassifizierungStrasse'
103        -- AND (signaturnummer = '4080' OR signaturnummer = '4140' OR signaturnummer = '8115')
104;
105COMMENT ON VIEW pp_praes_strassen_klass_leer
106  IS 'Es fehlt die Klassifikation der Straße in der PrÀsentationstabelle ap_pto.';
107
108
109-- Diese Views sollen zeigen, welche Namen in ap_pto.schriftinhalt eingesetzt werden,
110-- wenn die nachfolgenden update-Befehle ausgefÃŒhrt werden.
111
112-- Dies dient wÀhrend der Entwicklung zu manuellen Vorab-Kontrolle.
113-- Wenn hier keine Zeilen ausgegeben werden, kann die AusfÃŒhrung dieses Scriptes im Workflow ausgeschaltet werden.
114-- Dann sind (Bundesland-spezifisch) die Namen bereits gefÃŒllt und brauchen nicht
115-- auf diese Weise rekonstruiert werden.
116
117-- An einem Referenzbestand (amtliche Karte?) kann/sollte kontrolliert werden,
118--  ob die richtigen Namen zugeordnet werden.
119
120
121--DROP VIEW  pp_praes_strassen_name_update_vorschau;
122CREATE OR REPLACE VIEW pp_praes_strassen_name_update_vorschau
123AS
124  SELECT f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler || '/' ||
125         coalesce(cast(f.nenner as character varying), '') AS fskennz, -- FlurstÃŒckskennzeichen zur Eingabe in Navigation
126         f.gml_id AS gml_fs,  -- ID des FlurstÃŒcks zum Nachsehen in der Auskunft (PHP/HTML)
127      -- p.gml_id AS gml_pto,
128         k.bezeichnung,                          -- der Name aus dem Katalog, der nach ap_pto kopiert wird
129         st_asewkt(p.wkb_geometry) AS label_geom -- Lesbare Koordinaten: Wo liegt der Label?
130  FROM   ax_lagebezeichnungkatalogeintrag  k     -- Katalog enthÀlt den Straßennamen
131    JOIN ax_lagebezeichnungohnehausnummer  l     -- Diese Eintrag ist dem FlurstÃŒck als Lage o. HsNr. zugeordnet
132      ON ( k.land=l.land
133     AND k.regierungsbezirk=l.regierungsbezirk
134     AND k.kreis=l.kreis
135     AND k.gemeinde=l.gemeinde
136     AND k.lage=l.lage )
137    JOIN alkis_beziehungen b ON l.gml_id = b.beziehung_zu
138    JOIN ax_flurstueck     f ON f.gml_id = b.beziehung_von                -- FlurstÃŒck ..
139    JOIN ap_pto            p ON ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÀche die Label-Position liegt
140   WHERE p."art" = 'Strasse'  -- Filter
141     AND p.schriftinhalt      IS NULL       -- Text fehlt in ap_pto
142     AND NOT (p.wkb_geometry  IS NULL)      -- hat aber eine Position in ap_pto
143     AND b.beziehungsart = 'zeigtAuf'       -- Relation FlurstÃŒck - Lage o.HsNr
144  -- AND k.bezeichnung = 'Unter der Treff'  -- kleiner Test in Mustermonzel Testdaten
145   ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;
146
147COMMENT ON VIEW pp_praes_strassen_name_update_vorschau
148  IS 'PrÀsentationsobjekt zu Straßen. Vorschau zum Update des Namens der in ap_pto.';
149
150
151-- Werden hier zu einem PTO möglicherweise mal mehrere Werte geliefert?
152-- In diesen Problem-FÀllen liefert die Subquery im Update (ohne Limit 1) mehrere Zeilen fÌr ein Feld.
153
154--DROP VIEW pp_praes_strassen_name_mehrfach;
155CREATE OR REPLACE VIEW pp_praes_strassen_name_mehrfach
156AS
157        SELECT p.gml_id, p.advstandardmodell,
158           st_asewkt(p.wkb_geometry) AS label_geom,  -- Wo liegt der Label?
159       (SELECT f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler || '/' ||
160        coalesce(cast(f.nenner as character varying), '') AS fskennz -- FlurstÃŒckskennzeichen zur Eingabe in Navigation
161                FROM ax_flurstueck f
162                WHERE ST_Within(p.wkb_geometry, f.wkb_geometry)
163           ) AS flurstueck
164        FROM       ap_pto  p
165         WHERE     p.art = 'Strasse' 
166           AND     p.schriftinhalt IS NULL
167           AND NOT p.wkb_geometry  IS NULL
168           AND (SELECT count(k.bezeichnung) AS anzahl_label  -- die Subquery aus dem Update
169                   FROM ax_lagebezeichnungkatalogeintrag  k
170                   JOIN ax_lagebezeichnungohnehausnummer  l
171                                ON k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk AND k.kreis=l.kreis
172                                   AND k.gemeinde=l.gemeinde AND k.lage=l.lage
173                   JOIN alkis_beziehungen b ON l.gml_id = b.beziehung_zu
174                   JOIN ax_flurstueck f ON f.gml_id = b.beziehung_von
175                  WHERE b.beziehungsart = 'zeigtAuf'
176                        AND ST_Within(p.wkb_geometry, f.wkb_geometry)
177                  ) > 1
178        ORDER BY p.gml_id, p.advstandardmodell;
179
180COMMENT ON VIEW pp_praes_strassen_name_mehrfach
181  IS 'PrÀsentationsobjekt zu Straßen. Zu einem PTO werden ÃŒber das FlurstÃŒck mehrere Texte gefunden.';
182
183
184-- Work-Arround, bis die eindeutige Zuordnung von "ap_pto" zu "lagebezeichnung*" geklÀrt ist. 
185
186-- Wie "pp_praes_strassen_name_mehrfach" aber nur eine Liste der gml_id liefern um
187-- diese beim Update (vorlÀufig) auszuschließen.
188
189--DROP VIEW pp_praes_strassen_name_ausnahmen;
190CREATE OR REPLACE VIEW pp_praes_strassen_name_ausnahmen
191AS
192        SELECT p.gml_id
193        FROM   ap_pto  p
194         WHERE p.art = 'Strasse' 
195           AND p.schriftinhalt IS NULL
196           AND NOT p.wkb_geometry  IS NULL
197           AND (SELECT count(k.bezeichnung) AS anzahl_label  -- die Subquery aus dem Update
198                   FROM ax_lagebezeichnungkatalogeintrag  k
199                   JOIN ax_lagebezeichnungohnehausnummer  l
200                                ON k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk AND k.kreis=l.kreis
201                                   AND k.gemeinde=l.gemeinde AND k.lage=l.lage
202                   JOIN alkis_beziehungen b ON l.gml_id = b.beziehung_zu
203                   JOIN ax_flurstueck f ON f.gml_id = b.beziehung_von
204                  WHERE b.beziehungsart = 'zeigtAuf'
205                        AND ST_Within(p.wkb_geometry, f.wkb_geometry)
206                  ) > 1;
207
208COMMENT ON VIEW pp_praes_strassen_name_ausnahmen
209  IS 'PrÀsentationsobjekt zu Straßen. Zu einem PTO werden ÃŒber das FlurstÃŒck mehrere Texte gefunden. Liefert Liste der gml_is, die beim Update ausgenommen werden mÃŒssen.';
210
211
212--DROP VIEW pp_praes_strassen_klass_update_vorschau;
213CREATE OR REPLACE VIEW pp_praes_strassen_klass_update_vorschau
214AS
215  SELECT p.gml_id, -- ID des FlurstÃŒcks zum Nachsehen in der Auskunft (PHP/HTML)
216         f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler || '/' ||
217         coalesce(cast(f.nenner as character varying), '') AS fskennz, -- FlurstÃŒckskennzeichen zur Eingabe in Navigation
218         k.bezeichnung,                          -- der Name aus dem Katalog, der nach ap_pto kopiert wird
219         st_asewkt(p.wkb_geometry) AS label_geom -- Lesbare Koordinaten: Wo liegt der Label?
220  FROM   ax_lagebezeichnungkatalogeintrag  k     -- Katalog enthÀlt den Straßennamen
221    JOIN ax_lagebezeichnungohnehausnummer  l     -- Diese Eintrag ist dem FlurstÃŒck als Lage o. HsNr. zugeordnet
222     ON (k.land=l.land
223     AND k.regierungsbezirk=l.regierungsbezirk
224     AND k.kreis=l.kreis
225     AND k.gemeinde=l.gemeinde
226     AND k.lage=l.lage)
227    JOIN alkis_beziehungen b ON l.gml_id = b.beziehung_zu
228    JOIN ax_flurstueck     f ON f.gml_id = b.beziehung_von                -- FlurstÃŒck ..
229    JOIN ap_pto            p ON ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÀche die Label-Position liegt
230   WHERE p."art" = 'BezKlassifizierungStrasse'  -- Filter
231     AND p.schriftinhalt      IS NULL    -- Text fehlt in ap_pto
232     AND NOT (p.wkb_geometry  IS NULL)   -- hat aber eine Position in ap_pto
233     AND b.beziehungsart = 'zeigtAuf'    -- Relation FlurstÃŒck - Lage o.HsNr
234   ORDER BY f.flurnummer, f.zaehler, f.nenner;
235
236COMMENT ON VIEW pp_praes_strassen_klass_update_vorschau
237  IS 'PrÀsentationsobjekt zu Straßen. Vorschau zum Update der Klassifikation der in ap_pto.';
238
239
240-- ENDE --
Note: See TracBrowser for help on using the repository browser.