Index: trunk/import/pp_praesentation_action.sql
===================================================================
--- trunk/import/pp_praesentation_action.sql	(revision 293)
+++ trunk/import/pp_praesentation_action.sql	(revision 294)
@@ -4,12 +4,16 @@
 -- 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.
-
+-- Dies Script "pp_praesentation_action.sql" dient der Reparatur von fehlenden Texten in PrÃ€sentationsobjekten.
 -- Dies Script muss im Rahmen des Post-Processing nach jeder Konvertierung laufen.
--- Das Sichten-Sript muss nur beim Anlegen der Datenbank einmalig verarbeitet werden 
+-- Kommantare und ErlÃ€uterungen siehe in "pp_praesentation_sichten.sql".
 
 -- Stand 
 --  2013-10-16  F.J. krz: StraÃennamen fehlen in den PrÃ€sentationsobjekten, Tabelle "ap_pto"
+--  2013-10-17  F.J. krz: Relation "dientZurDarstellungVon" macht es einfacher
+
+-- ToDo:
+--  Konverter-Tabelle ap_pto unberÃŒhrt lassen.
+--  Besser aus ap_pto und den ErgÃ€nzungen eine PrÃ€sentationstabelle fÃŒr StraÃen fÃŒr den WMS exportieren. 
+--  Es besteht sonst die Gefahr, dass Ãnderungen im Katalog nicht in PTO ÃŒbernommen werden (nur bei: WHERE .. IS NULL)
 
 -- ========================================
@@ -17,96 +21,35 @@
 -- ========================================
 
---
--- Weitere Kommantare und ErlÃ€uterungen siehe in "pp_praesentation_sichten.sql".
---
-
--- Reparatur Sonderfall
--- ====================
-
-  -- Gibt es FÃ€lle, wo der Label in einem benachbarten FS liegt?
-  -- Hat er dann einen Zuordnungspfeil?
-  -- Dann mÃŒssten diese SonderfÃ€lle zuerst gefÃŒllt werden.
-
-
-
--- Reparatur Normalfall
--- ====================
-
-   -- Label   >liegt in>   FlurstÃŒck     >zeigtAuf>       Lage o.H.   -->   Katalog
-   --        (Geometrisch)            (Alkis_Beziehung)             (JOIN)
-
 -- N a m e n
 UPDATE ap_pto  p          -- PrÃ€sentationsobjekte PunktfÃ¶rmig
    SET schriftinhalt =    -- Hier fehlt der Label
    -- Subquery "Gib mir den StraÃennamen":
-   -- Diese Subquery darf nur eine einzige Zeile liefern damit der Inhalt in eine Spalte passt.
-    (SELECT k.bezeichnung                        -- StraÃenname ...
-       FROM ax_lagebezeichnungkatalogeintrag  k  --   .. aus Katalog
-       JOIN ax_lagebezeichnungohnehausnummer  l  -- wobei dieser Katalogeintrag
-            ON     k.land=l.land
-               AND k.regierungsbezirk=l.regierungsbezirk 
-               AND k.kreis=l.kreis
-               AND k.gemeinde=l.gemeinde
-               AND k.lage=l.lage 
-       JOIN alkis_beziehungen  b  ON l.gml_id = b.beziehung_zu  -- in Beziehung steht
-       JOIN ax_flurstueck      f  ON f.gml_id = b.beziehung_von -- zu dem FlurstÃŒck
-      WHERE b.beziehungsart = 'zeigtAuf'
-        AND ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÃ€che der Label liegt
-    --LIMIT 1  -- siehe unten !
-    )
- WHERE     p.art = 'Strasse'  -- Filter
+   ( SELECT k.bezeichnung                       -- StraÃenname ..
+       FROM ax_lagebezeichnungkatalogeintrag k  --  .. aus Katalog
+       JOIN ax_lagebezeichnungohnehausnummer l  -- verwendet als Lage o.H.
+         ON (k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk 
+             AND k.kreis=l.kreis AND k.gemeinde=l.gemeinde AND k.lage=l.lage )
+       JOIN alkis_beziehungen x ON l.gml_id = x.beziehung_zu  -- Relation zum PrÃ€sentationsobjekt
+      WHERE p.gml_id = x.beziehung_von
+        AND x.beziehungsart = 'dientZurDarstellungVon'
+      -- LIMIT 1 -- war in einem Fall notwendig, wo 2mal der gleiche Text zugeordnet war, Ursache?
+   )
+ WHERE     p.art = 'Strasse' -- Filter
    AND     p.schriftinhalt IS NULL
-   AND NOT p.wkb_geometry  IS NULL
-   -- Die ap_pto zunÃ€chst auslassen, zu dessen FlurstÃŒcken es mehrere Lagebezeichnungen gibt.
-   AND p.gml_id NOT IN (SELECT * FROM pp_praes_strassen_name_ausnahmen); -- siehe unten !
+   AND NOT p.wkb_geometry  IS NULL;
 
 
--- "LIMIT 1" wozu?
-
--- Es wird mÃ¶glicherweise mal mehr als 1 Wert je Subquery geliefert.
--- Dann ist dies SQL nicht ausfÃŒhrbar und bricht ab.
-
--- In den Testdaten "Mustermonzel" sind Name und Klassifikation nicht unterscheidbar weil
--- die Klassifikation nicht als art='BezKlassifizierungStrasse' sondern auch als art='strasse'
--- eingetragen ist. Dann werden 2 Zeilen geliefert, die AusfÃŒhrung bricht ab.
-
--- In aktuellen Daten ist diese Ursache ausgeschaltet.
--- Es gibt trotzdem SonderfÃ€lle, bei dem mehrere Werte geliefert werden.
--- Wenn das ÃŒber die Verschneidung gefundene FlurstÃŒcke mehrer "Lagebezeichnung ohne Hausnummer" hat,
--- dann kann zur Zeit nicht jedes dieser Label der passenden Position aus ap_pto zugewiesen weden.
--- Die obige LÃ¶sung funktioniert nur bei 1:1-Konstallationen.
-
--- Welcher Label gehÃ¶rt dann zu welcher Position?
--- Es gibt keine Verbindung (alkis_beziehung) zwischen "ap_pto" und "lagebezeichnung*".
-
--- Die LÃ¶sung ÃŒber "LIMIT 1" macht die Query ausfÃŒhrbar, fÃŒhrt aber dazu, dass nur einer der 
--- mehrfachen Label an allen Positionen angezeigt wird, was falsch ist.
-
--- Die alternative LÃ¶sung ÃŒber 
---    "p.gml_id NOT IN (SELECT * FROM pp_praes_strassen_name_ausnahmen)"
--- lÃ€sst die Label dagegen zunÃ€chst leer.
--- Diese FÃ€lle bleiben dann durch obigen Views weiterhin erkennbar. 
-
-
--- K l a s s i f i k a t i o n e n
--- (analog zu strassen)
+-- K l a s s i f i k a t i o n e n   (analog zu Strassen)
 UPDATE ap_pto  p          -- PrÃ€sentationsobjekte PunktfÃ¶rmig
    SET schriftinhalt =    -- Hier fehlt der Label
-   -- Subquery "Gib mir die StraÃen-Klassifikation":
-   -- Diese Subquery darf nur eine einzige Zeile liefern damit der Inhalt in eine Spalte passt.
-    (SELECT k.bezeichnung                        -- StraÃenname ...
-       FROM ax_lagebezeichnungkatalogeintrag  k  --   .. aus Katalog
-       JOIN ax_lagebezeichnungohnehausnummer  l  -- wobei dieser Katalogeintrag
-            ON     k.land=l.land
-               AND k.regierungsbezirk=l.regierungsbezirk 
-               AND k.kreis=l.kreis
-               AND k.gemeinde=l.gemeinde
-               AND k.lage=l.lage 
-       JOIN alkis_beziehungen  b  ON l.gml_id = b.beziehung_zu  -- in Beziehung steht
-       JOIN ax_flurstueck      f  ON f.gml_id = b.beziehung_von -- zu dem FlurstÃŒck
-      WHERE b.beziehungsart = 'zeigtAuf'
-        AND ST_Within(p.wkb_geometry, f.wkb_geometry) -- in dessen FlÃ€che der Label liegt
-    -- LIMIT 1
-    )
+   ( SELECT k.bezeichnung                       -- Klassifikation "B nnn", "L nnn", "K nnn"
+       FROM ax_lagebezeichnungkatalogeintrag k  -- .. aus Katalog
+       JOIN ax_lagebezeichnungohnehausnummer l  -- verwendet als Lage o.H.
+         ON (k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk 
+             AND k.kreis=l.kreis AND k.gemeinde=l.gemeinde AND k.lage=l.lage )
+       JOIN alkis_beziehungen x ON l.gml_id = x.beziehung_zu  -- Relation zum PrÃ€sentationsobjekt
+      WHERE p.gml_id = x.beziehung_von
+        AND x.beziehungsart = 'dientZurDarstellungVon'
+   )
  WHERE     p.art = 'BezKlassifizierungStrasse' -- Filter
    AND     p.schriftinhalt IS NULL
