Index: trunk/import/sichten.sql
===================================================================
--- trunk/import/sichten.sql	(revision 275)
+++ trunk/import/sichten.sql	(revision 276)
@@ -3,7 +3,13 @@
 -- =====
 
+--  -----------------------------------------
+--  Sichten fÃŒr Fehlersuche und Daten-Analyse
+--  -----------------------------------------
+
+--  Dieses SQL braucht nur bei Bedarf in einer PostNAS-DB verarbeitet werden.
+--  Es werden zusÃ€tzliche Views einegerichtet, die nur bei Fehlersuche und Analys (vom Entwickler) benÃ¶tigt werden.
+
 --  PostNAS 0.7
 
---  2012-02-25 PostNAS 07, Umbenennung
 --  2012-04-17 flstnr_ohne_position
 --  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden
@@ -13,397 +19,22 @@
 --  2013-03-12 Optimierung Hausnummern, View "gebaeude_txt" (Funktion und Name)
 --  2013-04-15 UnterdrÃŒcken doppelter Darstellung in den Views 'ap_pto_stra', 'ap_pto_nam', 'ap_pto_rest'
-
---  -----------------------------------------
---  Sichten fuer Verwendung im mapfiles (wms)
---  -----------------------------------------
-
--- 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
-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 'fuer Kartendarstellung: 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"
-
-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,  -- Flaechenmitte 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 'Bruchnummerierung FlurstÃŒck, auch Standard-Position. Nicht direkt fuer WMS verwenden!';
-
-
--- Layer "ag_t_gebaeude"
--- ---------------------
--- 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,				         -- Point
- --			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). 
-DROP VIEW s_hausnummer_gebaeude;
-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.art,
-    --  p.advstandardmodell       AS modell,  -- TEST
-    --  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 alkis_beziehungen v
-     ON p.gml_id = v.beziehung_von
-   JOIN ax_lagebezeichnungmithausnummer l
-	 ON v.beziehung_zu  = l.gml_id
-  WHERE p.art = 'HNR'
-    AND 'DKKM1000' = ANY (p.advstandardmodell) -- erste NÃ€herungslÃ¶sung um Redundanzen zu unterdrÃŒcken
-    AND v.beziehungsart = 'dientZurDarstellungVon'
-	AND p.endet IS NULL
-	AND l.endet IS NULL
--- LIMIT 200 -- TEST
-;
-COMMENT ON VIEW s_hausnummer_gebaeude IS 'fuer Kartendarstellung: Hausnummern HauptgebÃ€ude';
+--  2013-04-16 Thema "BodenschÃ€tzung" und fehlernde Kommentare zum Views ergÃ€nzt.
+--             Diese Datei aufgeteilt in "sichten.sql" und "sichten_wms.sql"
+
 
 -- Welche Karten-Typen ?
---   SELECT DISTINCT advstandardmodell FROM ap_pto p WHERE p.art = 'HNR';
--- Liefert:
---   "{DKKM1000}"
---   "{DKKM1000,DKKM500}"
---   "{DKKM500}"
---   ""    (IS NULL)
-
--- ibR (Mi-Lk): darzustellender Text steht immer in ap_pto.schriftinhalt 
--- AED (Lippe): ap_pto.schriftinhalt ist meist leer, nur selten ein Eintrag
-
--- ToDo: Wie bei ap_pto_stra von mehren ap_pto zu einer Hausnummer die geeignete auswÃ€hlen
-
--- ToDo: In PostProcessing die Hausnummer von l.hausnummer in p.schriftinhalt kopieren, wenn leer
---   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 'fuer Kartendarstellung: Hausnummern NebengebÃ€ude';
-
--- Suche nach einem Ersatz:
--- ax_gebaeude  >hat>  ax_lagebezeichnungmitpseudonummer, kein Drehwinkel.
-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
-   FROM ax_gebaeude g
-   JOIN alkis_beziehungen v 
-     ON g.gml_id = v.beziehung_von
-   JOIN ax_lagebezeichnungmitpseudonummer l
-     ON v.beziehung_zu  = l.gml_id
-   WHERE v.beziehungsart = 'hat'
-     AND g.endet IS NULL
-     AND g.endet IS NULL;
-COMMENT ON VIEW lfdnr_nebengebaeude IS 'Laufende Nummer des NebengebÃ€udes zu einer Lagebezeichnung mit der FlÃ€chengeometrie des GebÃ€udes';
-
-
--- GebÃ€ude-Text
--- ------------
-CREATE OR REPLACE VIEW gebaeude_txt 
-AS 
- SELECT g.ogc_fid, 
-        g.wkb_geometry,
-        g.name,                    -- selten gefÃŒllt 
-        f.bezeichner AS funktion   -- umn: LABELITEM
-   FROM ax_gebaeude g
-   JOIN ax_gebaeude_funktion f 
-     ON g.gebaeudefunktion = f.wert
-  WHERE g.endet IS NULL 
-    AND g.gebaeudefunktion < 9998; -- "Nach Quellenlage nicht zu spezifizieren" braucht man nicht anzeigen
-COMMENT ON VIEW gebaeude_txt IS 'EntschlÃŒsselung der GebÃ€ude-Funktion (Ersatz fÃŒr Symbole)';
-
--- Layer "ag_p_flurstueck"
--- -----------------------
-CREATE OR REPLACE VIEW s_zugehoerigkeitshaken_flurstueck 
-AS 
- SELECT p.ogc_fid, 
-        p.wkb_geometry, 
-        p.drehwinkel * 57.296 AS drehwinkel,
-        f.flurstueckskennzeichen
-   FROM ap_ppo p
-   JOIN alkis_beziehungen v
-     ON p.gml_id = v.beziehung_von
-   JOIN ax_flurstueck f
-     ON v.beziehung_zu = f.gml_id
-  WHERE p.art = 'Haken'
-    AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND f.endet IS NULL
-    AND p.endet IS NULL;
-
-COMMENT ON VIEW s_zugehoerigkeitshaken_flurstueck IS 'fuer Kartendarstellung';
-
--- Layer "s_zuordungspfeil_flurstueck"
--- -----------------------------------
-CREATE OR REPLACE VIEW s_zuordungspfeil_flurstueck 
-AS 
- SELECT l.ogc_fid, 
-        l.wkb_geometry
-   FROM ap_lpo l
-   JOIN alkis_beziehungen v
-     ON l.gml_id = v.beziehung_von
-   JOIN ax_flurstueck f
-     ON v.beziehung_zu = f.gml_id
-  WHERE l.art = 'Pfeil'
-    AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
-    AND f.endet IS NULL
-    AND l.endet IS NULL;
-
-COMMENT ON VIEW s_zuordungspfeil_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer';
-
-
-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 alkis_beziehungen v
-     ON l.gml_id = v.beziehung_von
-   JOIN ax_flurstueck f
-     ON v.beziehung_zu = f.gml_id
-  WHERE l.art = 'Pfeil'
-    AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND ('DKKM1000' ~~ ANY (l.advstandardmodell))
-    AND f.endet IS NULL
-    AND l.endet IS NULL;
-
-COMMENT ON VIEW s_zuordungspfeilspitze_flurstueck IS 'fuer Kartendarstellung: Zuordnungspfeil FlurstÃŒcksnummer, Spitze';
-
--- Drehwinkel in Bogenmass, wird vom mapserver in Grad benÃ¶tigt.
--- Umrechnung durch Faktor (180 / Pi)
-
-
--- Layer NAME "ap_pto_stra" (StraÃe) GROUP "praesentation"
--- -------------------------------------------------------
--- Von doppelten Textpositionen nur das passendere Modell anzeigen.
--- Eine Relation wird fuer die Gruppierung verwendet:
---  ap_pto >dientZurDarstellungVon> ax_lagebezeichnungohnehausnummer
-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
-         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 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 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
-           -- 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 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
-         )
-;
-COMMENT ON VIEW ap_pto_stra IS 'Beschriftung aus ap_pto fÃŒr Lagebezeichnung mit Art "StraÃe", "Weg", "Platz" oder Klassifizierung. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe';
-
-
--- Layer NAME "ap_pto_nam" GROUP "praesentation"
--- -------------------------------------------------------
--- 'NAM' = Name (Eigenname) und 'ZNM' = Zweitname (touristischer oder volkstÃŒmlicher Name) zu ...
---   -- AX_Strassenverkehr oder AX_Platz usw.
---  ap_pto >dientZurDarstellungVon> ?irgendwas?
-
--- Dieser View wird bisher nicht verwendet. Dazu mÃŒsste ein neuer Layer erzeugt werden und die 
--- Arten 'NAM' und 'ZNM' dann aus den View 'ap_pto_rest' heraus genommen werden.
-
--- Entweder Layer trennen nach Text-Typen "NAM"+"ZNM" und dem Rest
--- ODER           trennen nach fachlichen Ebenen wie "Nutzung" und "GebÃ€ude" und ....
-
-CREATE OR REPLACE VIEW ap_pto_nam 
-AS 
-  SELECT p.ogc_fid,
-	  -- p.advstandardmodell       AS modell,    -- 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 alkis_beziehungen v       
-      ON p.gml_id = v.beziehung_von
-  --JOIN nutzung l                      -- Im PostProcessing zusammen gefasste Nutzungsarten-Abschnitte
-  --  ON v.beziehung_zu = l.gml_id
-   WHERE NOT p.schriftinhalt IS NULL 
-     AND  p.endet IS NULL                            -- nichts historisches
-     AND  p.art   IN ('NAM','ZNM') -- Diese Werte als CLASSES in LAYER behandeln. 
-     AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
-     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 vs.beziehung_zu          -- irgend ein Feld
-					  FROM ap_pto s                 -- eines anderen Textes (suchen)
-                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
-                        ON s.gml_id = vs.beziehung_von
-                     WHERE vs.beziehung_zu = v.beziehung_zu
-                       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
-         )
-;
-COMMENT ON VIEW ap_pto_nam IS 'Beschriftung mit Art = Name/Zweitname. Vorzugsweise mit advstandardmodell="DKKM1000", ersatzweise ohne Angabe';
-
-
--- Layer NAME "ap_pto" GROUP "praesentation"
--- ----------------------------------------
--- 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
-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
-    JOIN alkis_beziehungen v   -- Relation zur ?irgendwas?
-      ON p.gml_id = v.beziehung_von
-   WHERE not p.schriftinhalt IS NULL 
-     AND p.endet IS NULL
-     AND p.art   NOT IN ('HNR','Strasse','Weg','Platz','BezKlassifizierungStrasse','AOG_AUG')
-     -- Diese 'IN'-Liste fortschreiben bei Erweiterungen des Mapfiles
-     -- 'PNR' (Pseudonummer, lfd.-Nr.-NebengebÃ€ude) kommt nicht mehr vor?
-    AND  v.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
-    AND ('DKKM1000' = ANY (p.advstandardmodell)     -- "Lika 1000" bevorzugen
-           -- Ersatzweise auch "keine Angabe" (nul) akzeptieren, aber nur wenn es keinen besseren Text zu ?irgendwas? gibt
-           -- Es wird hier nur bis zur Verbindungstabelle "alkis_beziehungen" gesucht, ob am anderen Ende die gleiche gml_id verlinkt ist.
-           -- Diese gml_id kÃ¶nnen dann zu verschiedenen, unbekannten Objekttabellen linken.
-           OR (p.advstandardmodell IS NULL
-               AND (SELECT vs.beziehung_zu          -- irgend ein Feld
-					  FROM ap_pto s                 -- eines anderen Textes (suchen)
-                      JOIN alkis_beziehungen vs     -- zur gleichen ?irgendwas?
-                        ON s.gml_id = vs.beziehung_von
-                     WHERE vs.beziehung_zu = v.beziehung_zu
-                       AND vs.beziehungsart = 'dientZurDarstellungVon' -- kann, muss aber nicht
-                       AND NOT s.advstandardmodell IS NULL 
-                     LIMIT 1  -- einer reicht als AusschluÃkriterium
-					) IS NULL 
-              ) -- "Subquery IS NULL" liefert true wenn kein weiterer Text gefunden wird
-         );
-COMMENT ON VIEW ap_pto_rest IS 'Beschriftungen aus "ap_pto", die noch nicht in anderen Layern angezeigt werden';
-
+CREATE OR REPLACE VIEW kartentypen_der_texte_fuer_hnr
+AS 
+   SELECT DISTINCT advstandardmodell 
+   FROM ap_pto p 
+   WHERE p.art = 'HNR';
+COMMENT ON VIEW kartentypen_der_texte_fuer_hnr 
+  IS 'Datenanalyse: Kartentypen in Tabelle ap_pto fÃŒr Hausnummern.';
+
+-- Dies liefert:
+--  "{DKKM1000}"
+--  "{DKKM1000,DKKM500}"
+--  "{DKKM500}"
+--  NULL
 
 -- Texte, die NICHT dargestellt werden sollen.
@@ -421,139 +52,6 @@
      AND p.endet IS NULL
      AND p.art IN ('AOG_AUG','PNR');
-COMMENT ON VIEW ap_pto_muell IS 'Beschriftungen aus "ap_pto", die NICHT dargestellt werden sollen.';
-
--- ENDE BESCHRIFTUNG
-
--- Layer "s_zuordungspfeil_gebaeude"
--- -----------------------------------
-CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude 
-AS 
- SELECT l.ogc_fid, 
-     -- alkis_beziehungen.beziehungsart, -- TEST
-     -- ap_lpo.art, -- TEST
-        l.wkb_geometry
-   FROM ap_lpo l
-   JOIN alkis_beziehungen v
-     ON l.gml_id = v.beziehung_von
-   JOIN ax_gebaeude g
-     ON v.beziehung_zu = g.gml_id
-  WHERE l.art = 'Pfeil'
-    AND v.beziehungsart = 'dientZurDarstellungVon'
-    AND g.endet IS NULL
-    AND l.endet IS NULL;
-COMMENT ON VIEW s_zuordungspfeil_gebaeude IS 'fuer Kartendarstellung: Zuordnungspfeil fÃŒr GebÃ€ude-Nummer';
-
--- Grenzpunkte
--- -----------
---  ax_punktortta  >zeigtAuf?> AX_Grenzpunkt
--- Zum Punktort des Grenzpunktes auch eine Information zur Vermarkung holen
-CREATE OR REPLACE VIEW grenzpunkt 
-AS 
- SELECT o.ogc_fid, 
-        o.wkb_geometry, 
-     -- g.punktkennung,    -- ggf spÃ€ter als labelitem "rrrrrhhhhAnnnnn" "32483 5751 0 02002"
-        g.abmarkung_marke, -- steuert die Darstellung >9000 = unvermarkt
-        v.beziehungsart
-   FROM ax_punktortta o
-   JOIN alkis_beziehungen v 
-     ON o.gml_id = v.beziehung_von
-   JOIN ax_grenzpunkt g
-     ON v.beziehung_zu  = g.gml_id
-   WHERE v.beziehungsart = 'istTeilVon'
-     AND g.endet IS NULL
-     AND g.endet IS NULL;
-COMMENT ON VIEW grenzpunkt IS 'ZusammenfÃŒhrung von Punktort (Geometrie) und AX_Grenzpunkt (Eigenschaften)';
-
--- 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[])));
--- krz: ap.signaturnummer is NULL in allen SÃ€tzen
-
-CREATE OR REPLACE VIEW sk2012_flurgrenze 
-AS 
- SELECT fg.ogc_fid, fg.wkb_geometry
-   FROM ax_besondereflurstuecksgrenze fg
-  WHERE (3000 = ANY (fg.artderflurstuecksgrenze)) 
-    AND fg.advstandardmodell ~~ 'DLKM'::text;
-COMMENT ON VIEW sk2012_flurgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Flurgrenze"';
-
-CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze 
-AS 
- SELECT gemag.ogc_fid, gemag.wkb_geometry
-   FROM ax_besondereflurstuecksgrenze gemag
-  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze)) 
-    AND gemag.advstandardmodell ~~ 'DLKM'::text;
-COMMENT ON VIEW sk2014_gemarkungsgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemarkungsgrenze"';
-
-CREATE OR REPLACE VIEW sk2018_bundeslandgrenze 
-AS 
- SELECT blg.ogc_fid, blg.wkb_geometry
-   FROM ax_besondereflurstuecksgrenze blg
-  WHERE (7102 = ANY (blg.artderflurstuecksgrenze)) 
-    AND blg.advstandardmodell ~~ 'DLKM'::text;
-COMMENT ON VIEW sk2018_bundeslandgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Bundeslandgrenze"';
-
-CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze 
-AS 
- SELECT rbg.ogc_fid, rbg.wkb_geometry
-   FROM ax_besondereflurstuecksgrenze rbg
-  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze)) 
-    AND rbg.advstandardmodell ~~ 'DLKM'::text;
-COMMENT ON VIEW sk2020_regierungsbezirksgrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Regierungsbezirksgrenze"';
-
-CREATE OR REPLACE VIEW sk2022_gemeindegrenze 
-AS 
- SELECT gemg.ogc_fid, gemg.wkb_geometry
-   FROM ax_besondereflurstuecksgrenze gemg
-  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze)) 
-    AND gemg.advstandardmodell ~~ 'DLKM'::text;
-COMMENT ON VIEW sk2022_gemeindegrenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze "Gemeindegrenze"';
-
-
--- Zusammenfassung "Politische Grenzen"  Art= 7102, 7103, 7104, 7106
-
--- Grenze der Bundesrepublik Deutschland 7101 (G)
--- .. des Bundeslandes 7102 (G)
--- .. des Regierungsbezirks 7103 (G)
--- .. des Landkreises 7104 (G)
--- .. der Gemeinde 7106
--- .. des Gemeindeteils 7107
--- .. der Verwaltungsgemeinschaft 7108
-
-CREATE OR REPLACE VIEW sk201x_politische_grenze 
-AS 
- SELECT ogc_fid, artderflurstuecksgrenze as art, wkb_geometry
-   FROM ax_besondereflurstuecksgrenze
---WHERE ( ANY (artderflurstuecksgrenze) IN (7102,7103,7104,7106) ) 
-  WHERE (7102 = ANY (artderflurstuecksgrenze) 
-     OR  7102 = ANY (artderflurstuecksgrenze) 
-     OR  7103 = ANY (artderflurstuecksgrenze) 
-     OR  7104 = ANY (artderflurstuecksgrenze) 
-     OR  7106 = ANY (artderflurstuecksgrenze)
-    )
-    AND advstandardmodell ~~ 'DLKM'::text;
-
-COMMENT ON VIEW sk201x_politische_grenze IS 'fuer Kartendarstellung: besondere FlurstÃŒcksgrenze Politische Grenzen (Bund, Land, Kreis, Gemeinde)';
--- GefÃ€llt mir nicht! Array-Felder eignen sich nicht als Filter. Optimierung: in Tabelle speichern
-
-
---  ------------------------------------------
---  Sichten fuer Fehlersuche und Daten-Analyse
---  ------------------------------------------
+COMMENT ON VIEW ap_pto_muell IS 'Datenanalyse: Beschriftungen aus "ap_pto", die NICHT dargestellt werden sollen.';
+
 
 -- FlurstÃŒcke mit Anzeige der FlurstÃŒcksnummer an der "Standardposition"
@@ -580,5 +78,5 @@
 --ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
   ;
-COMMENT ON VIEW flstnr_ohne_position IS 'FlurstÃŒcke ohne manuell gesetzte Position fÃŒr die PrÃ€sentation der FS-Nr';
+COMMENT ON VIEW flstnr_ohne_position IS 'Sicht fÃŒr Datenanalyse: FlurstÃŒcke ohne manuell gesetzte Position fÃŒr die PrÃ€sentation der FS-Nr';
 
 -- Umbruch im Label? z.B. "Schwimm-/nbecken"
@@ -590,5 +88,5 @@
   WHERE not schriftinhalt is null
     AND schriftinhalt like '%/n%';
-
+COMMENT ON VIEW texte_mit_umbruch IS 'Sicht fÃŒr Datenanalyse: Vorkommen eines Umbruchs im Label-Text.';
 
 -- EXTENT fÃŒr das Mapfile eines Mandanten ermitteln
@@ -600,5 +98,5 @@
    FROM ax_flurstueck f
    WHERE f.endet IS NULL;
-COMMENT ON VIEW flurstuecks_minmax IS 'Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile';
+COMMENT ON VIEW flurstuecks_minmax IS 'Sicht fÃŒr Datenanalyse: Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile.';
 
 -- Nach Laden der Keytables:
@@ -621,6 +119,6 @@
       ON r.land   = d.land 
      AND r.stelle = d.stelle 
-  WHERE r.endet IS NULL
-    AND d.endet IS NULL ;
+  WHERE r.endet IS NULL AND d.endet IS NULL ;
+COMMENT ON VIEW baurecht IS 'Datenanalyse: EnstschlÃŒsselte Felder zu einer FlÃ€che des Baurechts.';
 
 -- Man glaubt es kaum, aber im ALKIS haben Gemeinde und Gemarkung keinerlei Beziehung miteinander
@@ -631,7 +129,5 @@
   FROM            ax_flurstueck
   WHERE           endet IS NULL
-  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
-;
-
+  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer;
 COMMENT ON VIEW gemarkung_in_gemeinde IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
 
@@ -645,4 +141,5 @@
  WHERE    endet IS NULL
  GROUP BY st_geometrytype(wkb_geometry);
+COMMENT ON VIEW arten_von_flurstuecksgeometrie IS 'Datenanalyse: vorkommende Geometry-Typen in Tabelle ax_flurstueck.';
 
 
@@ -651,19 +148,15 @@
 -- Verschluesselte Lagebezeichnung (Strasse und Hausnummer) fuer eine Gemeinde
 -- Schluessel der Gemeinde nach Bedarf anpassen!
-
---  FEHLER: Funktion to_char(character varying, unknown) existiert nicht
-
-
 CREATE OR REPLACE VIEW adressen_hausnummern
 AS
     SELECT 
         s.bezeichnung AS strassenname, 
-         g.bezeichnung AS gemeindename, 
-         l.land, 
-         l.regierungsbezirk, 
-         l.kreis, 
-         l.gemeinde, 
-         l.lage        AS strassenschluessel, 
-         l.hausnummer 
+        g.bezeichnung AS gemeindename, 
+        l.land, 
+        l.regierungsbezirk, 
+        l.kreis, 
+        l.gemeinde, 
+        l.lage        AS strassenschluessel, 
+        l.hausnummer 
     FROM   ax_lagebezeichnungmithausnummer l  
     JOIN   ax_gemeinde g 
@@ -673,11 +166,10 @@
       ON l.kreis=s.kreis 
      AND l.gemeinde=s.gemeinde 
-     AND l.lage = s.lage        -- ab PostNAS 0.6
-    WHERE     l.gemeinde = 40;  -- "40" = Stadt Lage
-
+     AND l.lage = s.lage
+    WHERE l.gemeinde = 40;  -- "40" = Stadt Lage
+COMMENT ON VIEW adressen_hausnummern IS 'Datenanalyse: VerschlÃŒsselte Lagebezeichnung (StraÃe und Hausnummer) fÃŒr eine Gemeinde. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
 
 -- Zuordnung dieser Adressen zu Flurstuecken
 -- Schluessel der Gemeinde nach Bedarf anpassen!
-
 CREATE OR REPLACE VIEW adressen_zum_flurstueck
 AS
@@ -702,12 +194,9 @@
         ON l.kreis=s.kreis 
        AND l.gemeinde=s.gemeinde 
-       AND l.lage = s.lage   -- ab PostNAS 0.6
+       AND l.lage = s.lage
      WHERE v.beziehungsart='weistAuf'
        AND l.gemeinde = 40  -- "40" = Stadt Lage
-     ORDER BY 
-           f.gemarkungsnummer,
-           f.flurnummer,
-           f.zaehler,
-           f.nenner;
+     ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;
+COMMENT ON VIEW adressen_zum_flurstueck IS 'Datenanalyse: Zuordnung von Adressen zu Flurstuecken. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
 
 -- PunktfÃ¶rmige  P r Ã€ s e n t a t i o n s o b j k t e  (ap_pto)
@@ -815,21 +304,8 @@
      AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
      AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
-     AND p.endet IS NULL 
-     AND n.endet IS NULL
-     AND g.endet IS NULL
-     AND b.endet IS NULL
-     AND s.endet IS NULL
-     AND f.endet IS NULL
-     AND k.endet IS NULL
-   ORDER BY   
-         k.bezeichnung,
-         f.flurnummer,
-         f.zaehler,
-         f.nenner,
-         g.bezirk, 
-         g.buchungsblattnummermitbuchstabenerweiterung,
-         s.laufendenummer 
-;
-
+     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
+     AND s.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
+   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;
+COMMENT ON VIEW flurstuecke_eines_eigentuemers IS 'Muster fÃŒr Export: Suchkriteriumnach Bedarf anpassen.';
 
 -- Rechte eines EigentÃŒmers
@@ -844,9 +320,6 @@
 
 -- Ãbersicht der Tabellen:
---
 -- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle-h >an> Stelle-d >istGebucht> Flurstueck
-
 -- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
-
 
 CREATE OR REPLACE VIEW rechte_eines_eigentuemers 
@@ -896,60 +369,46 @@
      AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
      AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
-     AND p.endet IS NULL
-     AND n.endet IS NULL
-     AND g.endet IS NULL
-     AND b.endet IS NULL
-     AND sh.endet IS NULL
-     AND sd.endet IS NULL
-     AND f.endet IS NULL
-     AND k.endet IS NULL
-   ORDER BY   
-         k.bezeichnung,
-         f.flurnummer,
-         f.zaehler,
-         f.nenner,
-         g.bezirk, 
-         g.buchungsblattnummermitbuchstabenerweiterung,
-         sh.laufendenummer 
-;
-
-CREATE OR REPLACE VIEW beziehungen_redundant 
-AS
-SELECT *
- FROM alkis_beziehungen AS bezalt
- WHERE EXISTS
-       (SELECT ogc_fid
-         FROM alkis_beziehungen AS bezneu
-        WHERE bezalt.beziehung_von = bezneu.beziehung_von
-          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
-          AND bezalt.beziehungsart = bezneu.beziehungsart
-          AND bezalt.ogc_fid       < bezneu.ogc_fid
-        );
-
-COMMENT ON VIEW beziehungen_redundant IS 'alkis_beziehungen zu denen es eine identische neue Version gibt.';
-
-
-CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
-AS
-SELECT *
- FROM alkis_beziehungen AS bezalt
- WHERE EXISTS
-       (SELECT ogc_fid
-         FROM alkis_beziehungen AS bezneu
-        WHERE bezalt.beziehung_von = bezneu.beziehung_von
-          AND bezalt.beziehung_zu  = bezneu.beziehung_zu
-          AND bezalt.beziehungsart = bezneu.beziehungsart
-          AND bezalt.ogc_fid       < bezneu.ogc_fid
-        )
-     -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
-     -- die aktuell noch in der Delet-Tabelle stehen
-     AND EXISTS
-        (SELECT ogc_fid
-         FROM delete
-         WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
-            OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
-        );
-
-COMMENT ON VIEW beziehungen_redundant_in_delete IS 'alkis_beziehungen zu denen es eine identische neue Version gibt und wo das Objekt noch in der delete-Tabelle vorkommt.';
+     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
+     AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
+   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;
+COMMENT ON VIEW rechte_eines_eigentuemers IS 'Muster fÃŒr Export: Suchkriteriumnach Bedarf anpassen. Dies ergÃ€nzt "flurstuecke_eines_eigentuemers" um die FÃ€lle mit besonderen Buchungen.';
+
+-- Die 2 Views nur fuer Entwicklung: 
+
+-- 	CREATE OR REPLACE VIEW beziehungen_redundant 
+-- 	AS
+-- 	 SELECT *
+-- 	   FROM alkis_beziehungen AS bezalt
+-- 	   WHERE EXISTS
+-- 		   (SELECT ogc_fid
+-- 			 FROM alkis_beziehungen AS bezneu
+-- 			WHERE bezalt.beziehung_von = bezneu.beziehung_von
+-- 			  AND bezalt.beziehung_zu  = bezneu.beziehung_zu
+-- 			  AND bezalt.beziehungsart = bezneu.beziehungsart
+-- 			  AND bezalt.ogc_fid       < bezneu.ogc_fid
+-- 			);
+-- 	COMMENT ON VIEW beziehungen_redundant IS 'Datenanalyse: alkis_beziehungen zu denen es eine identische neue Version gibt. Fehlersuche bei PostNAS-Trigger fÃŒr Replace.';
+--
+-- 	CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
+-- 	AS
+-- 	SELECT *
+-- 	 FROM alkis_beziehungen AS bezalt
+-- 	 WHERE EXISTS
+-- 		   (SELECT ogc_fid
+-- 			 FROM alkis_beziehungen AS bezneu
+-- 			WHERE bezalt.beziehung_von = bezneu.beziehung_von
+-- 			  AND bezalt.beziehung_zu  = bezneu.beziehung_zu
+-- 			  AND bezalt.beziehungsart = bezneu.beziehungsart
+-- 			  AND bezalt.ogc_fid       < bezneu.ogc_fid
+-- 			)
+-- 		 -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
+-- 		 -- die aktuell noch in der Delete-Tabelle stehen
+-- 		 AND EXISTS
+-- 			(SELECT ogc_fid
+-- 			 FROM delete
+-- 			 WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
+-- 				OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
+-- 			);
+-- 	COMMENT ON VIEW beziehungen_redundant_in_delete IS 'Datenanalyse: alkis_beziehungen zu denen es eine identische neue Version gibt und wo das Objekt noch in der delete-Tabelle vorkommt. Fehlersuche bei PostNAS-Trigger fÃŒr Replace.';
 
 
@@ -970,9 +429,9 @@
 -- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert.
 -- Doppelte Verweise zÃ€hlen ohne zu prÃŒfen, ob die gml_id in ax_flurstueck existiert.
---  SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
---    FROM alkis_beziehungen b
---   WHERE b.beziehungsart = 'istGebucht'
---  GROUP BY b.beziehung_von
---  HAVING count(b.ogc_fid) > 1;
+--   SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
+--     FROM alkis_beziehungen b
+--    WHERE b.beziehungsart = 'istGebucht'
+--   GROUP BY b.beziehung_von
+--   HAVING count(b.ogc_fid) > 1;
 
 COMMENT ON VIEW mehrfache_buchung_zu_fs IS 'Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen';
