Index: Version-0.8/import/sichten_wms.sql
===================================================================
--- Version-0.8/import/sichten_wms.sql	(revision 322)
+++ Version-0.8/import/sichten_wms.sql	(revision 324)
@@ -3,5 +3,5 @@
 -- =====
 
---  PostNAS 0.7
+--  PostNAS
 
 --  -----------------------------------------
@@ -22,56 +22,9 @@
 --  2013-04-22 art="PNR" (Pseudonummer)
 --  2013-10-24 View ap_pto_stra wird ersetzt durch die Tabellen "pp_strassenname" und "pp_strassenklas", die im postProcessing gefÃŒllt werden.
-
-
--- WMS-Layer "ag_t_flurstueck"
--- ---------------------------
--- Die Geometrie befindet sich in "ap_pto", der Label in "ax_flurstueck"
--- Die Verbindung erfolgt ÃŒber "alkis_beziehungen"
-
--- Bruchnummerierung erzeugen
--- ALT 2012-04-17: Diese Version zeigt nur die manuell gesetzten Positionen
--- 2013-04-18 auskommentiert
---	CREATE OR REPLACE VIEW s_flurstueck_nr
---	AS 
---	 SELECT f.ogc_fid, 
---			p.wkb_geometry,  -- Position des Textes
---			f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
---	   FROM ap_pto             p
---	   JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
---	   JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
---	  WHERE v.beziehungsart = 'dientZurDarstellungVon' 
---		AND p.endet IS NULL  AND f.endet IS NULL;
---	COMMENT ON VIEW s_flurstueck_nr IS 'Sicht fÃŒr Kartendarstellung ÃŒber PostProcessing: Bruchnummerierung FlurstÃŒck (nur manuell gesetzte Positionen)';
-
--- Wenn keine manuelle Position gesetzt ist, wird die Flaechenmitte verwendet
-
--- ACHTUNG: Dieser View kann nicht direkt im Mapserver-WMS verwendet werden.
--- Die Anzeige ist zu langsam. Filterung ÃŒber BBOX kann nicht funktionieren, da zunÃ€chst ALLE Standardpositionen 
--- berechnet werden mÃŒssen, bevor darÃŒber gefiltert werden kann.
-
--- In einer Hilfstabelle mit geometrischem Index zwischenspeichern.
--- Siehe PostProcessing: Tabelle "pp_flurstueck_nr"
-
--- 2013-04-18 auskommentiert
---	CREATE OR REPLACE VIEW s_flurstueck_nr2
---	AS 
---	  SELECT f.ogc_fid, 
---			 p.wkb_geometry,  -- manuelle Position des Textes
---			 f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
---		FROM ap_pto             p
---		JOIN alkis_beziehungen  v  ON p.gml_id       = v.beziehung_von
---		JOIN ax_flurstueck      f  ON v.beziehung_zu = f.gml_id
---	   WHERE v.beziehungsart = 'dientZurDarstellungVon' 
---		 AND p.endet IS NULL
---		 AND f.endet IS NULL
---	 UNION 
---	  SELECT f.ogc_fid,
---			 ST_PointOnSurface(f.wkb_geometry) AS wkb_geometry,  -- FlÃ€chenmitte als Position des Textes
---			 f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum
---		FROM      ax_flurstueck     f 
---		LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
---	   WHERE v.beziehungsart is NULL AND f.endet IS NULL;
---	COMMENT ON VIEW s_flurstueck_nr2 
---	 IS 'Sicht fÃŒr Kartendarstellung ÃŒber PostProcessing: Bruchnummerierung FlurstÃŒck, auch Standard-Position. Nicht direkt fuer WMS verwenden!';
+--  2014-02-24 Kein Filter auf advstandardmodell bei FlurstÃŒcks-Zuordnungspfeil
+--  2014-08-26 View "ap_lto_stra" analog "ap_pto_stra" fÃŒr StraÃennamen auf Linien-Geometrie
+
+--  2014-08-27 Die Tabelle "alkis_beziehungen" ÃŒberflÃŒssig machen.
+--             Relationen nun direkt ÃŒber neue Spalten in den Objekttabellen. 
 
 
@@ -80,27 +33,17 @@
 -- Problem: Zu einigen GebÃ€uden gibt es mehrere Hausnummern.
 -- Diese unterscheiden sich im Feld ap_pto.advstandardmodell
--- z.B. 3 verschiedene EintrÃ€ge mit <NULL>, {DKKM500}, {DKKM1000}, (Beispiel; Lage, Lange StraÃe 15 c)
-
- -- DROP VIEW s_hausnummer_gebaeude;
- --	CREATE OR REPLACE VIEW s_hausnummer_gebaeude 
- --	AS 
- --	 SELECT p.ogc_fid, p.wkb_geometry,
- --			p.drehwinkel * 57.296 AS drehwinkel, -- umn: ANGLE [drehwinkel]
- --			l.hausnummer				         -- umn: LABELITEM
- --	   FROM ap_pto p
- --	   JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von
- --	   JOIN ax_lagebezeichnungmithausnummer l ON v.beziehung_zu  = l.gml_id
- --	  WHERE v.beziehungsart = 'dientZurDarstellungVon'
- --		AND p.endet IS NULL AND l.endet IS NULL;
- --	COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÃ€ude';
-
--- Verbesserte Version 2013-03-07
--- Nimmt nun vorzugsweise den Text der Darstellung aus ap_pto (bei ibR immer gefÃŒllt).
--- Wenn der nicht gefÃŒllt ist, wird statt dessen die Nummer aus der verknÃŒpften Labebezeichnung 
--- verwendet (der hÃ€ufigste Fall bei AED). 
+-- z.B. 3 verschiedene EintrÃ€ge mit <NULL>, {DKKM500}, {DKKM1000}
+
+-- Nimmt vorzugsweise den Text der Darstellung aus ap_pto (nach der Migration zunÃ€chst ibR immer gefÃŒllt).
+-- Wenn der nicht gefÃŒllt ist, wird statt dessen die Nummer aus der verknÃŒpften Labebezeichnung verwendet.
+
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
 CREATE OR REPLACE VIEW s_hausnummer_gebaeude 
 AS 
  SELECT p.ogc_fid, 
-        p.wkb_geometry,			              -- Point
+        p.wkb_geometry,			           -- Point
         p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
     --  p.art,
@@ -121,4 +64,25 @@
 	AND p.endet IS NULL
 	AND l.endet IS NULL;
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_hausnummer_gebaeude 
+AS 
+ SELECT p.ogc_fid, 
+        p.wkb_geometry,                       -- Point
+        p.drehwinkel * 57.296 AS drehwinkel,  -- umn: ANGLE
+    --  p.horizontaleausrichtung  AS hor,     -- = 'zentrisch'
+    --  p.vertikaleausrichtung    AS ver,     -- = 'Basis' (oft), "Mitte" (selten)
+    --  p.schriftinhalt,                      -- WMS: das bessere LABELITEM, kann aber leer sein
+    --  l.hausnummer,                         -- WMS: LABELITEM default/native
+        COALESCE(p.schriftinhalt, l.hausnummer) AS hausnummer
+   FROM ap_pto p
+   JOIN ax_lagebezeichnungmithausnummer l       ON l.gml_id = ANY (p.dientzurdarstellungvon) 
+  WHERE p.art = 'HNR'
+    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÃ€herungslÃ¶sung um Redundanzen zu unterdrÃŒcken
+    AND p.endet IS NULL
+    AND l.endet IS NULL;
+
 COMMENT ON VIEW s_hausnummer_gebaeude IS 'Sicht fÃŒr Kartendarstellung: Hausnummern der HauptgebÃ€ude.';
 -- ibR: darzustellender Text steht immer in ap_pto.schriftinhalt
@@ -128,31 +92,17 @@
 --   Das wÃŒrde die COALESCE-Trickserei ersparen
 
-
 -- Layer "ag_t_nebengeb"
 -- ---------------------
--- 2013-03-05: Diese Abfrage liefert keine Daten mehr.
---	CREATE OR REPLACE VIEW s_nummer_nebengebaeude 
---	AS 
---	 SELECT p.ogc_fid, p.wkb_geometry, 
---			p.drehwinkel * 57.296 AS drehwinkel,	-- umn: ANGLE [drehwinkel]
---		 -- l.pseudonummer,			-- die HsNr des zugehoerigen Hauptgebaeudes
---			l.laufendenummer		-- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
---	   FROM ap_pto p
---	   JOIN alkis_beziehungen v 
---		 ON p.gml_id = v.beziehung_von
---	   JOIN ax_lagebezeichnungmitpseudonummer l
---		 ON v.beziehung_zu  = l.gml_id
---	  WHERE v.beziehungsart = 'dientZurDarstellungVon'
---		AND p.endet IS NULL AND l.endet IS NULL;
---	COMMENT ON VIEW s_nummer_nebengebaeude IS 'Sicht fÃŒr Kartendarstellung: Hausnummern NebengebÃ€ude (manuelle Position)';
-
--- Suche nach einem Ersatz:
 -- ax_gebaeude  >hat>  ax_lagebezeichnungmitpseudonummer, kein Drehwinkel.
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
 CREATE OR REPLACE VIEW lfdnr_nebengebaeude 
 AS 
  SELECT g.ogc_fid, 
         g.wkb_geometry, 
-    --  l.pseudonummer,			-- TEST die HsNr des zugehoerigen Hauptgebaeudes
-        l.laufendenummer		-- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
+    --  l.pseudonummer,      -- TEST die HsNr des zugehoerigen Hauptgebaeudes
+        l.laufendenummer     -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
    FROM ax_gebaeude g
    JOIN alkis_beziehungen v 
@@ -162,8 +112,20 @@
    WHERE v.beziehungsart = 'hat'
      AND g.endet IS NULL
-     AND g.endet IS NULL;
+     AND l.endet IS NULL;
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW lfdnr_nebengebaeude 
+AS 
+ SELECT g.ogc_fid, 
+        g.wkb_geometry, 
+        l.laufendenummer     -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
+   FROM ax_gebaeude g
+   JOIN ax_lagebezeichnungmitpseudonummer l
+     ON g.hat = l.gml_id
+   WHERE g.endet IS NULL AND l.endet IS NULL;
+
 COMMENT ON VIEW lfdnr_nebengebaeude 
   IS 'Sicht fÃŒr Kartendarstellung: Laufende Nummer des NebengebÃ€udes zu einer Lagebezeichnung mit der FlÃ€chengeometrie des GebÃ€udes';
-
 
 -- GebÃ€ude-Text
@@ -180,10 +142,13 @@
   WHERE g.endet IS NULL 
     AND g.gebaeudefunktion < 9998; -- "Nach Quellenlage nicht zu spezifizieren" braucht man nicht anzeigen
+
 COMMENT ON VIEW gebaeude_txt 
   IS 'Sicht fÃŒr Kartendarstellung: Name zum GebÃ€ude und EntschlÃŒsselung der GebÃ€ude-Funktion (Ersatz fÃŒr Symbole)';
 
-
 -- Layer "ag_p_flurstueck"
 -- -----------------------
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
 CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck 
 AS 
@@ -201,10 +166,29 @@
     AND f.endet IS NULL
     AND p.endet IS NULL;
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck 
+AS 
+ SELECT p.ogc_fid, 
+        p.wkb_geometry, 
+        p.drehwinkel * 57.296 AS drehwinkel
+   FROM ap_ppo p
+   JOIN ax_flurstueck f
+     ON f.gml_id = ANY (p.dientZurDarstellungVon)  
+  WHERE p.art = 'Haken'
+    AND f.endet IS NULL
+    AND p.endet IS NULL;
+
 COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck 
   IS 'Sicht fÃŒr Kartendarstellung: ZugehÃ¶rigkeitshaken zum FlurstÃŒck.';
 
-
 -- Layer "s_zuordungspfeil_flurstueck" (Signaturnummer 2004)
 -- -----------------------------------
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
 CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck 
 AS 
@@ -218,12 +202,25 @@
   WHERE l.art = 'Pfeil'
     AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
     AND f.endet IS NULL
     AND l.endet IS NULL;
--- Die OBK-Alternative "sk2004_zuordnungspfeil" wird NICHT verwendet. Siehe dort.
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck 
+AS 
+ SELECT l.ogc_fid, 
+        l.wkb_geometry
+   FROM ap_lpo l
+   JOIN ax_flurstueck f
+     ON f.gml_id = ANY (l.dientZurDarstellungVon) 
+  WHERE l.art = 'Pfeil'
+    AND f.endet IS NULL
+    AND l.endet IS NULL;
+
 COMMENT ON VIEW s_zuordungspfeil_flurstueck 
   IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil zur FlurstÃŒcksnummer, Liniengeometrie.';
 
-
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
 CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck 
 AS 
@@ -239,8 +236,22 @@
   WHERE l.art = 'Pfeil'
     AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
     AND f.endet IS NULL
     AND l.endet IS NULL;
--- Die OBK-Alternativen "sk2004_zuordnungspfeil_spitze" wird NICHT verwendet. Siehe dort.
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_zuordungspfeilspitze_flurstueck 
+AS 
+ SELECT l.ogc_fid, 
+        (((st_azimuth(st_pointn(l.wkb_geometry, 1), 
+        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel, 
+        st_startpoint(l.wkb_geometry) AS wkb_geometry 
+   FROM ap_lpo l
+   JOIN ax_flurstueck f
+     ON f.gml_id = ANY (l.dientzurdarstellungvon) 
+  WHERE l.art = 'Pfeil'
+    AND f.endet IS NULL
+    AND l.endet IS NULL;
+
 COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck 
   IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze, Punktgeometrie mit Drehwinkel.';
@@ -251,4 +262,7 @@
 -- Zuordnungspfeil BodenschÃ€tzung (Signaturnummer 2701)
 -- ----------------------------------------------------
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
 CREATE OR REPLACE VIEW s_zuordungspfeil_bodensch
 AS 
@@ -265,6 +279,26 @@
     AND b.endet IS NULL
     AND l.endet IS NULL;
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_zuordungspfeil_bodensch
+AS 
+ SELECT l.ogc_fid, 
+        l.wkb_geometry
+   FROM ap_lpo l
+   JOIN ax_bodenschaetzung b
+     ON b.gml_id = ANY (l.dientzurdarstellungvon)
+  WHERE l.art = 'Pfeil'
+    AND ('DKKM1000' = ANY (l.advstandardmodell))
+    AND b.endet IS NULL
+    AND l.endet IS NULL;
+
 COMMENT ON VIEW s_zuordungspfeil_bodensch 
   IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil BodenschÃ€tzung, Liniengeometrie.';
+
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
 
 CREATE OR REPLACE VIEW s_zuordungspfeilspitze_bodensch 
@@ -284,5 +318,22 @@
     AND b.endet IS NULL
     AND l.endet IS NULL;
--- Die OBK-Alternativen "sk2004_zuordnungspfeil_spitze" wird NICHT verwendet. Siehe dort.
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW s_zuordungspfeilspitze_bodensch 
+AS 
+ SELECT l.ogc_fid, 
+        (((st_azimuth(st_pointn(l.wkb_geometry, 1), 
+        st_pointn(l.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel, 
+        st_startpoint(l.wkb_geometry) AS wkb_geometry 
+   FROM ap_lpo l
+   JOIN ax_bodenschaetzung b
+     ON b.gml_id = ANY (l.dientzurdarstellungvon )
+  WHERE l.art = 'Pfeil'
+    AND 'DKKM1000' = ANY (l.advstandardmodell)
+    AND b.endet IS NULL
+    AND l.endet IS NULL;
+
 COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'Sicht fÃŒr Kartendarstellung: Zuordnungspfeil BodenschÃ€tzung, Spitze, Punktgeometrie mit Drehwinkel.';
 
@@ -293,9 +344,19 @@
 -- Eine Relation wird fuer die Gruppierung verwendet:
 --  ap_pto >dientZurDarstellungVon> ax_lagebezeichnungohnehausnummer
+
+-- 2014-08-26: Spalte gml_id hinzugefÃŒgt.
+-- Auch Zeilen mit leerem Schriftinhalt verwenden. Das wird im PostProcessing noch ergÃ€nzt. 
+
+-- DROP VIEW ap_pto_stra;
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
 CREATE OR REPLACE VIEW ap_pto_stra 
 AS 
   SELECT p.ogc_fid,
-	  -- p.advstandardmodell       AS modell,    -- TEST
-      -- l.gml_id, l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
+         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
+      -- p.advstandardmodell       AS modell,    -- TEST
+      -- l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
          p.schriftinhalt,                        -- WMS: LABELITEM
          p.art,                                  -- WMS: CLASSITEM
@@ -309,13 +370,15 @@
     JOIN ax_lagebezeichnungohnehausnummer l
       ON v.beziehung_zu = l.gml_id
-   WHERE NOT p.schriftinhalt IS NULL 
-     AND  p.endet IS NULL                            -- nichts historisches
+   WHERE -- NOT p.schriftinhalt IS NULL   AND
+          p.endet IS NULL                            -- nichts historisches
      AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln. 
      AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
-     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
+
+     AND (   'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
+          OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein 
            -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
-           OR (p.advstandardmodell IS NULL
+          OR (p.advstandardmodell IS NULL
                AND (SELECT s.ogc_fid                -- irgend ein Feld
-					  FROM ap_pto s                 -- eines anderen Textes (suchen)
+                      FROM ap_pto s                 -- eines anderen Textes (suchen)
                       JOIN alkis_beziehungen vs     -- zur gleichen Lage o.HsNr
                         ON s.gml_id = vs.beziehung_von
@@ -326,14 +389,134 @@
                        AND NOT s.advstandardmodell IS NULL 
                      LIMIT 1  -- einer reicht als Beweis
-					) IS NULL 
+                   ) IS NULL 
               ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
          )
 ;
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW ap_pto_stra 
+AS 
+  SELECT p.ogc_fid,
+         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
+      -- p.advstandardmodell       AS modell,    -- TEST
+      -- l.unverschluesselt, l.lage AS schluessel, -- zur Lage  TEST
+         p.schriftinhalt,                        -- WMS: LABELITEM
+         p.art,                                  -- WMS: CLASSITEM
+         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
+         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
+         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
+         p.wkb_geometry
+    FROM ap_pto p
+    JOIN ax_lagebezeichnungohnehausnummer l
+      ON l.gml_id = ANY (p.dientzurdarstellungvon)
+   WHERE  p.endet IS NULL
+     AND  p.art IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- CLASSES im LAYER
+     AND (   'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
+          OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein 
+           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
+          OR (p.advstandardmodell IS NULL
+               AND (SELECT s.ogc_fid                -- irgend ein Feld
+                      FROM ap_pto s                 -- eines anderen Textes (suchen)
+                      JOIN ax_lagebezeichnungohnehausnummer ls
+                        ON ls.gml_id = ANY(s.dientzurdarstellungvon)
+                      WHERE ls.gml_id = l.gml_id
+                       AND NOT s.advstandardmodell IS NULL 
+                     LIMIT 1  -- einer reicht als Beweis
+                   ) IS NULL 
+              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
+         )
+;
+
 COMMENT ON VIEW ap_pto_stra 
-  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';
-
--- 2013-10-24: Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in den Tabellen "pp_strassenname" und "pp_strassenklas".
+  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. Dient im Script pp_laden.sql zum ersten FÃŒllen der Tabelle "pp_strassenname_p".';
+
+-- 2013-10-26: Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in den Tabellen "pp_strassenname" und "pp_strassenklas".
 -- Der View ÃŒbernimmt die Auswahl des passenden advstandardmodell und rechnet den Winkel passend um,
 -- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergÃ€nzt.
+
+-- DROP VIEW ap_lto_stra;
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
+CREATE OR REPLACE VIEW ap_lto_stra 
+AS 
+  SELECT p.ogc_fid,
+         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
+         p.schriftinhalt,                        -- WMS: LABELITEM
+         p.art,                                  -- WMS: CLASSITEM
+         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
+         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
+         p.wkb_geometry
+    FROM ap_lto p
+    JOIN alkis_beziehungen v   -- Relation zur Lagebezeichnung o. HsNr.
+      ON p.gml_id = v.beziehung_von
+    JOIN ax_lagebezeichnungohnehausnummer l
+      ON v.beziehung_zu = l.gml_id
+   WHERE  p.endet IS NULL                            -- nichts historisches
+     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln. 
+     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
+     AND (    'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
+           OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein?
+           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
+           OR (p.advstandardmodell IS NULL
+               AND (SELECT s.ogc_fid                 -- irgend ein Feld
+                      FROM ap_lto s                  -- eines anderen Textes (suchen)
+                      JOIN alkis_beziehungen vs      -- zur gleichen Lage o.HsNr
+                        ON s.gml_id = vs.beziehung_von
+                      JOIN ax_lagebezeichnungohnehausnummer ls
+                        ON vs.beziehung_zu = ls.gml_id
+                     WHERE ls.gml_id = l.gml_id
+                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
+                       AND NOT s.advstandardmodell IS NULL 
+                     LIMIT 1  -- einer reicht als Beweis
+                   ) IS NULL 
+              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
+         )
+;
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW ap_lto_stra 
+AS 
+  SELECT p.ogc_fid,
+         l.gml_id,                               -- wird im PP zum Nachladen aus Katalog gebraucht
+         p.schriftinhalt,                        -- WMS: LABELITEM
+         p.art,                                  -- WMS: CLASSITEM
+         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
+         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
+         p.wkb_geometry
+    FROM ap_lto p
+    JOIN ax_lagebezeichnungohnehausnummer l
+      ON l.gml_id = ANY (p.dientzurdarstellungvon)
+   WHERE  p.endet IS NULL
+     AND  p.art   IN ('Strasse','Weg','Platz','BezKlassifizierungStrasse') -- Diese Werte als CLASSES in LAYER behandeln. 
+     AND (    'DKKM1000' = ANY (p.advstandardmodell) -- "Lika 1000" bevorzugen
+           OR 'DLKM'     = ANY (p.advstandardmodell) -- oder auch Kataster allgemein?
+           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
+           OR (p.advstandardmodell IS NULL
+               AND (SELECT s.ogc_fid                 -- irgend ein Feld
+                      FROM ap_lto s                  -- eines anderen Textes (suchen)
+                      JOIN ax_lagebezeichnungohnehausnummer ls
+                        ON ls.gml_id = ANY(s.dientzurdarstellungvon)
+                     WHERE ls.gml_id = l.gml_id
+                       AND NOT s.advstandardmodell IS NULL 
+                     LIMIT 1  -- einer reicht als Beweis
+                   ) IS NULL 
+              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
+         )
+;
+
+COMMENT ON VIEW ap_lto_stra 
+  IS 'Sicht fÃŒr Kartendarstellung: Beschriftung aus "ap_lto" fÃŒr Lagebezeichnung mit Art "StraÃe", "Weg", "Platz" oder Klassifizierung.
+ Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe. Dient im Script pp_laden.sql zum ersten FÃŒllen der Tabelle "pp_strassenname_l".';
+
+-- 2014-08-26: Daten aus dem View "ap_lto_stra" werden im PostProcessing gespeichert in den Tabellen "pp_strassenname_l".
+-- Der View ÃŒbernimmt die Auswahl des passenden advstandardmodell.
+-- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergÃ€nzt.
+
 
 -- Layer NAME "ap_pto_nam" GROUP "praesentation"
@@ -348,4 +531,7 @@
 -- Entweder Layer trennen nach Text-Typen "NAM"+"ZNM" und dem Rest
 -- ODER           trennen nach fachlichen Ebenen wie "Nutzung" und "GebÃ€ude" und ....
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
 
 CREATE OR REPLACE VIEW ap_pto_nam 
@@ -383,4 +569,37 @@
          )
 ;
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+CREATE OR REPLACE VIEW ap_pto_nam 
+AS 
+  SELECT p.ogc_fid,
+         p.schriftinhalt,                        -- WMS: LABELITEM
+         p.art,                                  -- WMS: CLASSITEM
+         p.horizontaleausrichtung  AS hor,       -- Verfeinern der Text-Position ..
+         p.vertikaleausrichtung    AS ver,       --  .. durch Klassifizierung hor/ver
+         p.drehwinkel * 57.296     AS winkel,    -- * 180 / Pi
+         p.wkb_geometry
+    FROM ap_pto p
+    JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
+      ON l.gml_id = ANY (p.dientzurdarstellungvon) 
+   WHERE NOT p.schriftinhalt IS NULL 
+     AND  p.endet IS NULL                            -- nichts historisches
+     AND  p.art   IN ('NAM','ZNM')                   -- CLASSES in LAYER
+     AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
+           -- Ersatzweise auch "keine Angabe", aber nur wenn es keinen besseren Text zur Lage gibt
+           OR (p.advstandardmodell IS NULL
+               AND (SELECT s.gml_id                  -- irgend ein Feld
+                      FROM ap_pto s                  -- eines anderen Textes (suchen)
+                      JOIN nutzung l2                 -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
+                        ON l2.gml_id = ANY (s.dientzurdarstellungvon) 
+                     WHERE NOT s.advstandardmodell IS NULL 
+                     LIMIT 1  -- einer reicht als Beweis
+                   ) IS NULL 
+              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
+         )
+;
+
 COMMENT ON VIEW ap_pto_nam 
   IS 'Sicht fÃŒr Kartendarstellung: Beschriftung mit Art = Name/Zweitname. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe.';
@@ -392,21 +611,15 @@
 -- REST: Texte, die nicht schon in einem anderen Layer ausgegeben werden
 -- Ersetzt den View "s_beschriftung"
-
--- alte Version bis 2013-04-15
--- Nachteil: es werden mehrere Texte zum gleichen Objekt angezeigt die fÃŒr verschiedene MaÃstÃ€be gedacht sind.
---CREATE OR REPLACE VIEW ap_pto_rest 
---AS 
---  SELECT p.ogc_fid, 
---         p.schriftinhalt, 
---         p.art, 
---         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
---         p.wkb_geometry 
---    FROM ap_pto p
---   WHERE not p.schriftinhalt IS NULL 
---     AND p.endet IS NULL
---     AND p.art NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG');
-
-
--- 2013-04-15 Doppelte Darstellung aufgrund verschiedener "advstandardmodell" zum Objekt unterdrÃŒcken analog ap_pto_stra und ap_pto_nam
+-- Doppelte Darstellung aufgrund verschiedener "advstandardmodell" zum Objekt unterdrÃŒcken analog ap_pto_stra und ap_pto_nam
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
+    +++ HIER HIN KOPIEREN  +++
+
+*/
+
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+-- ToDo
 CREATE OR REPLACE VIEW ap_pto_rest 
 AS 
@@ -451,4 +664,14 @@
 -- Layer "s_zuordungspfeil_gebaeude"
 -- -----------------------------------
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
+    +++ HIER HIN KOPIEREN  +++
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+-- ToDo
+
 CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude 
 AS 
@@ -474,4 +697,14 @@
 --  ax_punktortta  >zeigtAuf?> AX_Grenzpunkt
 -- Zum Punktort des Grenzpunktes auch eine Information zur Vermarkung holen
+
+/* 
+-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
+
+    +++ HIER HIN KOPIEREN  +++
+
+*/
+-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
+-- ToDo
+
 CREATE OR REPLACE VIEW grenzpunkt 
 AS 
@@ -495,25 +728,4 @@
 -- Sichten vom OBK (Oberbergischer Kreis)
 -- --------------------------------------
---	CREATE OR REPLACE VIEW sk2004_zuordnungspfeil 
---	AS
---	 SELECT ap.ogc_fid, ap.wkb_geometry 
---	 FROM ap_lpo ap 
---	 WHERE ((ap.signaturnummer = '2004') 
---	   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
---	COMMENT ON VIEW sk2004_zuordnungspfeil IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer"';
-
---	CREATE OR REPLACE VIEW sk2004_zuordnungspfeil_spitze 
---	AS
---	 SELECT ap.ogc_fid, (((st_azimuth(st_pointn(ap.wkb_geometry, 1), 
---			st_pointn(ap.wkb_geometry, 2)) * (- (180)::double precision)) / pi()) + (90)::double precision) AS winkel, 
---			st_startpoint(ap.wkb_geometry) AS wkb_geometry 
---	 FROM ap_lpo ap 
---	 WHERE ((ap.signaturnummer = '2004') 
---	   AND ('DKKM1000'::text ~~ ANY ((ap.advstandardmodell)::text[])));
-
--- Diese Versionen "sk2004_zuordnungspfeil" und "sk2004_zuordnungspfeil_spitze" werden ersetzt durch
--- "s_zuordungspfeil_flurstueck" und "s_zuordungspfeilspitze_flurstueck".
--- Grund: "signaturnummer" is NULL, wenn Daten aus AED-Software kommen. Das Feld ist nur bei ibR gefuellt.
--- Die Alternativen filtern durch JOIN >dientZurDarstellungVon> ax_flurstueck.
 
 CREATE OR REPLACE VIEW sk2012_flurgrenze 
@@ -521,6 +733,6 @@
  SELECT fg.ogc_fid, fg.wkb_geometry
    FROM ax_besondereflurstuecksgrenze fg
-  WHERE (3000 = ANY (fg.artderflurstuecksgrenze)) 
-    AND fg.advstandardmodell ~~ 'DLKM'::text;
+  WHERE 3000   = ANY (fg.artderflurstuecksgrenze)
+    AND 'DLKM' = ANY (fg.advstandardmodell);
 COMMENT ON VIEW sk2012_flurgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
 
@@ -529,6 +741,6 @@
  SELECT gemag.ogc_fid, gemag.wkb_geometry
    FROM ax_besondereflurstuecksgrenze gemag
-  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze)) 
-    AND gemag.advstandardmodell ~~ 'DLKM'::text;
+  WHERE 7003   = ANY (gemag.artderflurstuecksgrenze)
+    AND 'DLKM' = ANY (gemag.advstandardmodell);
 COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
 
@@ -537,6 +749,6 @@
  SELECT blg.ogc_fid, blg.wkb_geometry
    FROM ax_besondereflurstuecksgrenze blg
-  WHERE (7102 = ANY (blg.artderflurstuecksgrenze)) 
-    AND blg.advstandardmodell ~~ 'DLKM'::text;
+  WHERE 7102   = ANY (blg.artderflurstuecksgrenze)
+    AND 'DLKM' = ANY (blg.advstandardmodell);
 COMMENT ON VIEW sk2018_bundeslandgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
 
@@ -545,6 +757,6 @@
  SELECT rbg.ogc_fid, rbg.wkb_geometry
    FROM ax_besondereflurstuecksgrenze rbg
-  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze)) 
-    AND rbg.advstandardmodell ~~ 'DLKM'::text;
+  WHERE 7103   = ANY (rbg.artderflurstuecksgrenze) 
+    AND 'DLKM' = ANY (rbg.advstandardmodell);
 COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
 
@@ -553,6 +765,6 @@
  SELECT gemg.ogc_fid, gemg.wkb_geometry
    FROM ax_besondereflurstuecksgrenze gemg
-  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze)) 
-    AND gemg.advstandardmodell ~~ 'DLKM'::text;
+  WHERE 7106   = ANY (gemg.artderflurstuecksgrenze) 
+    AND 'DLKM' = ANY (gemg.advstandardmodell);
 COMMENT ON VIEW sk2022_gemeindegrenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
 
@@ -579,5 +791,5 @@
      OR  7106 = ANY (artderflurstuecksgrenze)
     )
-    AND advstandardmodell ~~ 'DLKM'::text;
+    AND 'DLKM' = ANY (advstandardmodell);
 
 COMMENT ON VIEW sk201x_politische_grenze IS 'Sicht fÃŒr Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
