Index: /trunk/import/classic2norgis.sql
===================================================================
--- /trunk/import/classic2norgis.sql	(revision 362)
+++ /trunk/import/classic2norgis.sql	(revision 362)
@@ -0,0 +1,431 @@
+
+-- ===================================================================================
+--  ALKIS-PostGIS   Mapbender-Navigation und Buchauskunft für NorGIS-ALKIS-Importer
+-- ===================================================================================
+
+--Stand 2016-02-234
+
+-- Aufgabe:
+--
+-- Die ALKIS-Navigation für Mapbender 2.7.4 arbeitet bisher mit der Datenbank-Struktur
+-- aus dem "Klassischen" Import mit Aufruf des Konvertres ogr2ogr aus einen Shellscript.
+--
+-- Dabei wird ein PostProcessing (Nach-Konverter-Verarbeitung) durchgeführt,
+-- das Tabellen und Views bereit stellt, für einen schnellen Zugriff in 
+--  Mapfile, Auskunft und Navigation. 
+--
+-- Dies Script soll eine Datenbank, die mit dem NorGIS-ALKIS-Importer geladen wurde
+-- für die Verwendung mit ALKIS-Navigation vorbereiten. 
+-- Es ist jedoch eine speziell angepasste Version der NAV-PHP-Scripte notwendig. 
+
+
+-- D a t e n 
+-- ============================
+
+-- Die Beziehungen werden immer noch mit geladen, sind aber inzwischen überflüssig,
+-- weil jetzt Relationen zwischen den Tabellen definiert sind. 
+  TRUNCATE alkis_beziehungen;
+
+
+-- V i e w s
+-- ============================
+
+
+-- Bausteine für andere Views:
+-- ---------------------------
+
+-- Ein View, der die Verbindung von Flurstück zur Buchung für zwei verschiedene Fälle herstellt.
+-- Einmal die "normalen" (direkten) Buchungen.
+-- Zweitens über die Rechte von Buchungsstellen an anderen Buchungsstellen.
+-- Dies kann als "Mittelstück" in den anderen Views eingefügt werden.
+
+-- Einfach/Direkt:
+--   Flurstück   >istGebucht>                         (Buchungs-Stelle)
+--
+-- Mit "Recht an":
+--   Flurstück   >istGebucht>  Buchungs-Stelle  <an<  (Buchungs-Stelle)
+--                               (dienend)              (herrschend) 
+
+--           DROP VIEW public.doppelverbindung;
+CREATE OR REPLACE VIEW public.doppelverbindung
+AS
+  -- FS >istGebucht> Buchungstelle
+  SELECT f1.gml_id              AS fsgml,    -- gml_id Flurstück
+         b1.gml_id              AS bsgml,    -- gml_id Buchungs
+         0                      AS ba_dien
+    FROM ax_flurstueck f1
+    JOIN ax_buchungsstelle b1   ON f1.istgebucht = b1.gml_id
+ UNION
+  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
+  SELECT f2.gml_id              AS fsgml,    -- gml_id Flurstück
+         b2.gml_id              AS bsgml,    -- gml_id Buchung - (herrschendes GB)
+         dien.buchungsart       AS ba_dien   -- Ein Feld aus der Zwischen-Buchung zur Fall-Unterscheidung
+    FROM ax_flurstueck f2
+    JOIN ax_buchungsstelle dien ON f2.istgebucht = dien.gml_id
+    JOIN ax_buchungsstelle b2   ON dien.gml_id = ANY (b2.an)  -- auch "zu" ?
+   WHERE dien.endet IS NULL;   -- Für das zusätzliche Verbindungselement die Historie HIER ausschließen, 
+                               -- Für andere Tabellen muss dies in dem View erfolgen, der dies verwendet.
+
+COMMENT ON VIEW public.doppelverbindung 
+ IS 'ALKIS-Beziehung von Flurstück zu Buchung. UNION-Zusammenfassung des einfachen Falls mit direkter Buchung und des Falles mit Recht einer Buchungsstelle an einer anderen Buchungsstelle.
+Dies ist ausschließlich gedacht zur Verwendung in anderen Views um diese einfacher zu machen.';
+
+
+-- Ein View, der die Verbindung von Flurstück zur Straßentabelle für zwei verschiedene Fälle herstellt.
+-- Einmal über die Lagebezeichnung MIT Hausnummer und einmal OHNE.
+-- Dies kann als "Mittelstück" in den anderen Views eingefügt werden.
+
+--           DROP VIEW public.flst_an_strasse;
+CREATE OR REPLACE VIEW public.flst_an_strasse
+AS
+  -- Flurstück >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
+  SELECT fm.gml_id AS fsgml,
+         sm.gml_id AS stgml,                 -- Filter: gml_id der Straße
+         'm' AS fall                         -- Sätze unterschieden: Mit HsNr
+    FROM ax_flurstueck fm                    -- Flurstück Mit
+    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
+      ON lm.gml_id = ANY (fm.weistauf)
+    JOIN ax_lagebezeichnungkatalogeintrag sm
+      ON lm.land=sm.land AND lm.regierungsbezirk=sm.regierungsbezirk AND lm.kreis=sm.kreis AND lm.gemeinde=sm.gemeinde AND lm.lage=sm.lage 
+   WHERE lm.endet IS NULL AND fm.endet IS NULL -- nichts Historisches
+ UNION
+  -- Flurstück >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
+  SELECT fo.gml_id AS fsgml,
+         so.gml_id AS stgml,                 -- Filter: gml_id der Straße
+         'o' AS fall                         -- Sätze unterschieden: Ohne HsNr
+    FROM ax_flurstueck fo                    -- Flurstück OHNE
+    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
+      ON lo.gml_id = ANY (fo.zeigtauf)
+    JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
+      ON lo.land=so.land AND lo.regierungsbezirk=so.regierungsbezirk AND lo.kreis=so.kreis AND lo.gemeinde=so.gemeinde AND lo.lage=so.lage
+   WHERE lo.endet IS NULL AND fo.endet IS NULL; -- nichts Historisches
+
+COMMENT ON VIEW public.flst_an_strasse 
+ IS 'ALKIS-Beziehung von Flurstück zu Straßentabelle. UNION-Zusammenfassung der Fälle MIT und OHNE Hausnummer.';
+
+-- Muss man noch dafür sorgen, dass Flurstück nicht doppelt vorkommt? z.B. mit DISTINCT
+-- Oder müssen ggf. mehrfache FS im Programm übersprungen werden?
+
+-- Test-Ausgabe:
+--   SELECT * FROM flst_an_strasse WHERE stgml='DENW18AL000004Fl' LIMIT 40;
+
+
+-- Generelle Export-Struktur "Flurstück - Buchung - Grundbuch - Person"
+-- --------------------------------------------------------------------
+-- Verwendet den gespeicherten View "doppelverbindung".
+-- Wird benötigt im Auskunft-Modul "alkisexport.php":
+-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
+-- Für Filter nach "Straße" siehe die nachfolgende Sonderversion "exp_csv_str".
+
+-- Problem / Konflikt:
+-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden. 
+-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in 
+-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt. 
+-- Diese Redundanzen müssen vom dem Programm gefiltert werden, das die Daten über eine Schnittstelle einliest.
+
+-- Anwendungs-Beispiel: Abrechnung von Anliegerbeiträgen.
+
+DROP VIEW IF EXISTS exp_csv;
+
+CREATE OR REPLACE VIEW exp_csv
+AS
+ SELECT
+  -- F l u r s t ü c k
+    f.gml_id                             AS fsgml,       -- möglicher Filter Flurstücks-GML-ID
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+
+  -- G r u n d b u c h
+    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+
+  -- B u c h u n g s s t e l l e  (Grundstück)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN über 'Recht an')
+    s.buchungsart,                                       -- verschlüsselt
+  --b.bezeichner                         AS bu_art,      -- Buchungsart entschlüsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlüsselt
+
+  -- N a m e n s N u m m e r  (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
+
+  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
+  -- Aus Subquery rg
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+
+  -- P e r s o n
+    p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
+    p.anrede,                                                -- Anrede key
+    wp.v                                 AS anrv,            -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                     -- Familienname
+    p.geburtsdatum,
+    --p.geburtsname, p.akademischergrad 
+ 
+  -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
+    a.bestimmungsland                    AS land
+
+  FROM ax_flurstueck    f               -- Flurstück
+  JOIN doppelverbindung d               -- beide Fälle über Union-View: direkt und über Recht von Buchung an Buchung
+    ON d.fsgml = f.gml_id
+  JOIN ax_gemarkung g                   -- entschlüsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
+    ON d.bsgml = s.gml_id
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ü s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- Entschlüsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
+  LEFT JOIN alkis_wertearten wb         -- Entschlüsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying)=wb.k AND wp.element='ax_buchungsstelle' AND wp.bezeichnung='buchungsart' 
+
+  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
+  -- Noch mal "GB -> NamNum", aber dieses Mal für "Rechtsgemeinschaft".
+  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+
+  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
+
+  ORDER BY f.flurstueckskennzeichen, 
+           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
+           nn.laufendenummernachdin1421;
+
+COMMENT ON VIEW exp_csv 
+ IS 'View für einen CSV-Export aus der Buchauskunft mit alkisexport.php. Generelle Struktur. Für eine bestimmte gml_id noch den Filter setzen.';
+
+
+-- Variante des View "exp_csv":
+-- Hier wird zusätzlich der Baustein "flst_an_strasse" verwendet.
+-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
+-- um alle Flurstücke zu bekommen, die an einer Straße liegen.
+
+
+DROP VIEW IF EXISTS exp_csv_str;
+
+CREATE OR REPLACE VIEW exp_csv_str
+AS
+ SELECT
+    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
+                                                         -- UNTERSCHIED zu exp_csv)
+  -- F l u r s t ü c k
+    f.gml_id                             AS fsgml,       -- Gruppenwechsel für "function lage_zum_fs" in alkisexport.php
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+
+  -- G r u n d b u c h
+  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+
+  -- B u c h u n g s s t e l l e  (Grundstück)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN über 'Recht an')
+    s.buchungsart,                                       -- verschlüsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlüsselt
+
+  -- N a m e n s N u m m e r (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
+
+  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
+  -- Aus Subquery rg
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+
+  -- P e r s o n
+  --p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
+    p.anrede,                                                -- Anrede key
+    wp.v                                 AS anrv,            -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                     -- Familienname
+    p.geburtsdatum,
+    --p.geburtsname, p.akademischergrad 
+ 
+  -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
+    a.bestimmungsland                    AS land
+
+  FROM ax_flurstueck    f               -- Flurstück
+  JOIN flst_an_strasse  l               -- Lage (hier zusätzlicher JOIN gegenüber Version "exp_csv") 
+	ON l.fsgml = f.gml_id 
+  JOIN doppelverbindung d               -- beide Fälle über Union-View: direkt und über Recht von Buchung an Buchung
+    ON d.fsgml = f.gml_id 
+  JOIN ax_gemarkung g                   -- entschlüsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
+    ON d.bsgml = s.gml_id 
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ü s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- Entschlüsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
+  LEFT JOIN alkis_wertearten wb         -- Entschlüsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying)=wb.k AND wp.element='ax_buchungsstelle' AND wp.bezeichnung='buchungsart' 
+
+  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
+  -- Noch mal "GB -> NamNum", aber dieses Mal für "Rechtsgemeinschaft".
+  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg  -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+
+  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
+
+  ORDER BY f.flurstueckskennzeichen, 
+           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
+           nn.laufendenummernachdin1421;
+
+COMMENT ON VIEW exp_csv_str 
+ IS 'View für einen CSV-Export aus der Buchauskunft mit alkisexport.php. Liefert nur Flurstücke, die eine Lagebezeichnung MIT/OHNE Hausnummer haben. Dazu noch den Filter auf GML-ID der Straßentabelle setzen.';
+
+
+-- B e r e c h t i g u n g e n
+-- ============================
+-- Analog "grant.sql"
+-- Die ALKIS-Navigation für Mapbender 2.7 und die Buchauskunft verwendet den DB-User "mb27"
+
+-- Tabellen der ALKIS-Struktur
+-- -----------------------------------------------------------------------
+
+  GRANT SELECT ON TABLE public.ap_pto TO mb27;
+
+  GRANT SELECT ON TABLE public.ax_anschrift TO mb27;
+  GRANT SELECT ON TABLE public.ax_bauraumoderbodenordnungsrecht TO mb27;
+  GRANT SELECT ON TABLE public.ax_besondereflurstuecksgrenze TO mb27;
+  GRANT SELECT ON TABLE public.ax_buchungsblatt TO mb27;
+  GRANT SELECT ON TABLE public.ax_buchungsblattbezirk TO mb27;
+  GRANT SELECT ON TABLE public.ax_buchungsstelle TO mb27;
+  GRANT SELECT ON TABLE public.ax_bundesland TO mb27;
+  GRANT SELECT ON TABLE public.ax_dienststelle TO mb27;
+  GRANT SELECT ON TABLE public.ax_flurstueck TO mb27;
+  GRANT SELECT ON TABLE public.ax_gebaeude TO mb27;
+  GRANT SELECT ON TABLE public.ax_gemarkung TO mb27;
+  GRANT SELECT ON TABLE public.ax_gemarkungsteilflur TO mb27;
+  GRANT SELECT ON TABLE public.ax_gemeinde TO mb27;
+  GRANT SELECT ON TABLE public.ax_historischesflurstueck TO mb27;
+  GRANT SELECT ON TABLE public.ax_historischesflurstueckohneraumbezug TO mb27;
+  GRANT SELECT ON TABLE public.ax_kreisregion TO mb27;
+  GRANT SELECT ON TABLE public.ax_lagebezeichnungkatalogeintrag TO mb27;
+  GRANT SELECT ON TABLE public.ax_lagebezeichnungmithausnummer TO mb27;
+  GRANT SELECT ON TABLE public.ax_lagebezeichnungmitpseudonummer TO mb27;
+  GRANT SELECT ON TABLE public.ax_lagebezeichnungohnehausnummer TO mb27;
+  GRANT SELECT ON TABLE public.ax_namensnummer TO mb27;
+  GRANT SELECT ON TABLE public.ax_person TO mb27;
+  GRANT SELECT ON TABLE public.ax_regierungsbezirk TO mb27;
+
+-- Tabellen der norGIS-Metadaten (Ersatz für Schlüssel-Tabellen )
+-- -----------------------------------------------------------------------
+
+  GRANT SELECT ON TABLE public.alkis_elemente TO mb27;
+  GRANT SELECT ON TABLE public.alkis_wertearten TO mb27;
+
+-- Tabellen des norGIS-PostProcessing  (Ersatz Classic-Post-Processing)
+-- -----------------------------------------------------------------------
+  -- Dies muss nach einer Datenbank-Aktualisierung neu berechtigt werden
+  GRANT SELECT ON TABLE public.gem_shl TO mb27;
+  GRANT SELECT ON TABLE public.gema_shl TO mb27;
+  GRANT SELECT ON TABLE public.nutz_21 TO mb27;
+  GRANT SELECT ON TABLE public.nutz_shl TO mb27;
+
+-- Views in der norGIS-Struktur, die Schlüssel-Tabellen ersetzen
+-- -----------------------------------------------------------------------
+--  Views werden nicht icht verwendet. 
+--  Es wird diekt die Tabelle "alkis_wertearten" benutzt.
+
+--GRANT SELECT ON TABLE public.v_andstrass_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_baurecht_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_bauteil_bauart TO mb27;
+--GRANT SELECT ON TABLE public.v_bewertg_klass TO mb27;
+--GRANT SELECT ON TABLE public.v_bs_buchungsart TO mb27;
+--GRANT SELECT ON TABLE public.v_bschaetz_bodenart TO mb27;
+--GRANT SELECT ON TABLE public.v_bschaetz_entsteh_klima TO mb27;
+--GRANT SELECT ON TABLE public.v_bschaetz_kulturart TO mb27;
+--GRANT SELECT ON TABLE public.v_bschaetz_sonst TO mb27;
+--GRANT SELECT ON TABLE public.v_bschaetz_zustandsstufe TO mb27;
+--GRANT SELECT ON TABLE public.v_datenerhebung TO mb27;
+--GRANT SELECT ON TABLE public.v_denkmal_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_forstrecht_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_forstrecht_besfkt TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_bauweise TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_dachform TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_dachgeschossausbau TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_funktion TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_lagezeo TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_weiterefkt TO mb27;
+--GRANT SELECT ON TABLE public.v_geb_zustand TO mb27;
+--GRANT SELECT ON TABLE public.v_grabloch_bedeutg TO mb27;
+--GRANT SELECT ON TABLE public.v_haeuser TO mb27;
+--GRANT SELECT ON TABLE public.v_klass_strass_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_klass_wasser_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_muster_merkmal TO mb27;
+--GRANT SELECT ON TABLE public.v_namnum_eigart TO mb27;
+--GRANT SELECT ON TABLE public.v_sbauwerk_bwfkt TO mb27;
+--GRANT SELECT ON TABLE public.v_sonstrecht_adf TO mb27;
+--GRANT SELECT ON TABLE public.v_umweltrecht_adf TO mb27;
+
+
+-- Berechtigung fuer Views
+-- -----------------------------------------------------------------------
+
+  -- Bausteine für andere Views
+  GRANT SELECT ON TABLE public.doppelverbindung TO mb27;
+  GRANT SELECT ON TABLE public.flst_an_strasse TO mb27;
+
+  -- alkis_export als CSV
+  GRANT SELECT ON TABLE public.exp_csv TO mb27;
+  GRANT SELECT ON TABLE public.exp_csv_str TO mb27;
+
+-- Ende --
Index: /trunk/info/conf/alkisn_conf.php
===================================================================
--- /trunk/info/conf/alkisn_conf.php	(revision 362)
+++ /trunk/info/conf/alkisn_conf.php	(revision 362)
@@ -0,0 +1,46 @@
+<?php
+/*	alkis_conf.php
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Zentrale Einstellungen - Test-Server
+	2016-02-18 Version fuer norGIS-ALKIS-Import
+*/
+
+//	Default Bundesland-Schlüssel, falls dieser bei Anfragen ausgelassen wird
+	$defland='05'; // NRW
+
+//	Datenbank-Zugangsdaten
+	$dbport = '5432';
+	$dbuser = 'mb27';
+	$dbpass = 'map27';
+	$dbpre  = 'alkisn'; // _N !
+
+	switch ($gkz) {		// Mandanten einzeln umstellen
+
+		// Fuer die folgenden GKZ eine Datenbank auf dem TEST-Server verwenden
+		case "150": 
+			$dbhost = 'localhost';
+			break;
+		case "rlp": 
+			$dbhost = 'localhost';
+			break;
+
+		// Fuer die restlichen GKZ eine Datenbank aus Produktion verwenden
+		default:
+			$dbhost = '10.0.100.73';  // Prod-DB
+		//	$dbhost = 'localhost';
+			break;
+	}
+
+
+//	Authentifizierung
+	$auth="mapbender";
+//	$auth=""; // temporär deaktiviert
+	$mapbender="/opt/gdi/mapbender/http/php/mb_validateSession.php";
+
+//	Link für Hilfe
+	$hilfeurl = 'http://skrzmaptest01.asp.krzwan.de/?Kartenwerke:ALKIS-Auskunft';
+
+//	Entwicklungsumgebung
+	$debug=3; // 0=Produktion
+
+?>
Index: /trunk/info/info/alkisn/alkisinlaybaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 362)
@@ -0,0 +1,93 @@
+<?php
+/*	alkisinlaybaurecht.php - Inlay fuer Template: Baurecht
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Ähnlich alkisbaurecht, aber nur Basisdaten, kein Footer und keine Flurstücks-Verschneidung.
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Bau-, Raum- oder Bodenordnungsrecht</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Gericht.ico">
+	<script type="text/javascript">
+	function imFenster(dieURL) {
+		var link = encodeURI(dieURL);
+		window.open(link,'','left=30,top=30,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
+	}
+	</script>
+	</script>
+</head>
+<body>
+
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+$sql ="SELECT r.ogc_fid, r.name, r.stelle, r.bezeichnung AS rechtbez, a.v AS adfbez, d.bezeichnung AS stellbez, round(st_area(r.wkb_geometry)::numeric,0) AS flae 
+FROM ax_bauraumoderbodenordnungsrecht r 
+LEFT JOIN alkis_wertearten a ON cast(r.artderfestlegung AS character varying)=a.k AND a.element='ax_bauraumoderbodenordnungsrecht' AND a.bezeichnung='artderfestlegung'
+LEFT JOIN ax_dienststelle d ON r.land=d.land AND r.stelle=d.stelle WHERE r.gml_id= $1 ;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Baurecht.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = ".$gmlid."</p>\n";}
+}
+echo "\n<h2><img src='ico/Gericht.png' width='16' height='16' alt=''> Bau-, Raum- oder Bodenordnungsrecht</h2>\n";
+
+if ($row = pg_fetch_array($res)) {
+	echo "\n<table>"
+		."\n<tr>"
+			."\n\t<td class='li'>Art der Festlegung:</td>\n\t<td>"
+			."<span class='wichtig'>".$row["adfbez"]."</span></td>"
+		."\n</tr>";
+		$enam=$row["name"];
+		if ($enam != "") {
+			echo "\n<tr>"
+				."\n\t<td class='li'>Eigenname des Gebietes:</td>\n\t<td>".$enam."</td>"
+			."\n</tr>";
+		}
+		echo "\n<tr>"
+			."\n\t<td class='li'>Verfahrensnummer:</td>\n\t<td>".$row["rechtbez"]."</td>"
+		."\n</tr>";
+		$stell=$row["stelle"];
+		if ($stell != "") {
+			echo "\n<tr>"
+				."\n\t<td class='li'>Dienststelle:</td>\n\t<td>".$row["stellbez"]."</td>"
+			."\n</tr>";
+		}
+		echo "\n<tr>"
+			."\n\t<td class='li'>Fl&auml;che:</td>";
+			$flae=number_format($row["flae"],0,",",".")." m&#178;";
+			echo "\n\t<td>".$flae."</td>"
+		."\n</tr>"
+	."\n</table>";
+} else {
+	echo "\n<p class='err'>Fehler! Kein Treffer bei gml_id=".$gmlid."</p>";
+}
+
+echo "\n<p class='nwlink'>"
+	."\n\t<a href='javascript:imFenster(\"alkisbaurecht.php?gkz=".$gkz."&amp;gmlid=".$gmlid."\")' "
+	."' title='Bau-, Raum- oder Bodenordnungsrecht'>Weitere Auskunft <img src='ico/Gericht.png' width='16' height='16' alt=''></a>"
+."\n</p>";
+
+?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisbaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisbaurecht.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisbaurecht.php	(revision 362)
@@ -0,0 +1,179 @@
+<?php
+/*	alkisbaurecht.php - Baurecht
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php"); // f. Footer
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Bau-, Raum- oder Bodenordnungsrecht</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Gericht.ico">
+</head>
+<body>
+
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// Spalte "a.d" ist immer leer
+$sql ="SELECT r.ogc_fid, r.artderfestlegung as adfkey, r.name, r.stelle, r.bezeichnung AS rechtbez, 
+a.v AS adfbez, d.bezeichnung AS stellbez, d.stellenart, wd.v, wd.d, round(st_area(r.wkb_geometry)::numeric,0) AS flae 
+FROM ax_bauraumoderbodenordnungsrecht r 
+LEFT JOIN alkis_wertearten a ON cast(r.artderfestlegung AS character varying)=a.k AND a.element='ax_bauraumoderbodenordnungsrecht' AND a.bezeichnung='artderfestlegung'
+LEFT JOIN ax_dienststelle d ON r.land=d.land AND r.stelle=d.stelle 
+LEFT JOIN alkis_wertearten wd ON cast(d.stellenart AS character varying)=wd.k AND wd.element='ax_dienststelle' AND wd.bezeichnung='stellenart'
+WHERE r.gml_id= $1 AND r.endet IS NULL AND d.endet IS NULL;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Baurecht.</p>\n";
+	if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sql."<br>$1 = ".$gmlid."</p>\n";}
+}
+
+if ($row = pg_fetch_array($res)) {
+	$artfest=$row["adfkey"];  // Art der Festlegung, Key
+	$verfnr=$row["rechtbez"]; // Verfahrens-Nummer
+	$enam=$row["name"];
+	$stellb=$row["stellbez"];
+	$stella=$row["stellenart"];
+
+	// Balken
+	echo "<p class='recht'>ALKIS Bau-, Raum- oder Bodenordnungsrecht ".$artfest."-".$verfnr."&nbsp;</p>\n";
+
+	echo "\n<h2><img src='ico/Gericht.png' width='16' height='16' alt=''> Bau-, Raum- oder Bodenordnungsrecht</h2>\n";
+
+	echo "\n<table>"
+		."\n<tr>"
+			."\n\t<td class='li'>Art der Festlegung:</td>\n\t<td>";
+			if ($showkey) {echo "<span class='key'>(".$artfest.")</span> ";}
+			echo "<span class='wichtig'>".$row["adfbez"]."</span></td>"
+		."\n</tr>";
+		if ($enam != "") {
+			echo "\n<tr>"
+				."\n\t<td class='li'>Eigenname des Gebietes:</td>"
+				."\n\t<td>".$enam."</td>"
+			. "\n</tr>";
+		}
+		if ($verfnr != "") {
+			echo "\n<tr>"
+				."\n\t<td class='li'>Verfahrensnummer:</td>"
+				."\n\t<td>".$verfnr."</td>"
+			."\n</tr>";
+		}
+		if ($stellb != "") { // z.B. Umlegung *mit* und Baulast *ohne* Dienststelle, darum bezirk testen
+			echo "\n<tr>"
+				."\n\t<td class='li'>Dienststelle:</td>\n\t<td>";
+					if ($showkey) {echo "<span class='key'>(".$row["stelle"].")</span> ";}
+					echo $stellb
+				."</td>"
+			."\n</tr>";
+			if ($stella != "") {
+				echo "\n<tr>"
+					."\n\t<td class='li'>Art der Dienststelle:</td>"
+					."\n\t<td>";
+						if ($showkey) {echo " <span class='key'>(".$stella.")</span>";}
+						echo "<span title='".$row["d"]."'>".$row["v"]."</span>"; 
+					echo "</td>"
+				."\n</tr>";
+			}
+		}
+		echo "\n<tr>"
+			."\n\t<td class='li'>Fl&auml;che:</td>";
+			$flae=number_format($row["flae"],0,",",".")." m&#178;";
+			echo "\n\t<td>".$flae."</td>"
+		."\n</tr>"
+	. "\n</table>";
+} else {
+	echo "\n<p class='err'>Fehler! Kein Treffer bei gml_id=".$gmlid."</p>";
+}
+
+echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> betroffene Flurst&uuml;cke</h2>\n"
+."\n<p>Ermittelt durch geometrische Verschneidung. Nach Gr&ouml;&szlig;e absteigend.</p>";
+
+$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, round(st_area(ST_Intersection(r.wkb_geometry,f.wkb_geometry))::numeric,1) AS schnittflae 
+FROM ax_flurstueck f, ax_bauraumoderbodenordnungsrecht r
+WHERE r.gml_id= $1 AND f.endet IS NULL AND r.endet IS NULL
+AND st_intersects(r.wkb_geometry,f.wkb_geometry) = true 
+AND st_area(st_intersection(r.wkb_geometry,f.wkb_geometry)) > 0.05 
+ORDER BY schnittflae DESC LIMIT 50;"; 
+// > 0.0 ist gemeint, Ungenauigkeit durch st_simplify
+// Limit: Flurbereinig. kann gross werden!
+// Trotz Limit lange Antwortzeit, wegen OrderBy -> intersection
+$v=array($gmlid);
+$res=pg_prepare("", $sql);
+$res=pg_execute("", $v);
+
+if (!$res) {
+	echo "\n<p class='err'>Keine Flurst&uuml;cke ermittelt.<br>\nSQL=<br></p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = ".$gmlid."</p>\n";}
+}
+
+echo "\n<table class='fs'>"
+	."\n<tr>"
+		."\n\t<td class='head' title='Flur- und Flurst&uuml;cksnummer'>Flurst&uuml;ck</td>"
+		."\n\t<td class='head fla' title='geometrische Schnittfl&auml;che'>Fl&auml;che</td>"
+		."\n\t<td class='head fla' title='amtliche Flurst&uuml;cksfl&auml;che, Buchfl&auml;che'>von</td>"
+		."\n\t<td class='head nwlink' title='Link zum Flurst&uuml;ck'>weitere Auskunft</td>"
+	."\n</tr>";
+
+	$fscnt=0;
+	while($row = pg_fetch_array($res)) {
+		$fscnt++;
+		echo "\n<tr>"
+			."\n\t<td>".$row["flurnummer"]."-<span class='wichtig'>".$row["zaehler"];
+				$nen=$row["nenner"];
+				if ($nen != "") {echo "/".$nen;}
+			echo "</span></td>"
+			."\n\t<td class='fla'>".$row["schnittflae"]." m&#178;</td>"
+			."\n\t<td class='fla'>".$row["amtlicheflaeche"]." m&#178;</td>"
+			."\n\t<td class='nwlink noprint'>"
+				."\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$row["gml_id"]."&amp;eig=n' "
+					."title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
+					."\n\t\t\t<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+				."\n\t\t</a>"
+			."\n\t</td>"
+		."\n</tr>";
+	}
+echo "\n</table>";
+
+if ($fscnt == 50) {
+	echo "<p>... und weitere Flurst&uuml;cke (Limit 50 erreicht).</p>";
+}
+
+pg_close($con);
+echo <<<END
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken" /></a>&nbsp;
+	</div>
+</form>
+END;
+
+footer($gmlid, $_SERVER['PHP_SELF']."?", "");
+
+?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisfshist.php
===================================================================
--- /trunk/info/info/alkisn/alkisfshist.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisfshist.php	(revision 362)
@@ -0,0 +1,307 @@
+<?php
+/*	Modul: alkisfshist.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Flurstuecks-Historie fuer ein Flurstueckskennzeichen aus ALKIS PostNAS
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+
+function fzerleg($fs) {
+/*	Flurstueckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
+	Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert 
+   ....*....1....*....2
+   ll    fff     nnnn
+     gggg   zzzzz    __
+*/
+	$fst=rtrim($fs,"_");	
+	$zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
+	$nenn=ltrim(substr($fst, 14), "0");
+	if ($nenn != "") {$zer.="/".$nenn;}
+	$zer.="</b>";
+	return $zer; 
+}
+
+function vornach($dbarr) {
+// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
+	global $gkz, $showkey;
+	if ($dbarr == "") {
+		echo "(keine)";
+	} else {
+		$stri=trim($dbarr, "{}");
+		//$arr = split(",",$stri);
+		$arr = explode(",",$stri);
+		foreach($arr AS $val){
+			echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
+			if ($showkey)   {echo "&amp;showkey=j";}
+			echo "'>".fzerleg($val)."</a><br>";
+		}
+	}
+	return 0;
+}
+
+function gemkg_name($gkey) {
+// Schluessel wird uebergeben, Name in DB nachschlagen
+	global $con;
+	$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
+	$v=array($gkey);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
+	$zgmk=0;
+	while($row = pg_fetch_array($res)) { // eigentlich nur EINE
+		$gmkg=$row["bezeichnung"];
+		$zgmk++;
+	}
+	if ($zgmk == 0) {
+		echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
+		return;
+	}
+	return $gmkg;
+}
+
+function such_vor_arr($fsk) {
+// Suchen der Vorgaenger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
+// Akt. FS hat keine Verweise auf Vorgaenger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
+// Problem: Dies sind Arrays, die nicht performant durchsucht werden koennen.
+	global $gkz, $con, $debug;
+
+	$wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
+
+	// Bei kleinere Datenbanken keine spÃŒrbare VerzÃ¶gerung bei Suche mit " = ANY(Array)"
+	// FÃŒr grosse BestÃ€nde zusÃ€tzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
+	// Dazu die nÃ€chsten 2 Zeilen aktivieren.	
+//	$wherecl.="AND gemarkungsnummer=".substr($fsk, 2, 4)." ";
+//	$wherecl.="AND flurnummer=".ltrim(substr($fsk, 6, 3), "0")." ";
+	// Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
+
+	$sqlv="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl
+	."UNION SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl
+	."ORDER BY flurstueckskennzeichen";
+
+	$v=array($fsk);
+	$resv = pg_prepare("", $sqlv);
+	$resv = pg_execute("", $v);
+	if (!$resv) {
+		echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
+	}
+	$zv=0;
+	while($rowv = pg_fetch_array($resv)) {
+		$ftyp=$rowv["ftyp"];
+		$gmlv=$rowv["gml_id"];
+		$vfsk=$rowv["flurstueckskennzeichen"];
+		echo "Flurst&uuml;ck <a title='Historie des Vorg&auml;ngerflurst&uuml;cks' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$vfsk."&amp;gmlid=".$gmlv;
+			if ($showkey)   {echo "&amp;showkey=j";}
+		echo "'>".fzerleg($vfsk)."</a><br>";
+		$zv++;
+	}
+	if ($zv == 0) {echo "(keine)";}
+	return;
+}
+
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Flurst&uuml;cks-Historie</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// Such-Parameter bekommen? Welche?
+if ($gmlid != "") { // Ja, die GML wurde uebergeben
+	$parmtyp="GML";
+	$parmval=$gmlid;
+	$whereclause="WHERE gml_id= $1 ";
+	$v = array($gmlid);
+} else {	// Alternativ: Flurst.-Kennz. uebergeben
+	if ($fskennz != "") {
+		$parmtyp="Flurst&uuml;ckskennzeichen";
+		$parmval=$fskennz;
+		$whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
+		$v = array($fskennz);
+	} else { // Pfui!
+		$parmtyp="";
+		echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
+	}
+}
+
+if ($parmtyp != "") { // einer der beiden erlaubten FÃ€lle
+	// UNION-Abfrage auf 3Ã€hnliche Tabellen, darin aber immer nur 1 Treffer.
+	// noGIS: unterschiedliche Formate der gleichen Spalten, Typumwandlung "cast" verwenden.
+
+	$felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
+
+	$sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" FROM ax_flurstueck f ".$whereclause." AND f.endet IS NULL "
+	."UNION SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueck h ".$whereclause." AND h.endet IS NULL "
+	."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueckohneraumbezug o ".$whereclause." AND o.endet IS NULL;";
+
+	$resu = pg_prepare("", $sqlu);
+	$resu = pg_execute("", $v);
+	if ($rowu = pg_fetch_array($resu)) {
+		$ftyp=$rowu["ftyp"];
+		$gmkgnr=$rowu["gemarkungsnummer"];
+		$flurnummer=$rowu["flurnummer"];
+		$zaehler=$rowu["zaehler"];
+		$nenner=$rowu["nenner"];
+		$flstnummer=$zaehler;
+		if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
+		$fskenn=$rowu["flurstueckskennzeichen"];
+		$flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
+		$name=$rowu["name"]; // in DB ein Array
+		$arrn=explode(",", trim($name, "{}") ); // PHP-Array 
+		$gemkname= gemkg_name($gmkgnr);
+		$entsteh=$rowu["zeitpunktderentstehung"];
+		$vor=$rowu["vor"];
+		$nach=$rowu["nach"];
+		if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fuer selbst-link-Umschalter ueber footer
+	} else {
+		if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
+	}
+}
+
+switch ($ftyp) { // Unterschiede Hist./Aktuell
+	case 'a': 
+		$wert = "aktuell";
+		$ico= "Flurstueck.png";
+		$cls= "kennzfs";	
+	break;
+	case 'h': 
+		$wert = "historisch<br>(mit Raumbezug)";
+		$ico= "Flurstueck_Historisch.png"; //
+		$cls= "kennzfsh";
+	break;
+	case 'o': 
+		$wert = "historisch<br>ohne Raumbezug";
+		$ico= "Flurstueck_Historisch_oR.png";
+		$cls= "kennzfsh";
+	break;
+	default:
+		$wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
+		$ico= "Flurstueck_Historisch.png";
+		$cls= "kennzfsh";
+	break;
+}
+
+// Balken
+echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
+echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
+
+echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
+	// darin Tabelle Kennzeichen
+	echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>"
+		."\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>"
+		."\n\t<tr>\n\t\t<td title='Gemarkung'>";
+		if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
+		echo $gemkname."&nbsp;</td>"
+		."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
+		."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
+	."\n\t</table>"
+."\n\t</td>\n\t<td>"; // rechte Seite
+	// FS-Daten 2 Spalten
+	echo "\n\t<table class='fsd'>"
+		."\n\t<tr>\n\t\t<td>Entstehung</td>"
+			."\n\t\t<td>".$entsteh."</td>"
+		."\n\t</tr>\n\t<tr>"
+			."\n\t\t<td>letz. Fortf</td>"
+			."\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
+				foreach($arrn AS $val) { // Zeile f. jedes Element
+					echo trim($val, '"')."<br>";
+				}
+			echo "</td>"
+		."\n\t</tr>"
+	."\n\t</table>"
+."\n\t</td>\n</tr>\n</table>";
+
+if ($ftyp == "a") { // Aktuell -> Historie
+	echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
+		echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
+			if ($showkey)   {echo "&amp;showkey=j";}
+			echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
+			echo "<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>";
+		echo "</a>";
+}
+echo "\n<hr>";
+
+echo "<table class='outer'>"
+	."\n<tr>
+		<td class='head'>Flurst&uuml;ck</td>
+		<td class='head'>Vorg&auml;nger</td>
+		<td class='head'>Nachfolger</td>
+	</tr>"; // Head
+	
+	// Spalte 1: F l u r s t ÃŒ c k
+	echo "\n<tr>\n\t<td>"
+		."<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert
+		."<br>Fl&auml;che <span class='flae'>".$flae."</span>"
+	."</td>";
+
+	// Spalte 2: V o r g Ã€ n g e r
+	echo "\n\t<td>";
+	switch ($ftyp) { // Unterschiede Historisch/Aktuell
+		case 'a':
+			such_vor_arr($fskenn);
+		break;
+		case 'h':
+			if ($vor == "") {
+				echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
+			} else {
+				vornach($vor);
+			}
+		break;
+		case 'o':
+			vornach($vor);
+		break;
+	}
+	echo"</td>";
+
+	// Spalte 3: N a c h f o l g e r
+	echo "\n\t<td>";
+		vornach($nach);
+	echo "</td>\n</tr>"
+."\n</table>";
+
+if ($debug > 1) {
+	$z=1;
+	while($rowu = pg_fetch_array($resu)) {
+		$ftyp=$rowu["ftyp"];
+		echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
+		$z++;
+	}
+}
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkishaus.php
===================================================================
--- /trunk/info/info/alkisn/alkishaus.php	(revision 362)
+++ /trunk/info/info/alkisn/alkishaus.php	(revision 362)
@@ -0,0 +1,332 @@
+<?php
+/*	alkishaus.php - viele Daten zu EINEM ALKIS-GebÃ€ude-Objekt
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+
+	ToDo:
+	- sinnvolle Sortierung und Gruppierung der Felder
+	- geometrische Suche nach FS, auf denen das Haus steht
+	- Template im WMS auf Ebene GebÃ€ude hierhin verknÃŒpfen.
+	- Auch diese Relationen abbilden:
+		ax_gebaeude >gehoertZu> ax_gebaeude  (ringfÃ¶rmige Verbindung GebÃ€udekomplex)
+		ax_gebaeude (umschliesst) ax_bauteil
+		ax_gebaeude >gehoert> ax_person  (Ausnahme)
+*/
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+if ($allfld == "j") {$allefelder=true;} else {$allefelder=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Daten zum Haus</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// G e b a e u d e
+// ++ auch .d-Spalten der alkis_werte? 
+$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, g.anzahlderunterirdischengeschosse AS aug, 
+g.lagezurerdoberflaeche, g.dachgeschossausbau, g.zustand, array_to_string(g.weiteregebaeudefunktion, ',') AS wgf, g.dachform, g.hochhaus, g.objekthoehe, g.geschossflaeche, g.grundflaeche, g.umbauterraum, g.baujahr, g.dachart, g.qualitaetsangaben, 
+h.v bbauw, u.v AS bfunk, z.v AS zustandv, d.v AS bdach, a.v AS dgaus, o.v AS oflv,
+round(st_area(g.wkb_geometry)::numeric,2) AS gebflae FROM ax_gebaeude g 
+LEFT JOIN alkis_wertearten h ON cast(g.bauweise AS character varying)=h.k AND h.element='ax_gebaeude' and h.bezeichnung='bauweise'
+LEFT JOIN alkis_wertearten u ON cast(g.gebaeudefunktion AS character varying)=u.k AND u.element='ax_gebaeude' and u.bezeichnung='gebaeudefunktion'
+LEFT JOIN alkis_wertearten z ON cast(g.zustand AS character varying)=z.k AND z.element='ax_gebaeude' AND z.bezeichnung='zustand'
+LEFT JOIN alkis_wertearten d ON cast(g.dachform AS character varying)=d.k AND d.element='ax_gebaeude' AND d.bezeichnung='dachform'
+LEFT JOIN alkis_wertearten a ON cast(g.dachgeschossausbau AS character varying)=a.k AND a.element='ax_gebaeude' AND a.bezeichnung='dachgeschossausbau'
+LEFT JOIN alkis_wertearten o ON cast(g.lagezurerdoberflaeche AS character varying)=o.k AND o.element='ax_gebaeude' AND o.bezeichnung='lagezurerdoberflaeche'
+WHERE g.gml_id= $1 AND g.endet IS NULL;";
+
+$v = array($gmlid);
+$resg = pg_prepare("", $sqlg);
+$resg = pg_execute("", $v);
+if (!$resg) {
+	echo "\n<p class='err'>Fehler bei Geb&auml;ude.<br>".pg_last_error()."</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+// Balken
+echo "<p class='geb'>ALKIS Haus ".$gmlid."&nbsp;</p>\n"; // ++ Kennzeichen?
+
+echo "\n<h2><img src='ico/Haus.png' width='16' height='16' alt=''> Haus (Geb&auml;ude)</h2>\n";
+
+// Kennzeichen in Rahmen 
+// - Welches Kennzeichen zum Haus ?
+echo "\n<hr>";
+// Umschalter: auch leere Felder ausgeben?
+echo "<p class='nwlink noprint'>";
+echo "<a class='nwlink' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;gmlid=".$gmlid;
+	if ($showkey) {echo "&amp;showkey=j";} else {echo "&amp;showkey=n";}
+	if ($allefelder) {echo "&amp;allfld=n'>nur Felder mit Inhalt";} 
+	else {echo "&amp;allfld=j'>auch leere Felder";}
+echo "</a></p>";
+
+while($rowg = pg_fetch_array($resg)) { // Schleife, kann aber nur EIN Haus sein.
+	$gebnr++;
+	echo "\n<table class='geb'>"
+	."\n<tr>\n"
+		."\n\t<td class='head' title=''>Attribut</td>"
+		."\n\t<td class='head' title=''>Wert</td>"
+	."\n</tr>";
+
+	$aog=$rowg["aog"];
+	$aug=$rowg["aug"];
+	$hoh=$rowg["hochhaus"];
+	$nam=$rowg["name"]; // Gebaeude-Name
+	$bfunk=$rowg["bfunk"];
+
+	$baw=$rowg["bauweise"];
+	$bbauw=$rowg["bbauw"];
+
+	$ofl=$rowg["lagezurerdoberflaeche"]; // Key
+	$oflv=$rowg["oflv"]; // Value
+
+	$dga=$rowg["dachgeschossausbau"]; // Key
+	$dgav=$rowg["dgaus"]; // Value
+
+	$zus=$rowg["zustand"]; // Key
+	$zusv=$rowg["zustandv"]; // Value
+
+	$wgf=$rowg["wgf"]; // Array-> kommagetrennte Liste
+
+	$daf=$rowg["dachform"]; // Key
+	$dach=$rowg["bdach"]; // Value
+
+	$hho=$rowg["objekthoehe"];
+	$gfl=$rowg["geschossflaeche"];
+	$grf=$rowg["grundflaeche"];
+	$ura=$rowg["umbauterraum"];
+	$bja=$rowg["baujahr"];
+	$daa=$rowg["dachart"];
+	$qag=$rowg["qualitaetsangaben"];
+
+	if (($nam != "") OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Name\" ist der Eigenname oder die Bezeichnung des Geb&auml;udes.'>Name</td>"
+			."\n\t<td>".$nam."</td>"
+		."\n</tr>";
+	}
+
+	// 0 bis N   L a g e bezeichnungen mit Haus- oder Pseudo-Nummer
+
+	// HAUPTgebÃ€ude
+	$sqll ="SELECT 'm' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer FROM ax_gebaeude g
+	JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf)
+	JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
+	WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL";
+	// oder NEBENgebÃ€ude
+	$sqll.=" UNION 
+	SELECT 'p' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer
+	FROM ax_gebaeude g
+	JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat
+	JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
+	WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL ";
+
+	$sqll.="ORDER BY bezeichnung, hausnummer ;";
+
+	$v = array($gmlid);
+	$resl = pg_prepare("", $sqll);
+	$resl = pg_execute("", $v);
+	if (!$resl) {
+		echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>\n";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	}
+	$zhsnr=0;
+	while($rowl = pg_fetch_array($resl)) { // LOOP: Lagezeilen
+		$zhsnr++;
+		$ltyp=$rowl["ltyp"]; // Lagezeilen-Typ
+		$skey=$rowl["lage"]; // Str.-Schluessel
+		$snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); // -Name
+		$hsnr=$rowl["hausnummer"];
+		$hlfd=$rowl["laufendenummer"];
+		$gmllag=$rowl["gmllag"];
+
+		if ($zhsnr == 1) {
+			echo "\n<tr>\n\t<td title='Lage mit Hausnummer oder Pseudonummer'>Adresse</td>";
+			echo "\n\t<td>";
+		}
+		echo "\n\t\t<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''>&nbsp;";
+		if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}			
+		echo "\n\t\t<a title='Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp."'>";
+			echo $snam."&nbsp;".$hsnr;
+			if ($ltyp == "p") { echo ", lfd.Nr ".$hlfd;}
+		echo "</a><br>";
+	} // Ende Loop Lagezeilen m.H.
+	if ($zhsnr > 0) {echo "\n\t</td>\n</tr>";}
+
+	echo "\n<tr>"
+		."\n\t<td title='\"Geb&auml;udefunktion\" ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>"
+		."\n\t<td>";
+		if ($showkey) {echo "<span class='key'>".$rowg["gebaeudefunktion"]."</span>&nbsp;";}
+		echo $bfunk."</td>"
+	."\n</tr>";
+	if ($baw != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Bauweise\" ist die Beschreibung der Art der Bauweise.'>Bauweise</td>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$baw."</span>&nbsp;";}
+			echo $bbauw."</td>"
+		. "\n</tr>";
+	}
+	if ($aog != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='Anzahl oberirdischer Geschosse'>Geschosse</td>"
+			. "\n\t<td>".$aog."</td>"
+		. "\n</tr>";
+	}
+	if ($aug != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='Anzahl unterirdischer Geschosse'>U-Geschosse</td>"
+			. "\n\t<td>".$aug."</td>"
+		. "\n</tr>";
+	}
+	if ($hoh != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Hochhaus\" ist ein Geb&auml;ude, das nach Geb&auml;udeh&ouml;he und Auspr&auml;gung als Hochhaus zu bezeichnen ist. F&uuml;r Geb&auml;ude im Geschossbau gilt dieses i.d.R. ab 8 oberirdischen Geschossen, f&uuml;r andere Geb&auml;ude ab einer Geb&auml;udeh&ouml;he von 22 m.'>Hochhaus</td>";
+			echo "\n\t<td>".$hoh."</td>";
+		echo "\n</tr>";
+	}
+	if ($ofl != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Lage zur Erdoberfl&auml;che\" ist die Angabe der relativen Lage des Geb&auml;udes zur Erdoberfl&auml;che. Diese Attributart wird nur bei nicht ebenerdigen Geb&auml;uden gef&uuml;hrt.'>Lage zur Erdoberfl&auml;che</td>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$ofl."</span>&nbsp;";}
+			echo $oflv;"</td>"
+		."\n</tr>";
+	}
+	if ($dga != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Dachgeschossausbau\" ist ein Hinweis auf den Ausbau bzw. die Ausbauf&auml;higkeit des Dachgeschosses.'>Dachgeschossausbau</td>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$dga."</span>&nbsp;";}
+			echo $dgav."</td>"
+		."\n</tr>";
+	}
+	if ($zus != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Zustand\" beschreibt die Beschaffenheit oder die Betriebsbereitschaft von \"Geb&auml;ude\". Diese Attributart wird nur dann optional gef&uuml;hrt, wenn der Zustand des Geb&auml;udes vom nutzungsf&auml;higen Zustand abweicht.'>Zustand</td>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$zus."</span>&nbsp;";}
+			echo $zusv."</td>"
+		."\n</tr>";
+	}
+	// Suche Testfall: SELECT * FROM ax_gebaeude WHERE NOT weiteregebaeudefunktion IS NULL;
+	// Keiner zu finden. Das folgende ungetestet:
+	if ($wgf != "" OR $allefelder) { // "weiteregebaeudefunktion" ist ein Array
+		echo "\n<tr>"
+			."\n\t<td title='\"Weitere Geb&auml;udefunktion\" ist die Funktion, die ein Geb&auml;ude neben der dominierenden Geb&auml;udefunktion hat.'>Weitere Geb&auml;udefunktionen</td>\n\t<td>";
+			if ($wgf != "") { // Kommagetrennte Liste aus Array
+				$sqlw="SELECT k, v, d FROM alkis_wertearten WHERE k IN ( $1 ) AND element='ax_gebaeude' AND bezeichnung='weiteregebaeudefunktion' ORDER BY k;";
+				$v = array($wgf);
+				$resw = pg_prepare("", $sqlw);
+				$resw = pg_execute("", $v);
+				if (!$resw) {
+					echo "\n<p class='err'>Fehler bei Geb&auml;ude - weitere Funktion.</p>\n";
+					if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlw."<br>$1 = Werteliste = '".$wgf."'</p>";}
+				}
+				$zw=0;
+				while($roww = pg_fetch_array($resw)) { // LOOP: w.Funktion
+					if ($zw > 0) {echo "<br>";}
+					if ($showkey) {echo "<span class='key'>".$roww["k"]."</span>&nbsp;";}
+					echo "<span title='".$roww["d"]."'>".$roww["v"]."</span>";
+					$zw++;
+			   }
+			}
+			echo "</td>"
+		."\n</tr>";
+	}
+	if ($daf != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Dachform\" beschreibt die charakteristische Form des Daches.'>Dachform</td>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$daf."</span>&nbsp;";}
+			echo $dach."</td>"
+		."\n</tr>";
+	}
+	if ($hho != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Objekth&ouml;he\" ist die H&ouml;hendifferenz in [m] zwischen dem h&ouml;chsten Punkt der Dachkonstruktion und der festgelegten Gel&auml;ndeoberfl&auml;che des Geb&auml;udes.'>Objekth&ouml;he</td>"
+			."\n\t<td>".$hho."</td>"
+		."\n</tr>";
+	}
+	if ($gfl != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Geschossfl&auml;che\" ist die Geb&auml;udegeschossfl&auml;che in [qm].'>Geschossfl&auml;che</td>"
+			."\n\t<td>";
+			if ($gfl != "") {echo $gfl." m&#178;";}
+			echo "</td>"
+		."\n</tr>";
+	}
+	if ($grf != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Grundfl&auml;che\" ist die Geb&auml;udegrundfl&auml;che in [qm].'>Grundfl&auml;che</td>"
+			."\n\t<td>";
+			if ($grf != "") {echo $grf." m&#178;";}
+		echo "\n</tr>";
+	}
+	if ($ura != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Umbauter Raum\" ist der umbaute Raum [Kubikmeter] des Geb&auml;udes.'>Umbauter Raum</td>"
+			."\n\t<td>".$ura."</td>"
+		."\n</tr>";
+	}
+	if ($bja != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Baujahr\" ist das Jahr der Fertigstellung oder der baulichen Ver&auml;nderung des Geb&auml;udes.'>Baujahr</td>"
+			."\n\t<td>".$bja."</td>"
+		."\n</tr>";
+	}
+	if ($daa != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='\"Dachart\" gibt die Art der Dacheindeckung (z.B. Reetdach) an.'>Dachart</td>"
+			."\n\t<td>".$daa."</td>"
+		."\n</tr>";
+	}
+	if ($qag != "" OR $allefelder) {
+		echo "\n<tr>"
+			."\n\t<td title='Angaben zur Herkunft der Informationen (Erhebungsstelle). Die Information ist konform zu den Vorgaben aus ISO 19115 zu repr&auml;sentieren.'>Qualit&auml;tsangaben</td>"
+			."\n\t<td>".$qag."</td>"
+		."\n</tr>";
+	}
+	echo "\n</table>";
+}
+if ($gebnr == 0) {echo "<p class='err'><br>Kein Geb&auml;ude gefunden<br>&nbsp;</p>";}
+
+// ++ ToDo: Verschnitt mit FS?
+
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisinlayausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlayausk.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisinlayausk.php	(revision 362)
@@ -0,0 +1,260 @@
+<?php
+/*	alkisinlayausk.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Dies Programm wird in einen iFrame im Mapserver-Template (FeatureInfo) geladen.
+	Parameter: &gkz, &gml_id
+	Dies Programm gibt einen kurzen Ueberblick zum Flurstueck, z.B. Eigentuemer ohne Adresse.
+	FÃŒr detaillierte Angaben wird zum GB- oder FS-Nachweis verlinkt.
+	Dies ist eine Variante von alkisausk.php welches als vollstaendige Seite aufgerufen wird.
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$gmlid = isset($_GET["gmlid"]) ? $_GET["gmlid"] : 0;
+echo <<<END
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck.ico">
+	<title>ALKIS-Auskunft</title>
+	<script type="text/javascript">
+	function imFenster(dieURL) {
+		var link = encodeURI(dieURL);
+		window.open(link,'','left=10,top=10,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
+	}
+	</script>
+</head>
+<body>
+END;
+$con = pg_connect("host=".$dbhost." port=".$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) {echo "<br>Fehler beim Verbinden der DB.\n<br>";}
+
+// *** F L U R S T U E C K ***
+$sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung 
+FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+WHERE f.gml_id= $1 AND f.endet IS NULL ;";
+// Weiter joinen: g.stelle -> ax_dienststelle "Katasteramt"
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Flurstuecksdaten.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if ($row = pg_fetch_array($res)) {
+	$gemkname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+	$gmkgnr=$row["gemarkungsnummer"];
+	$flurnummer=$row["flurnummer"];
+	$flstnummer=$row["zaehler"];
+	$nenner=$row["nenner"];
+	if ($nenner > 0) $flstnummer.="/".$nenner; // BruchNr
+	$flae=$row["amtlicheflaeche"];
+	$flae=number_format($flae,0,",",".") . " m&#178;";
+} else {
+	echo "<p class='err'>Kein Treffer fuer gml_id=".$gmlid."</p>";
+	//if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck - &Uuml;bersicht</h2>";
+
+echo "\n<table class='outer'>\n<tr>\n<td>"
+	."\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>"
+	."\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>"
+	."\n\t<tr>\n\t\t<td title='Gemarkung'>".$gemkname."</td>"
+	."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
+	."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
+	."\n\t</table>"
+."\n</td>\n<td>"
+."\n\t<p class='nwlink'>weitere Auskunft:<br>";
+
+// FlurstÃŒcksnachweis (mit EigentÃŒmer)
+echo "\n\t\t<a href='javascript:imFenster(\"alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=j\")' "
+	."title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck&nbsp;"
+	."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+."</a><br>";
+
+// FS-Historie
+echo "\n\t\t<a href='javascript:imFenster(\"alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid."\")' "
+	."title='Vorg&auml;nger des Flurst&uuml;cks'>Historie&nbsp;"
+	."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
+."</a><br>";
+
+// Gebaeude-NW zum FS
+echo "\n\t\t<a href='javascript:imFenster(\"alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."\")' "
+	."title='Geb&auml;udenachweis'>Geb&auml;ude&nbsp;"
+	."<img src='ico/Haus.png' width='16' height='16' alt=''>"
+."</a>";
+
+echo "\n\t</p>\n</td>";
+pg_free_result($res);
+
+// Lage MIT HausNr (Adresse)
+$sql ="SELECT DISTINCT s.gml_id AS kgml, l.gml_id, s.bezeichnung, l.hausnummer 
+FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)
+JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL 
+ORDER BY s.bezeichnung, l.hausnummer;";
+
+$v=array($gmlid); // id FS
+$res=pg_prepare("", $sql);
+$res=pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer.</p>";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$j=0;
+$kgmlalt='';
+while($row = pg_fetch_array($res)) {
+	$sname = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
+	echo "\n<tr>\n\t\n\t<td class='lr'>".$sname."&nbsp;".$row["hausnummer"]."</td>"
+	."\n\t<td>\n\t\t<p class='nwlink noprint'>";
+	$kgml=$row["kgml"]; // Wiederholung vermeiden
+	if ($kgml != $kgmlalt) { // NEUE Strasse vor Lage
+		$kgmlalt=$kgml; // Katalog GML-ID
+		echo "\n\t\t\t<a title='Flurst&uuml;cke an der Stra&szlig;e' "
+		."href='javascript:imFenster(\"alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$row["kgml"]."\")'>Stra&szlig;e "
+		."<img src='ico/Strassen.png' width='16' height='16' alt='STRA'></a>";
+	}
+		echo "\n\t\t\t<a title='Lagebezeichnung mit Hausnummer' "
+		."href='javascript:imFenster(\"alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"]."\")'>Lage "
+		."<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt='HAUS'></a>&nbsp;"
+	."\n\t\t</p>\n\t</td>\n</tr>";
+	$j++;
+}
+pg_free_result($res);
+if ($j == 0) { // keine HsNr gefunden
+	// Lage OHNE HausNr
+	$sql="SELECT DISTINCT s.gml_id AS kgml, l.gml_id, s.bezeichnung, l.unverschluesselt 
+	FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf)
+	LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+	WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ORDER BY s.bezeichnung;";
+
+	$v=array($gmlid);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer.</p>";
+		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	}
+	while($row = pg_fetch_array($res)) {
+		$sname =htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
+		$gewann=htmlentities($row["unverschluesselt"], ENT_QUOTES, "UTF-8");
+		echo "\n<tr>";
+		if ($sname != "") { // Typ=Strasse
+			echo "\n\t<td class='lr' title='An Stra&szlig;e aber ohne Hausnummer'>".$sname."&nbsp;</td>";
+			$ico="Lage_an_Strasse.png";
+		} else {
+			echo "\n\t<td class='lr' title='Gewanne'>".$gewann."&nbsp;</td>";
+			$ico="Lage_Gewanne.png";
+		}
+		echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+		$kgml=$row["kgml"]; // Wiederholung vermeiden
+		if ($kgml != $kgmlalt) { // NEUE Strasse vor Lage-O
+			$kgmlalt=$kgml; // Katalog GML-ID
+			echo "\n\t\t\t<a title='Flurst&uuml;cke an der Stra&szlig;e' "
+			."href='javascript:imFenster(\"alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$row["kgml"]."\")'>Stra&szlig;e "
+			."<img src='ico/Strassen.png' width='16' height='16' alt='STRA'></a>";
+		}
+		echo "\n\t\t\t<a title='Lagebezeichnung ohne Hausnummer' "
+		."href='javascript:imFenster(\"alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$row["gml_id"]."\")'>Lage "
+		."<img src='ico/".$ico."' width='16' height='16' alt='OHNE'></a>&nbsp;"
+		."\n\t\t</p>\n\t</td>\n</tr>";
+	}
+	pg_free_result($res);
+}
+echo "\n</table>\n";
+
+// Flurstuecksflaeche
+echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".$flae."</b></p>\n";
+
+// *** G R U N D B U C H ***
+echo "\n<h2><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundbuch</h2>";
+
+// FS >istgebucht> GS >istbestandteilvon> GB.
+$sql ="SELECT b.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, 
+s.gml_id AS s_gml, s.buchungsart, s.laufendenummer, s.zaehler, s.nenner, z.bezeichnung, wa.v AS blattartv, wb.v AS bart 
+FROM ax_flurstueck f 
+JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id 
+JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id
+LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk 
+LEFT JOIN alkis_wertearten wa ON cast(b.blattart AS character varying)=wa.k AND wa.element='ax_buchungsblatt' AND wa.bezeichnung='blattart'
+LEFT JOIN alkis_wertearten wb ON cast(s.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart'
+WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL 
+ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;";
+
+$v=array($gmlid);
+$resg=pg_prepare("", $sql);
+$resg=pg_execute("", $v);
+if (!$resg) {
+	echo "\n<p class='err'>Keine Buchungen.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+while($rowg = pg_fetch_array($resg)) {
+	$beznam=$rowg["bezeichnung"];
+	echo "\n<hr>\n<table class='outer'>\n<tr>\n<td>";
+		$blattkey=$rowg["blattart"]; // Key
+		$blattart=$rowg["blattartv"]; // Value
+
+		if ($blattkey == 1000) {
+			echo "\n\t<table class='kennzgb' title='Bestandskennzeichen'>";
+		} else {
+			echo "\n\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
+		}
+			echo "\n\t<tr>"
+				."\n\t\t<td class='head'>Bezirk</td>"
+				."\n\t\t<td class='head'>".$blattart."</td>"
+				."\n\t\t<td class='head'>Lfd-Nr,</td>"
+				."\n\t\t<td class='head'>Buchungsart</td>"
+			."\n\t</tr>\n\t<tr>"
+				."\n\t\t<td title='Grundbuchbezirk'>".$beznam."</td>"
+				."\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$rowg["blatt"]."</span></td>"
+				."\n\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$rowg["laufendenummer"]."</td>"
+				."\n\t\t<td title='Buchungsart'>".$rowg["bart"]."</td>"
+			."\n\t</tr>"
+		."\n\t</table>";
+
+		if ($rowg["zaehler"] <> "") {
+			echo "\n<p class='ant'>".$rowg["zaehler"]."/".$rowg["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
+		}
+		echo "\n</td>\n<td>"
+		."\n\t<p class='nwlink'>weitere Auskunft:<br>"
+			."\n\t\t<a href='javascript:imFenster(\"alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$rowg[0]."\")' "
+				."title='Grundbuchnachweis'>".$blattart." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
+			."</a>"
+		."\n\t</p>"
+	."\n</td>\n</tr>\n</table>";
+
+	// E I G E N T U E M E R
+	if ($blattkey == 5000) { // Schluessel Blattart
+		echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt</p>\n"
+		."\n<p>Siehe weitere Grundbuchbl&auml;tter mit Rechten an dem fiktiven Blatt.</p>\n";
+	} else {// kein Eigent. bei fiktiv. Blatt
+		echo "\n\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>\n";
+
+		// Ausgabe Name in Function
+		$n = eigentuemer($con, $rowg["gml_id"], false, "imFenster"); // ohne Adressen
+
+		if ($n == 0) { // keine NamensNr, kein Eigentuemer
+			echo "\n<p class='err'>Keine Eigent&uuml;mer gefunden.</p>"
+			."\n<p class='err'>Bezirk ".$rowg["bezirk"]." Blatt ".$rowg["blatt"]." Blattart ".$blattkey." (".$blattart.")</p>";
+		}
+	}
+}
+pg_free_result($resg);
+
+?>
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisbestnw.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisbestnw.php	(revision 362)
@@ -0,0 +1,440 @@
+<?php
+/*	Modul: alkisbestnw.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Bestandsnachweis fÃŒr ein Grundbuch aus ALKIS PostNAS
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Bestandsnachweis</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Grundbuch.ico">
+	<script type="text/javascript">
+		function ALKISexport() {
+			window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=grundbuch&gmlid=".$gmlid."'"; ?>);
+		}
+	</script>
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+$con = pg_connect("host=".$dbhost." port=".$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// G R U N D B U C H
+$sql="SELECT g.gml_id, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung AS nr, g.blattart, wb.v AS blattartv, wb.d AS blattartd, 
+b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.v AS stellev 
+FROM ax_buchungsblatt g 
+LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk 
+LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.stelle=d.stelle 
+LEFT JOIN alkis_wertearten wb ON cast(g.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart'
+LEFT JOIN alkis_wertearten wd ON cast(d.stellenart AS character varying)=wd.k AND wd.element='ax_dienststelle' AND wd.bezeichnung='stellenart'
+WHERE g.gml_id= $1 AND g.endet IS NULL AND d.endet IS NULL;";
+// .. AND d.stellenart=1000 
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Grundbuchdaten.</p>";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+if ($row = pg_fetch_array($res)) {
+	$blattkey=$row["blattart"];
+	$blattart=$row["blattartv"];
+
+	echo "<p class='gbkennz'>ALKIS Bestand ".$row["bezirk"]." - ".$row["nr"]."&nbsp;</p>\n"; // Balken
+	echo "\n<h2><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Grundbuch</h2>"
+	."\n<table class='outer'>\n<tr>\n\t<td>"; // Kennz. im Rahmen
+		if ($blattkey == 1000) {
+			echo "\n\t<table class='kennzgb' title='Bestandskennzeichen'>";
+		} else {
+			echo "\n\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
+		}
+			echo "\n\t<tr>"
+				."\n\t\t<td class='head'>"; // .d nicht gefÃŒllt
+				if ($showkey) {echo "<span class='key'>".$row["stellenart"]."&nbsp;</span>";}
+				echo $row["stellev"]."</td>";
+				echo "\n\t\t<td class='head'>Bezirk</td>"
+				."\n\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>";
+				if ($showkey) {echo "<span class='key'>".$blattkey."&nbsp;</span>";}
+				echo $blattart."</td>"
+			."\n\t</tr>\n\t<tr>"
+				."\n\t\t<td title='Amtsgerichtsbezirk'>";
+				if ($showkey) {echo "<span class='key'>".$row["stelle"]."</span><br>";}
+				echo htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>"
+				."\n\t\t<td title='Grundbuchbezirk'>";
+				if ($showkey) {echo "<span class='key'>".$row["bezirk"]."</span><br>";}
+				echo htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>"
+				."\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$row["nr"]."</span></td>"
+			."\n\t</tr>"
+		."\n\t</table>"
+		."\n\n\t</td>\n\t<td>"
+	."\n\t</td>\n</tr>\n</table>";
+}
+
+if ($blattkey == 5000) { // fikt. Blatt
+	echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>\n";
+} else {
+	// E I G E N T U E M E R
+	echo "\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>\n";
+	$n = eigentuemer($con, $gmlid, true, ""); // MIT Adressen.
+	if ($n == 0) { // keine NamensNr, kein Eigentuemer
+		echo "\n<p class='err'>Keine Namensnummer gefunden.</p>";
+		echo "\n<p>Bezirk: ".$row["bezirk"].", Blatt: ".$row["nr"].", Blattart ".$blattkey." (".$blattart.")</p>";
+	}
+}
+
+// Vorab pruefen, ob der Fall "Rechte an .." vorliegt.
+if ($blattkey == 1000) { // GB-Blatt  <istBestandteilVon<  sh=herrschend  >an>  sd=dienend
+	$sql="SELECT count(sd.laufendenummer) AS anzahl
+	FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) 
+	WHERE sh.istbestandteilvon= $1 AND sd.endet IS NULL AND sh.endet IS NULL;";
+
+	$v=array($gmlid); // GB-Blatt
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) echo "<p class='err'>Fehler bei Suche nach Buchungen.</p>\n";
+	$row=pg_fetch_array($res);
+	$anz=$row["anzahl"];
+	//echo "<p>Zeilen : ".$anz." zu Blattart ".$blattkey."</p>";
+} else { // 2000: Katasterblatt, 3000: Pseudoblatt, 5000: Fiktives Blatt
+	$anz=0;
+}
+if ($anz > 0) {
+	echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Rechte und Flurst&uuml;cke</h3>";
+	echo "\n<table class='fs'>";
+	echo "\n<tr>"; // zus. Kopfz.
+		echo "\n\t<td>&nbsp;</td>"
+		."\n\t<td class='dien' title='herrschendes Grundst&uuml;ck'>herrschende Buchungsart</td>"
+		."\n\t<td>&nbsp;</td>"
+		."\n\t<td class='dien'>Bezirk</td>"
+		."\n\t<td class='dien'>Blatt</td>"
+		."\n\t<td class='dien'>BVNR</td>"
+		."\n\t<td class='dien' title='dienendes Grundst&uuml;ck'>Buchungsart</td>"
+		."\n\t<td>&nbsp;</td>"
+	."\n</tr>";
+} else {
+	echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>"
+	."\n<table class='fs'>";
+} // gemeinsame Kopfzeile
+echo "\n<tr>"
+	."\n\t<td class='head' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'><span class='wichtig'>BVNR</span></td>"
+	."\n\t<td class='head'>Buchungsart</td>"
+	."\n\t<td class='head'>Anteil</td>"
+	."\n\t<td class='head'>Gemarkung</td>"
+	."\n\t<td class='head'>Flur</td>"
+	."\n\t<td class='head fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>"
+	."\n\t<td class='head fla'>Fl&auml;che</td>"
+	."\n\t<td class='head nwlink noprint' title='Link: weitere Auskunft'>weit. Auskunft</td>"
+."\n</tr>";
+
+// Blatt ->  B u c h u n g s s t e l l e
+// aktuelles ax_buchungsblatt <istBestandteilVon< ax_buchungsstelle 
+$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer AS lfd, s.beschreibungdesumfangsderbuchung AS udb, s.zaehler, s.nenner, s.nummerimaufteilungsplan AS nrap, s.beschreibungdessondereigentums AS sond, b.v as bart, b.d
+FROM ax_buchungsstelle s 
+LEFT JOIN alkis_wertearten b ON cast(s.buchungsart AS character varying)=b.k AND b.element='ax_buchungsstelle' and b.bezeichnung='buchungsart'
+WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);";
+
+$v=array($gmlid); // Rel. istBestandteilVon
+$res=pg_prepare("", $sql);
+$res=pg_execute("", $v);
+
+if (!$res) {
+	echo "<p class='err'>Fehler bei Buchung.</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '". $gmlid."'</p>";}
+}
+$i=0;
+$fscnt=0;
+while($row = pg_fetch_array($res)) { // Loop Buchungsstelle (GrundstÃŒck)
+	$lfdnr=$row["lfd"];
+	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
+	$gml_bs= $row["gml_id"]; // id der buchungsstelle
+	$bartkey=$row["buchungsart"]; // SchlÃŒsselwert
+	$bart=$row["bart"]; // BuchungsART Text dazu
+	$bartstory=htmlentities($row["d"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
+
+	if ($row["zaehler"] == "") {
+		$anteil = "";
+	} else {
+		$anteil = $row["zaehler"]."/".$row["nenner"];
+	}
+	// F l u r s t u e c k s d a t e n  zur direkten Buchungsstelle
+	$j = bnw_fsdaten($con, $lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS
+	$fscnt=$fscnt + $j;
+	if ($j == 0) { //  k e i n e  Flurstuecke gefunden (Miteigentumsnteil usw.)
+		// Bei "normalen" Grundstuecken wurden Flurstuecksdaten gefunden und ausgegeben.
+		// Bei Miteigentumsanteil, Erbbaurecht usw. muss nach weiteren Buchungsstellen gesucht werden:
+		//  Buchungsstelle >an/zu> (andere)Buchungsstelle >istBestandTeilVon> "FiktivesBlatt (ohne) Eigentuemer"
+
+		// andere Buchungsstellen
+		//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes)
+		//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
+		//  sh=herrschend          sd=dienend
+		$sql ="SELECT sd.gml_id, sd.buchungsart, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, wb.v AS bart "
+		."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) "
+		."LEFT JOIN alkis_wertearten wb ON cast(sd.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart' "
+		."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL ORDER BY sd.laufendenummer;";
+
+		$v=array($gml_bs);
+		$resan=pg_prepare("", $sql);
+		$resan=pg_execute("", $v);
+		if (!$resan) {
+			echo "<p class='err'>Fehler bei 'andere Buchungsstelle'.</p>\n";
+			if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+		}
+		$a=0; // count
+		$altbvnr=""; // Gruppenwechsel
+		while($rowan= pg_fetch_array($resan)) {
+			$lfdnran=$rowan["lfd"];		// BVNR an
+			$gml_bsan=$rowan["gml_id"];	// id der buchungsstelle an
+			$baan=$rowan["bart"];  		// Buchungsart an, entschluesselt
+
+			// a n d e r e s   B l a t t  (an dem das aktuelle Blatt Rechte hat)
+			// dienendes Grundbuch
+			$sql ="SELECT b.gml_id, b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, wb.v AS blattartv, z.bezeichnung AS beznam "
+			."FROM ax_buchungsblatt b JOIN ax_buchungsstelle s ON b.gml_id=s.istbestandteilvon "
+			."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk "
+			."LEFT JOIN alkis_wertearten wb ON cast(b.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart' "
+			."WHERE s.gml_id= $1 AND b.endet IS NULL ORDER BY b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;";
+			$v=array($gml_bsan);
+			$fbres=pg_prepare("", $sql);
+			$fbres=pg_execute("", $v);
+			if (!$fbres) {
+				echo "<p class='err'>Fehler bei fiktivem Blatt.</p>\n";
+				if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}			
+			}
+			$b=0;
+			while($fbrow = pg_fetch_array($fbres)) { // genau 1
+				$fbgml=$fbrow["gml_id"];
+				$fbland=$fbrow["land"];
+				$fbbez=$fbrow["bezirk"];
+				$beznam=$fbrow["beznam"];
+				$fbblatt=$fbrow["blatt"]; // Key
+				$fbbart=$fbrow["blattartv"]; // Value
+				$b++;
+			}
+			if ($b != 1) { // Ãberwachen: genau 1?
+				echo "<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>";
+			}
+
+			// G r u n d b u c h d a t e n  zur  a n d e r e n  Buchungsstelle
+			echo "\n<tr>"
+				."\n\t<td>"; // Sp.1 Erbbau BVNR
+					if($bvnr == $altbvnr) {	// gleiches Grundstueck
+						echo "&nbsp;"; // dann Anzeige unterdruecken
+					} else {
+						echo "<a name='bvnr".$lfdnr."'></a>"; // Sprungmarke
+						echo "<span class='wichtig'>".$bvnr."</span>"; 
+						$altbvnr = $bvnr; // Gruppenwechsel merken
+					}
+				echo "</td>";
+
+				echo "\n\t<td class='dien'>"; // Sp.2 Buchung
+					if ($showkey) {echo "<span class='key'>".$row["buchungsart"]."</span> ";}
+				echo $bart." an</td>";
+
+				echo "\n\t<td>".$anteil."</td>"; // Sp.3 Anteil
+
+				echo "\n\t<td class='dien'>"; // Sp.4 Gemarkg., hier Bezirk
+					if ($showkey) {echo "<span class='key'>".$fbbez."</span> ";}
+					echo $beznam
+				."</td>";
+
+				echo "\n\t<td class='dien'>".$fbblatt."</td>"; // Sp. 5 Blatt
+
+				echo "\n\t<td class='dien'>".str_pad($lfdnran, 4, "0", STR_PAD_LEFT)."</td>";// Sp.6 BVNR
+
+				echo "\n\t<td class='dien'>"; // Sp.7 Buchungsart
+					if ($showkey) {echo "<span class='key'>".$rowan["buchungsart"]."</span> ";}
+					echo $baan." "
+				."</td>";
+
+				echo "\n\t<td>";  // Sp.8 Link ("an" oder "zu" ?)
+					echo "<p class='nwlink noprint'>an/zu"
+					." <a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml;
+						if ($showkey) {echo "&amp;showkey=j";}
+						echo "#bvnr".$lfdnran; // Sprungmarke auf der Seite
+						echo "' title='Zum Grundbuchnachweis des dienenden Blattes'>";
+						if ($showkey) {echo "<span class='key'>".$rowan["blattart"]."</span> ";}
+						echo $fbbart
+					." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a></p>"
+				."</td>"
+			."\n</tr>"; 
+
+			// F l u r s t u e c k s d a t e n  zur  a n d e r e n  Buchungsstelle
+			// Buchungsart wird nur in erster Zeile ausgegeben, hier leer
+			$aj = bnw_fsdaten($con, $lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS
+			$fscnt=$fscnt + $aj;
+			// +++ Gibt es Sondereigentum beim fiktiven Blatt?
+			if ($rowan["nrap"] != "") {
+				echo "\n<tr>"
+					."\n\t<td class='sond' colspan=8>Nr. im Aufteilungsplan: ".$rowan["nrap"]."</td>"
+				."\n</tr>";
+			}
+			if ($rowan["sond"] != "") {
+				echo "\n<tr>"
+					."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".$rowan["sond"]."</td>"
+				."\n</tr>";
+			}
+			$a++;
+		}
+		if ($a == 0) {
+			echo "\n<tr>"
+				."\n\t<td><span class='wichtig'>".$bvnr."</span></td>"
+				."\n\t<td colspan=7>"
+					."<p class='warn'>Flurst&uuml;cke zu ".$bvnr." nicht gefunden.</p>"
+				."</td>"
+			."\n</tr>";
+		}
+	}
+	$i++; 
+	if ($row["nrap"] != "") { // Nr im Auft.Plan
+		echo "\n<tr>"
+			."\n\t<td class='nrap' colspan=8>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td>"
+		."\n</tr>";
+	}
+	if ($row["sond"] != "") { // Sondereigentumsbeschreibung
+		echo "\n<tr>"
+			."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td>"
+		."\n</tr>";
+	} // Ende Buchungsstelle/BVNR
+} // Ende Loop
+echo "\n</table>";
+
+if ($i == 0) {
+	echo "\n<p class='err'>Keine Buchung gefunden.</p>\n";
+} else {
+	if ($i > 5 and $fscnt > 5) { // nur wenn nicht auf einen Blick zu erkennen
+		echo "\n<p class='cnt'>".$i." Buchungen mit ".$fscnt." Flurst&uuml;cken</p>\n";
+	}
+}
+
+// B e r e c h t i g t e  Buchungsblaetter  mit Recht an/zu dem aktuellen (fiktiven?) Blatt
+
+// bf                          sf            sb                               bb
+// Blatt   <istBestandteilVon< Stelle  <an<  Stelle      >istBestandteilVon>  Blatt
+// Fiktiv                      Fiktiv  <zu<  Berechtigt                       Berechtigt
+$sql="SELECT sf.laufendenummer AS anlfdnr, bb.gml_id, bb.land, bb.bezirk, bb.buchungsblattnummermitbuchstabenerweiterung AS blatt, bb.blattart, wa.v AS blattartv, 
+sb.gml_id AS gml_s, sb.laufendenummer AS lfdnr, sb.buchungsart, wb.v AS bart, wb.d AS bartd, bz.bezeichnung AS beznam, d.bezeichnung, d.stelle, d.stellenart, wd.v AS stellev 
+FROM ax_buchungsstelle sf JOIN ax_buchungsstelle sb ON (sf.gml_id=ANY(sb.an) OR sf.gml_id=ANY(sb.zu)) 
+JOIN ax_buchungsblatt bb ON bb.gml_id=sb.istbestandteilvon 
+LEFT JOIN ax_buchungsblattbezirk bz ON bb.land=bz.land AND bb.bezirk=bz.bezirk 
+LEFT JOIN ax_dienststelle d ON bz.land=d.land AND bz.stelle=d.stelle 
+LEFT JOIN alkis_wertearten wa ON cast(bb.blattart AS character varying)=wa.k AND wa.element='ax_buchungsblatt' AND wa.bezeichnung='blattart'
+LEFT JOIN alkis_wertearten wb ON cast(sb.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart'
+LEFT JOIN alkis_wertearten wd ON cast(d.stellenart AS character varying)=wd.k AND wd.element='ax_dienststelle' AND wd.bezeichnung='stellenart'
+WHERE sf.istbestandteilvon = $1 AND sf.endet IS NULL AND sb.endet IS NULL AND bb.endet IS NULL 
+ORDER BY cast(sf.laufendenummer AS integer), bb.land, bb.bezirk, bb.buchungsblattnummermitbuchstabenerweiterung, cast(sb.laufendenummer AS integer);";
+
+$v = array($gmlid);
+$resb = pg_prepare("", $sql);
+$resb = pg_execute("", $v);
+if (!$resb) {
+	echo "<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$b=0; // count: Buchungen / BlÃ€tter
+while($rowb = pg_fetch_array($resb)) {
+	if ($b == 0) { // Ueberschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
+		echo "\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>\n"
+		."\n<table class='outer'>"
+		."\n<tr>"
+			."\n\t<td class='head' title='lfd. Nr. auf diesem Blatt, wie im Teil Flurst&uuml;cke'>an <span class='wichtig'>BVNR</span></td>"
+			."\n\t<td class='head'>Land</td>"
+			."\n\t<td class='head'>Dienststelle</td>"
+			."\n\t<td class='head'>Bezirk</td>"
+			."\n\t<td class='head'><span class='wichtig'>Blatt</span></td>"
+			."\n\t<td class='head'>BVNR</td>"
+			."\n\t<td class='head'>Buchungsart</td>"
+			."\n\t<td class='head nwlink noprint'>Weitere Auskunft</td>"
+		."\n</tr>";
+	}
+
+	$anlfdnr=$rowb["anlfdnr"]; // an BVNR
+	$anlfdnr0=str_pad($anlfdnr, 4, "0", STR_PAD_LEFT); // mit fÃŒhr.0
+	$gml_b=$rowb["gml_id"]; // id des ber. Blattes
+	$gml_s=$rowb["gml_s"]; // id der ber. B-Stelle
+	$blart=$rowb["blattart"];
+
+	$buch=$rowb["buchungsart"]; // Buchungsart Stelle berechtigt
+	$bart=$rowb["bart"]; // BA entschl.
+	$lfdnr=$rowb["lfdnr"]; // BVNR ber.
+	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
+
+	echo "\n<tr>"; // Der Teil "berechtigte GrundbÃŒcher" ist sortiert wie oberer Teil "FlurstÃŒcke"
+		echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span>";
+
+		echo "</td>"
+		."\n\t<td>".$rowb["land"]."</td>"
+		."\n\t<td>"; // Amtsgericht
+			echo $rowb["stellev"]." ";
+			if ($showkey) {echo "<span class='key'>".$rowb["stelle"]."</span> ";}
+			echo $rowb["bezeichnung"]
+		."</td>"
+		."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$rowb["bezirk"]."</span> ";}
+			echo $rowb["beznam"]
+		."</td>"
+		."\n\t<td><span class='wichtig'>".$rowb["blatt"]."</span></td>"
+		."\n\t<td>".$bvnr."</td>"
+		."\n\t<td title='".htmlentities($rowb["bartd"], ENT_QUOTES, "UTF-8")."'>";
+			if ($showkey) {echo "<span class='key'>".$buch."</span> ";}
+			echo $bart
+		."</td>"
+		."\n\t<td>"
+			."\n\t\t<p class='nwlink noprint'>"
+			."\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b."#bvnr".$lfdnr;
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "' title='Nachweis des berechtigten Blattes an ".$blattart."'>".$rowb["blattartv"]; // oder "zu" statt "an"
+				echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
+			."\n\t\t</p>"
+		."</td>"
+	."\n</tr>";
+	$b++;
+}
+if ($b == 0) {
+	if ($blattkey > 2000 ) { // Warnung nicht bei Grundbuchblatt 1000 und Katasterblatt 2000
+		echo "<p class='err'>Keine berechtigten Bl&auml;tter zu ".$blattart." (".$blattkey.") gefunden.</p>";
+	}
+} else {
+	echo "\n</table>";
+	if ($i > 1) {
+		echo "\n<p class='cnt'>Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen</p>\n";
+	}
+}
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+	 	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_gb.png" width="32" height="16" alt="Export"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisausk.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisausk.php	(revision 362)
@@ -0,0 +1,241 @@
+<?php
+/*	alkisausk.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Dies Programm wird aus dem Mapserver-Template (FeatureInfo) aufgerufen.
+	Parameter: &gkz, &gml_id (optional &id)
+	Dies Programm gibt einen kurzen Ãberblick zum FlurstÃŒck, z.B. Eigentuemer ohne Adresse
+	FÃŒr detaillierte Angaben wird zum GB- oder FS-Nachweis verlinkt.
+	Siehe auch alkisinlayausk.php - eine Variante fÃŒr den Einbau in einen iFrame
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+echo <<<END
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck.ico">
+	<title>ALKIS-Auskunft</title>
+	<style type='text/css' media='print'>
+		.noprint { visibility: hidden;}
+	</style>
+</head>
+<body>
+END;
+$con = pg_connect("host=".$dbhost." port=".$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) {echo "<br>Fehler beim Verbinden der DB.\n<br>";}
+
+// *** F L U R S T U E C K ***
+$sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung 
+FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
+WHERE f.gml_id= $1 AND f.endet IS NULL;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Flurstuecksdaten.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if ($row = pg_fetch_array($res)) {
+	$gemkname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+	$gmkgnr=$row["gemarkungsnummer"];
+	$flurnummer=$row["flurnummer"];
+	$flstnummer=$row["zaehler"];
+	$nenner=$row["nenner"];
+	if ($nenner > 0) $flstnummer.="/".$nenner; // BruchNr
+	$flae=$row["amtlicheflaeche"];
+	$flae=number_format($flae,0,",",".") . " m&#178;";
+} else {
+	echo "<p class='err'>Kein Treffer fuer gml_id=".$gmlid."</p>";
+}
+
+// Balken
+echo "\n<p class='fsausk'>ALKIS-Auskunft Flurst&uuml;ck-&Uuml;bersicht ".$gmkgnr."-".$flurnummer."-".$flstnummer."</p>";
+
+echo "\n<table class='outer'>\n<tr><td>";
+	// linke Seite
+	echo "\n<h1>ALKIS-Auskunft</h1>"
+	."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck - &Uuml;bersicht</h2>";
+echo "</td><td align='right'>";
+	// rechte Seite
+	echo "<img src='pic/AAA.gif' alt=''>"
+."</td></tr></table>";
+
+echo "\n<table class='outer'>\n<tr>\n<td>"
+	."\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>"
+	."\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>"
+	."\n\t<tr>\n\t\t<td title='Gemarkung'>";
+	if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
+	echo $gemkname."</td>"
+	. "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
+	."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
+	."\n\t</table>"
+."\n</td>\n<td>"
+."\n\t<p class='nwlink'>weitere Auskunft:<br>";
+
+// Flurstuecksnachweis (o. Eigent.)
+echo "\n\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
+	if ($showkey) {echo "&amp;showkey=j";}
+	echo "' title='Flurst&uuml;cksnachweis, alle Flurst&uuml;cksdaten'>Flurst&uuml;ck "
+	."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+."</a><br>";
+
+// FS- u. Eigent.-NW
+echo "\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=j";
+	if ($showkey) {echo "&amp;showkey=j";}
+	echo "' title='Flurst&uuml;ck mit Eigent&uuml;mer'>Flurst&uuml;ck mit Eigent&uuml;mer "
+	."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+."</a><br>";
+
+// FS-Historie
+echo "\n\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+	if ($showkey) {echo "&amp;showkey=j";}
+	echo "' title='Vorg&auml;nger des Flurst&uuml;cks'>Historie "
+	."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
+."</a><br>";
+
+// Gebaeude-NW
+echo "\n\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+	if ($showkey) {echo "&amp;showkey=j";}
+	echo "' title='Geb&auml;udenachweis'>Geb&auml;ude "
+	."<img src='ico/Haus.png' width='16' height='16' alt=''>"
+."</a>"
+. "\n\t</p>\n</td>";
+
+// Lagebezeichnung MIT Hausnummer (Adresse)
+$sql ="SELECT DISTINCT l.gml_id, s.gml_id AS kgml, l.gemeinde, l.lage, l.hausnummer, s.bezeichnung 
+FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)
+LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ORDER BY l.gemeinde, l.lage, l.hausnummer;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer.</p>";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$j=0;
+while($row = pg_fetch_array($res)) {
+	$sname = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
+	echo "\n<tr>\n\t"
+		."\n\t<td class='lr'>".$sname."&nbsp;".$row["hausnummer"]."</td>"
+		."\n\t<td>\n\t\t<p class='nwlink noprint'>"
+			."\n\t\t\t<a title='Lagebezeichnung mit Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"]."'>Lage "
+			."<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;"
+			."\n\t\t\t<a href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$row["kgml"]
+			."' title='Stra&szlig;e'>Stra&szlig;e <img src='ico/Strassen.png' width='16' height='16' alt=''></a>"
+		."\n\t\t</p>\n\t</td>"
+	."\n</tr>";
+	$j++;
+}
+echo "\n</tr>\n</table>\n";
+
+// Flurstuecksflaeche
+echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".$flae."</b></p>\n";
+
+// *** G R U N D B U C H ***
+echo "\n<h2><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundbuch</h2>";
+// ALKIS: FS >istgebucht> GS >istBestandteilVon> GB.
+$sql ="SELECT b.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, wa.v AS blattartv, 
+s.gml_id AS s_gml, s.buchungsart, s.laufendenummer, s.zaehler, s.nenner, z.bezeichnung, wb.v AS bart 
+FROM ax_flurstueck f 
+JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id 
+JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id 
+LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk 
+LEFT JOIN alkis_wertearten wa ON cast(b.blattart AS character varying)=wa.k AND wa.element='ax_buchungsblatt' AND wa.bezeichnung='blattart'
+LEFT JOIN alkis_wertearten wb ON cast(s.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart'
+WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND b.endet IS NULL 
+ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;";
+
+$v = array($gmlid);
+$resg = pg_prepare("", $sql);
+$resg = pg_execute("", $v);
+if (!$resg) {
+	echo "\n<p class='err'>Keine Buchungen.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+$j=0; // Z.Blatt
+while($rowg = pg_fetch_array($resg)) {
+	$beznam=$rowg["bezeichnung"];
+	echo "\n<table class='outer'>\n<tr>\n<td>";
+		$blattkey=$rowg["blattart"];
+		$blattart=$rowg["blattartv"];
+		if ($blattkey == 1000) {
+			echo "\n\t<table class='kennzgb' title='Bestandskennzeichen'>";
+		} else {
+			echo "\n\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
+		}
+			echo "\n\t<tr>"
+				."\n\t\t<td class='head'>Bezirk</td>"
+				."\n\t\t<td class='head'>".$blattart."</td>"
+				."\n\t\t<td class='head'>Lfd-Nr,</td>"
+				."\n\t\t<td class='head'>Buchungsart</td>"
+			."\n\t</tr>";
+			echo "\n\t<tr>"
+				."\n\t\t<td title='Grundbuchbezirk'>";
+					if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span><br>";}
+				echo $beznam."</td>"
+				."\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$rowg["blatt"]."</span></td>"
+				."\n\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$rowg["laufendenummer"]."</td>"
+				."\n\t\t<td title='Buchungsart'>";
+					if ($showkey) {echo "<span class='key'>".$rowg["buchungsart"]."</span><br>";}
+					echo $rowg["bart"]
+				."</td>"
+			."\n\t</tr>"
+		."\n\t</table>";
+
+		if ($rowg["zahler"] <> "") {
+			echo "\n<p class='ant'>".$rowg["zahler"]."/".$rowg["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
+		}
+		echo "\n</td>\n<td>"
+		."\n\t<p class='nwlink'>weitere Auskunft:<br>"
+			."\n\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$rowg[0];
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "' title='Grundbuchnachweis'>".$blattart." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
+			."</a>"
+		."\n\t</p>"
+	."\n</td>\n</tr>\n</table>";
+
+	// E I G E N T U E M E R
+	if ($blattkey == 5000) { // SchlÃŒssel Blatt-Art
+		echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt</p>\n"
+		."\n<p>Siehe weitere Grundbuchbl&auml;tter mit Rechten an dem fiktiven Blatt.</p>\n";
+	} else { // kein Eigent. bei fiktiv. Blatt
+		echo "\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>\n";
+
+		// Ausgabe Name in Function
+		$n = eigentuemer($con, $rowg["gml_id"], false); // ohne Adr.
+
+		if ($n == 0) { // keine NamNum, kein Eigent.
+			echo "\n<p class='err'>Keine Eigent&uuml;mer gefunden.</p>"
+			."\n<p class='err'>Bezirk ".$rowg["bezirk"]." Blatt ".$rowg["blatt"]." Blattart ".$blattkey." (".$blattart.")</p>";
+		}
+	}
+	$j++;
+}
+if ($j == 0) {echo "\n<p class='err'>Keine Buchungen gefunden.</p>";}
+echo "\n<hr>";
+
+footer($gmlid, $_SERVER['PHP_SELF']."?", "");
+
+?>
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisnamstruk.php
===================================================================
--- /trunk/info/info/alkisn/alkisnamstruk.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisnamstruk.php	(revision 362)
@@ -0,0 +1,246 @@
+<?php
+/*	Modul: alkisnamstruk.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Namens- und Adressdaten fuer einen Eigentuemer aus ALKIS PostNAS
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+
+	ToDo: Sortierung der GrundbÃŒcher zum Namen
+*/
+session_start();
+$id="n";
+$multiadress="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Person und Adresse</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Eigentuemer_2.ico">
+	<script type="text/javascript">
+		function ALKISexport() {
+			window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=person&gmlid=".$gmlid."'"; ?>);
+		}
+	</script>
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+
+<?php
+$con = pg_connect("host=".$dbhost." port=".$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+// Balken
+echo "<p class='nakennz'>ALKIS Name id=".$gmlid."&nbsp;</p>\n";
+
+echo "\n<h2><img src='ico/Eigentuemer.png' width='16' height='16' alt=''> Person</h2>\n";
+if (!$con) "\n<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+$sql="SELECT p.nachnameoderfirma, p.anrede, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad, a.v AS anrv
+FROM ax_person p LEFT JOIN alkis_wertearten a ON cast(p.anrede AS character varying)=a.k AND a.element='ax_person' AND a.bezeichnung='anrede' 
+WHERE gml_id= $1;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Zugriff auf Namensnummer</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+if ($row = pg_fetch_array($res)) {
+	$vor=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
+	$nam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
+	$geb=htmlentities($row["geburtsname"], ENT_QUOTES, "UTF-8");
+	$anrk=$row["anrede"]; // Key
+	$anr=$row["anrv"]; // Value
+	$nbest=$row["namensbestandteil"];
+	$aka=$row["akademischergrad"];
+
+	echo "<table>\n"
+		."\t<tr><td class='nhd'>Anrede:</td><td class='nam'>";
+		if ($showkey) {echo "<span class='key' title='Anredekennung'>(".$anrk.")</span> ";}
+		echo $anr."</td></tr>\n"
+		."\t<tr><td class='nhd'>Nachname oder Firma:</td><td class='nam'>".$nam."</td></tr>\n"
+		."\t<tr><td class='nhd'>Vorname:</td><td class='nam'>".$vor."&nbsp;</td></tr>\n"
+		."\t<tr><td class='nhd'>Geburtsname:</td><td class='nam'>".$geb."&nbsp;</td></tr>\n"
+		."\t<tr><td class='nhd'>Geburtsdatum:</td><td class='nam'>".$row["geburtsdatum"]."&nbsp;</td></tr>\n"
+		."\t<tr><td class='nhd'>Namensbestandteil:</td><td class='nam'>".$nbest."&nbsp;</td></tr>\n"
+		."\t<tr><td class='nhd'>akademischer Grad:</td><td class='nam'>".$aka."&nbsp;</td></tr>\n"
+	."\n</table>\n<hr>\n";
+
+	// A d r e s s e
+	echo "\n<h3><img src='ico/Strasse_mit_Haus.png' width='16' height='16' alt=''> Adresse</h3>\n";
+	// Es kÃ¶nnen redundante Adressen vorhanden sein, z.B. aus Migration, temporÃ€r aus LBESAS. Die letzte davon anzeigen.
+
+	$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland 
+	FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 ORDER BY a.gml_id DESC ;";
+
+	$v = array($gmlid);
+	$resa = pg_prepare("", $sqla);
+	$resa = pg_execute("", $v);
+	if (!$resa) {
+		echo "\n<p class='err'>Fehler bei Adressen</p>\n";
+		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqla."<br>$1=gml(Person)= '".$gmlid."'</p>\n";}
+	}
+
+	$j=0;
+	// Parameter $multiadress = j zeigt ALLE Adressen an
+	while($rowa = pg_fetch_array($resa)) {
+		$j++;
+		if ($multiadress == "j" OR $j == 1) {
+			$gmla=$rowa["gml_id"];
+			$plz=$rowa["plz"];
+			$ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
+			$str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
+			$hsnr=$rowa["hausnummer"];
+			$land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
+			echo "<table>\n"
+				."\t<tr><td class='nhd'>PLZ:</td><td class='nam'>".$plz."</td></tr>\n"
+				."\t<tr><td class='nhd'>Ort:</td><td class='nam'>".$ort."</td></tr>\n"
+				."\t<tr><td class='nhd'>Strasse:</td><td class='nam'>".$str."</td></tr>\n"
+				."\t<tr><td class='nhd'>Hausnummer:</td><td class='nam'>".$hsnr."</td></tr>\n"
+				."\t<tr><td class='nhd'>Land:</td><td class='nam'>".$land."</td></tr>\n"
+			."\n</table>\n<br>\n";
+
+			// Name und Adresse Kompakt (im Rahmen) - Alles was man fuer ein Anschreiben braucht
+			echo "<img src='ico/Namen.png' width='16' height='16' alt='Brief' title='Anschrift'>"
+			."\n<div class='adr' title='Anschrift'>".$anr." ".$aka." ".$vor." ".$nbest." ".$nam."<br>"
+			."\n".$str." ".$hsnr."<br>"
+			."\n".$plz." ".$ort."</div>";
+		}
+	}
+	pg_free_result($resa);
+	if ($j == 0) {
+		echo "\n<p class='err'>Keine Adressen.</p>\n";
+	} elseif ($j > 1) {
+		echo "\n\t\t<p class='nwlink noprint'>"
+		."\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid;
+		if ($showkey) {echo "&amp;showkey=j";}
+		if ($multiadress == "j") {
+			echo "&amp;multiadress=n' title='mehrfache Adressen unterdr&uuml;cken'>erste Adresse ";
+		} else {
+			echo "&amp;multiadress=j' title='Adressen ggf. mehrfach vorhanden'>alle Adressen ";
+		}
+		echo "\n\t\t\t</a>"
+		."\n\t\t</p>";
+	}
+
+	// *** G R U N D B U C H ***
+	echo "\n<hr>\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>\n";
+	// person <benennt< namensnummer >istBestandteilVon>                Buchungsblatt
+	//                               >bestehtAusRechtsverhaeltnissenZu> namensnummer   (Nebenzweig/SonderfÃ€lle?)
+
+	$sqlg ="SELECT n.gml_id AS gml_n, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, g.gml_id AS gml_g, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung as nr, g.blattart, wb.v AS blattartv, b.bezeichnung AS beznam 
+	FROM ax_person p JOIN ax_namensnummer n ON p.gml_id=n.benennt 
+	JOIN ax_buchungsblatt g ON g.gml_id=n.istbestandteilvon 
+	LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk 
+	LEFT JOIN alkis_wertearten wb ON cast(g.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart'
+	WHERE p.gml_id= $1 ORDER BY g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung;";
+	// buchungsblatt... mal mit und mal ohne fuehrende Nullen, bringt die Sortierung durcheinander
+
+	$v = array($gmlid);
+	$resg = pg_prepare("", $sqlg);
+	$resg = pg_execute("", $v);
+
+	if (!$resg) {
+		echo "\n<p class='err'>Fehler bei Grundbuch</p>\n";
+		if ($debug > 2) {echo "\n<p class='err'>SQL=".$sqlg."</p>\n";}
+	}
+	echo "<table class='eig'>"
+	."\n<tr>"
+		."\n\t<td class='head'>Bezirk</td>"
+		."\n\t<td class='head'>Blattart</td>"
+		."\n\t<td class='head'>Blatt</td>"
+		."\n\t<td class='head'>Namensnummer</td>"
+		."\n\t<td class='head'>Anteil</td>"
+		."\n\t<td class='head nwlink noprint' title='Link: weitere Auskunft'>weit. Auskunft</td>"
+	."\n</tr>";
+
+	$i=0;
+	while($rowg = pg_fetch_array($resg)) {
+		$gmln=$rowg["gml_n"];
+		$gmlg=$rowg["gml_g"];
+		$namnum=kurz_namnr($rowg["lfd"]);
+		$zae=$rowg["zaehler"];
+		$blattkey=$rowg["blattart"]; // Key
+		$blattart=$rowg["blattartv"]; // Value
+
+		echo "\n<tr>"
+			."\n\t<td class='gbl'>"; // GB-Bezirk"
+				if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span> ";}
+				echo $rowg["beznam"]
+			."</td>";
+
+			echo "\n\t<td class='gbl'>"; // Blattart
+				if ($showkey) {echo "<span class='key'>".$blattkey."</span> ";}
+				echo $blattart
+			."</td>";
+
+			echo "\n\t<td class='gbl'>"; // Blatt
+				echo "<span class='wichtig'>".$rowg["nr"]."</span>"
+			."</td>";
+
+			echo "\n\t<td class='gbl'>"; // Namensnummer
+				If ($namnum == "") {
+					echo "&nbsp;";
+				} else {
+					echo $namnum;
+				}
+			echo "</td>";
+
+			echo "\n\t<td class='gbl'>"; // Anteil
+				If ($zae == "") {
+					echo "&nbsp;";
+				} else {
+					echo $zae."/".$rowg["nenner"]." Anteil";
+				} 
+			echo "</td>"
+			."\n\t<td class='gbl'>"
+				."\n\t\t<p class='nwlink noprint'>"
+					."\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg;
+						if ($showkey) {echo "&amp;showkey=j";}
+						echo "' title='Bestandsnachweis'>".$blattart
+					."\n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
+				."\n\t\t</p>"
+			."\n\t</td>"
+		."\n</tr>";
+		// +++ >bestehtAusRechtsverhaeltnissenZu> namensnummer ?
+		// z.B. eine Namennummer "Erbengemeinschaft" zeigt auf Namensnummern mit EigentÃŒmern
+		$i++;
+	}
+	pg_free_result($resg);
+	echo "</table>";
+	if ($i == 0) {echo "\n<p class='err'>Kein Grundbuch.</p>\n";}
+} else {
+	echo "\n\t<p class='err'>Fehler! Kein Treffer f&uuml;r\n\t<a target='_blank' href='alkisrelationen.php?gkz=".$gkz."&amp;gmlid=".$gmlid."'>".$gmlid."</a>\n</p>\n\n";
+}
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.png" width="16" height="16" alt="Export"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisgebaeudenw.php
===================================================================
--- /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 362)
@@ -0,0 +1,268 @@
+<?php
+/*	alkisgebaeudenw.php - Gebaeudenachweis
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Geb&auml;udenachweis</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// Flurstueck
+$sqlf ="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, f.zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung 
+FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+WHERE f.gml_id= $1 AND f.endet IS NULL;";
+$v=array($gmlid);
+$resf=pg_prepare("", $sqlf);
+$resf=pg_execute("", $v);
+if (!$resf) {
+	echo "\n<p class='err'>Fehler bei Flurst&uuml;cksdaten.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlf."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if ($rowf = pg_fetch_array($resf)) {
+	$gemkname=htmlentities($rowf["bezeichnung"], ENT_QUOTES, "UTF-8");
+	$gmkgnr=$rowf["gemarkungsnummer"];
+	$flurnummer=$rowf["flurnummer"];
+	$flstnummer=$rowf["zaehler"];
+	$nenner=$rowf["nenner"];
+	if ($nenner > 0) { // BruchNr
+		$flstnummer.="/".$nenner;
+	} 
+	$flstflaeche = $rowf["amtlicheflaeche"] ;
+} else {
+	echo "<p class='err'>Fehler! Kein Treffer fuer gml_id=".$gmlid."</p>";
+}
+
+// Balken
+echo "<p class='geb'>ALKIS Flurst&uuml;ck (Geb&auml;ude) ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
+
+echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck (Geb&auml;ude)</h2>\n";
+
+// Kennzeichen in Rahmen
+echo "\n<table class='outer'>\n<tr>\n<td>"
+	."\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>"
+    ."\n\t<tr>"
+        ."\n\t\t<td class='head'>Gmkg</td>"
+        ."\n\t\t<td class='head'>Flur</td>"
+        ."\n\t\t<td class='head'>Flurst-Nr.</td>"
+    ."\n\t</tr>\n\t<tr>"
+        ."\n\t\t<td title='Gemarkung'>";
+        if  ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
+        echo $gemkname."&nbsp;</td>"
+        ."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
+        ."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>"
+    ."\n\t</tr>"
+	."\n\t</table>"
+."\n</td>\n<td>";
+
+// Links zu anderem Nachweis
+echo "\n\t<p class='nwlink noprint'>"
+	."\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+	if ($showkey) {echo "&amp;showkey=j";}
+	echo "&amp;eig=n' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck <img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
+."\n\t</p>"
+."\n\t</td>\n</tr>\n</table>";
+// Ende Seitenkopf
+
+echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".number_format($flstflaeche,0,",",".") . " m&#178;</b></p>";
+pg_free_result($resf);
+
+echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>"
+."\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>";
+
+// G e b a e u d e
+$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, h.v AS bauweise_beschreibung, u.v AS bezeichner, g.zustand, z.v AS bzustand, 
+round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-Flaeche komplett auch die Fl. ausserhalb des FS
+$sqlg.="round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae, "; // wie viel vom GEB liegt im FS?
+$sqlg.="st_within(g.wkb_geometry,f.wkb_geometry) as drin "; // liegt das GEB komplett im FS?
+$sqlg.="FROM ax_flurstueck f, ax_gebaeude g 
+LEFT JOIN alkis_wertearten h ON cast(g.bauweise AS character varying) = h.k AND h.element='ax_gebaeude' and h.bezeichnung='bauweise'
+LEFT JOIN alkis_wertearten u ON cast(g.gebaeudefunktion AS character varying) = u.k AND u.element='ax_gebaeude' and u.bezeichnung='gebaeudefunktion'
+LEFT JOIN alkis_wertearten z ON cast(g.zustand AS character varying) = z.k AND z.element='ax_gebaeude' and z.bezeichnung='zustand'
+WHERE f.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL "; // ID des akt. FS
+
+// "within" -> nur Geb., die komplett im FS liegen
+// "intersects" -> auch teil-ueberlappende Flst.
+$sqlg.="AND st_intersects(g.wkb_geometry,f.wkb_geometry) = true ";
+// RLP: keine Relationen zu NebengebÃ€uden. Auf Qualifizierung verzichten, sonst werden NebengebÃ€ude nicht angezeigt
+//$sqlg.="AND (v.beziehungsart='zeigtAuf' OR v.beziehungsart='hat') ";
+$sqlg.="ORDER BY schnittflae DESC;";
+
+$v=array($gmlid);
+$resg=pg_prepare("", $sqlg);
+$resg=pg_execute("", $v);
+if (!$resg) {
+	echo "\n<p class='err'>Fehler bei Geb&auml;ude-Verschneidung.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$gebnr=0;
+$gebflsum=0;
+echo "\n<hr>\n<table class='geb'>";
+	// T-Header
+	echo "\n<tr>\n"
+		."\n\t<td class='head' title='ggf. Geb&auml;udename'>Name</td>"
+		."\n\t<td class='head fla' title='Schnittsfl&auml;che'>Fl&auml;che</td>"
+		."\n\t<td class='head' title='Geb&auml;udefl&auml;che'>&nbsp;</td>"
+		."\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>"
+		."\n\t<td class='head' title='Bauweise ist die Beschreibung der Art der Bauweise'>Bauweise</td>"
+		."\n\t<td class='head' title='Zustand beschreibt die Beschaffenheit oder die Betriebsbereitschaft von Geb&auml;ude. Diese Attributart wird nur dann optional gef&uuml;hrt, wenn der Zustand des Geb&auml;udes vom nutzungsf&auml;higen Zustand abweicht.'>Zustand</td>"
+		."\n\t<td class='head nwlink' title='Lagebezeichnung mit Stra&szlig;e und Hausnummer'>Lage</td>"
+		."\n\t<td class='head nwlink' title='Link zu den kompletten Hausdaten'>Haus</td>"
+	."\n</tr>";
+	// T-Body
+	while($rowg = pg_fetch_array($resg)) {
+		$gebnr = $gebnr + 1;
+		$ggml=$rowg["gml_id"];
+		$gebflsum=$gebflsum + $rowg["schnittflae"];
+		$gnam=$rowg["name"];
+		$gzus=$rowg["zustand"];
+		$gzustand=$rowg["bzustand"];
+
+		// 3 FÃ€lle unterscheiden:
+		if ($rowg["drin"] == "t") { // GebÃ€ude liegt komplett in FlurstÃŒck
+			$f1=$rowg["schnittflae"]." m&#178;";
+			$f2="&nbsp;";
+			$gstyle="gin"; // siehe .css
+		} else {
+	       	if ($rowg["schnittflae"] == "0.00") { // GebÃ€ude angrenzend (Grenzbebauung)
+				$gstyle="gan";
+				$f1="&nbsp;";
+				$f2="angrenzend";
+			} else { // Teile des GebÃ€udes stehen auf dem FlurstÃŒck
+				$gstyle="gtl";
+				$f1=$rowg["schnittflae"]." m&#178;";
+				$f2="(von ".$rowg["gebflae"]." m&#178;)";
+			}
+		}
+
+		echo "\n<tr>"
+			."\n\t<td class='".$gstyle."'>";
+			if ($gnam != "") {echo "<span title='Geb&auml;udename'>".$gnam."</span><br>";}
+			echo "\n\t</td>";
+
+			echo "\n\t<td class='fla'>".$f1."</td>"
+			."\n\t<td class='".$gstyle."'>".$f2."</td>"; // FlÃ€chenangaben
+
+			echo "\n\t<td class='".$gstyle."'>";
+			if ($showkey) {echo "<span class='key'>".$rowg["gebaeudefunktion"]."</span>&nbsp;";}
+			echo $rowg["bezeichner"]."</td>";
+
+			echo "\n\t<td class='".$gstyle."'>";
+			if ($showkey) {echo "<span class='key'>".$rowg["bauweise"]."</span>&nbsp;";}
+			echo $rowg["bauweise_beschreibung"]."&nbsp;</td>";
+
+			echo "\n\t<td class='".$gstyle."'>";
+			if ($showkey) {echo "<span class='key'>".$gzus."</span>&nbsp;";}
+			echo $gzustand."&nbsp;</td>";
+
+			echo "\n\t<td class='nwlink noprint'>";
+			// 0 bis N Lagebezeichnungen mit Haus- oder Pseudo-Nummer, alle in ein TD zu EINEM GebÃ€ude
+
+			// HAUPTgebÃ€ude  Geb >zeigtAuf> lage (mehrere)
+			$sqll="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer "
+			."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
+			."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
+			."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
+
+			// oder NEBENgebÃ€ude  Geb >hat> Pseudo
+			$sqll.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer "
+			."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat "
+			."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
+			."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses"
+		
+			$sqll.="ORDER BY bezeichnung, hausnummer;";
+
+			$v = array($ggml);
+			$resl = pg_prepare("", $sqll);
+			$resl = pg_execute("", $v);
+			if (!$resl) {
+				echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>\n";
+				if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";}
+			}
+			while($rowl = pg_fetch_array($resl)) { // LOOP: Lagezeilen
+				$ltyp=$rowl["ltyp"]; // Lagezeilen-Typ
+				$skey=$rowl["lage"]; // Str.-Schluessel
+				$snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); //-Name
+				$hsnr=$rowl["hausnummer"];
+				$hlfd=$rowl["laufendenummer"];
+				$gmllag=$rowl["lgml"];
+				if ($ltyp == "p") {
+					$lagetitl="NebengebÃ€ude - Pseudonummer";
+					$lagetxt="Nebengeb&auml;ude Nr. ".$hlfd;
+				} else {
+					$lagetitl="HauptgebÃ€ude - Hausnummer";
+					$lagetxt=$snam."&nbsp;".$hsnr;
+				}
+				echo "\n\t\t<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''>&nbsp;";
+				if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}			
+				echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp;
+					if ($showkey)   {echo "&amp;showkey=j";}
+				echo "'>".$lagetxt."</a>";
+				echo "<br>";
+			} // Ende Loop Lage m.H.
+            pg_free_result($resl);
+			echo "\n\t</td>";
+
+			echo "\n\t<td class='nwlink noprint'>"
+				."\n\t\t<a title='Daten zum Geb&auml;ude-Objekt' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml;
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "'><img src='ico/Haus.png' width='16' height='16' alt=''></a>"
+			."\n\t</td>"
+		."\n</tr>";
+	}
+	// Footer
+	if ($gebnr == 0) {
+		echo "\n</table>"
+		."<p class='err'><br>Keine Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>";
+	} else {
+		echo "\n<tr>"
+			."\n\t<td>Summe:</td>"
+			."\n\t<td class='fla sum' title='von Geb&auml;uden &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($gebflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>"
+			."\n\t<td>&nbsp;</td>\n\t<td>&nbsp;</td>\n\t<td>&nbsp;</td>\n\t<td>&nbsp;</td>\n\t<td>&nbsp;</td>"
+		."\n</tr>"
+	."\n</table>";
+	$unbebaut = number_format(($flstflaeche - $gebflsum),0,",",".") . " m&#178;";
+	echo "\n<p><br>Flurst&uuml;cksfl&auml;che abz&uuml;glich Geb&auml;udefl&auml;che: <b>".$unbebaut."</b></p><br>";
+}
+pg_free_result($resg);
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkislage.php
===================================================================
--- /trunk/info/info/alkisn/alkislage.php	(revision 362)
+++ /trunk/info/info/alkisn/alkislage.php	(revision 362)
@@ -0,0 +1,439 @@
+<?php
+/*	alkislage.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Kann die 3 Arten von Lagebezeichnung anzeigen und verbundene Objekte verlinken
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+
+	ToDo:
+	- Balken-Kennzeichen kompatibel machen mit der Eingabe der Navigation fÃŒr Adresse
+	- das Modul "alkisgebaeudenw" (alle Geb. auf einem FS) verschneidet die FlÃ€chen und findet damit auch 
+		Grenz-Uberbauungen und angrenzende GebÃ€ude. Diese fehlen hier, weil nur VerknÃŒpfungen verarbeitet werden.
+		Mit FlÃ€chen-Verschneidung auch weitere FS anzeigen?
+*/
+session_start();
+$id="n";
+$ltyp="";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+
+switch ($ltyp) {
+	case "m": // "Mit HsNr"     = Hauptgebaeude
+		$tnam = "ax_lagebezeichnungmithausnummer"; break;
+	case "p": // "mit PseudoNr" = Nebengebaeude
+		$tnam = "ax_lagebezeichnungmitpseudonummer";	break;
+	case "o": //"Ohne HsNr"    = Gewanne oder Strasse
+		$tnam = "ax_lagebezeichnungohnehausnummer"; break;
+	default:
+		$ltyp = "m";
+		$tnam = "ax_lagebezeichnungmithausnummer"; break;
+}
+
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Lagebezeichnung</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Lage_mit_Haus.ico">
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// L a g e b e z e i c h n u n g
+$sql ="SELECT s.gml_id AS strgml, s.bezeichnung AS snam, b.bezeichnung AS bnam, r.bezeichnung AS rnam, k.bezeichnung AS knam, g.bezeichnung AS gnam, l.land, l.regierungsbezirk, l.kreis, l.gemeinde, l.lage, ";
+switch ($ltyp) {
+	case "m": // "Mit HsNr"
+		$sql.="l.hausnummer ";
+	break;
+	case "p": // "mit PseudoNr"
+		$sql.="l.pseudonummer, l.laufendenummer ";
+	break;
+	case "o": //"Ohne HsNr"
+		$sql.="l.unverschluesselt ";
+	break;
+}
+// "Left" weil: Bei sub-Typ "Gewanne" von Typ "o" sind keine SchlÃŒsselfelder gefÃŒllt!
+$sql.="FROM ".$tnam." l 
+LEFT JOIN ax_gemeinde g ON l.land=g.land AND l.regierungsbezirk=g.regierungsbezirk AND l.kreis=g.kreis AND l.gemeinde=g.gemeinde 
+LEFT JOIN ax_kreisregion k ON l.land=k.land AND l.regierungsbezirk=k.regierungsbezirk AND l.kreis=k.kreis 
+LEFT JOIN ax_regierungsbezirk r ON l.land=r.land AND l.regierungsbezirk=r.regierungsbezirk 
+LEFT JOIN ax_bundesland b ON l.land=b.land LEFT JOIN ax_lagebezeichnungkatalogeintrag s 
+ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+WHERE l.gml_id= $1 AND l.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Lagebezeichnung.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if ($row = pg_fetch_array($res)) {
+	$strgml=$row["strgml"]; // gml_id des Katalogeintrag StraÃe
+	$land =$row["land"];
+	$regbez=$row["regierungsbezirk"];
+	$kreis=$row["kreis"];
+	$knam=$row["knam"];
+	$rnam=$row["rnam"];
+	$bnam=$row["bnam"];
+	$gem=$row["gemeinde"];
+	$gnam=$row["gnam"];
+	$lage=$row["lage"]; // Strassenschluessel
+	$snam=$row["snam"]; //Strassennamen
+//	$kennz=$land."-".$regbez."-".$kreis.  ...
+	$kennz=$gem."-".$lage."-"; // ToDo: Kompatibel machen als Eingabe in Navigation/Adresse 
+	
+	switch ($ltyp) {
+		case "m": // "Mit HsNr"
+			$hsnr=$row["hausnummer"];
+			$kennz.=$hsnr;
+			$untertitel="Hauptgeb&auml;ude mit Hausnummer";
+			// Balken
+			echo "<p class='lage'>ALKIS Lagebezeichnung mit Hausnummer ".$kennz."&nbsp;</p>\n"; // Balken
+			$osub="";
+		break;
+		case "p": // "mit PseudoNr"
+			$pseu=$row["pseudonummer"];
+			$lfd=$row["laufendenummer"];
+			$kennz.=$pseu."-".$lfd;
+			$untertitel="NebengebÃ€ude mit laufender Nummer (Lagebezeichnung mit Pseudonummer)";
+			echo "<p class='lage'>ALKIS Lagebezeichnung NebengebÃ€ude ".$kennz."&nbsp;</p>\n"; // Balken
+			$osub="";
+		break;
+		case "o": // "Ohne HsNr"
+			$unver=$row["unverschluesselt"]; // Gewanne
+			// 2 Unterarten bzw. Zeilen-Typen in der Tabelle
+			if ($lage == "") {
+				$osub="g"; // Sub-Typ Gewanne
+				$kennz=" - ".$unver;
+				$untertitel="Gewanne (unverschl&uuml;sselte Lage)";
+				echo "<p class='lage'>ALKIS Lagebezeichnung Ohne Hausnummer ".$kennz."&nbsp;</p>\n"; // Balken
+			} else {
+				$osub="s"; // Sub-Typ Strasse (ohne HsNr)
+				$kennz.=$unver;
+				$untertitel="Stra&szlig;e ohne Hausnummer";
+				echo "<p class='lage'>ALKIS Lagebezeichnung Ohne Hausnummer ".$kennz."&nbsp;</p>\n"; // Balken
+			}
+		break;
+	}
+} else {
+	echo "<p class='err'>Fehler! Kein Treffer fuer gml_id=".$gmlid."</p>";
+}
+
+echo "\n<h2><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt='HAUS'> Lagebezeichnung</h2>\n";
+
+echo "<p>Typ: ".$untertitel."</p>";
+
+echo "\n<table class='outer'>\n<tr>\n\t<td>"; 	// Tab. Kennz.
+	// ToDo: !! kleiner, wenn ltyp=0 und die Schluesselfelder leer sind
+	echo "\n\t<table class='kennzla' title='Lage'>"
+		."\n\t<tr>";
+			if ($osub != "g") { // nicht bei Gewanne
+				echo "\n\t\t<td class='head'>Land</td>"
+				."\n\t\t<td class='head'>Reg.-Bez.</td>"
+				."\n\t\t<td class='head'>Kreis</td>"
+				."\n\t\t<td class='head'>Gemeinde</td>"
+				."\n\t\t<td class='head'>Stra&szlig;e</td>";
+			}
+			switch ($ltyp) {
+				case "m": // "Mit HsNr"
+					echo "\n\t\t<td class='head'>Haus-Nr</td>";
+				break;
+				case "p": // "mit PseudoNr"
+					echo "\n\t\t<td class='head'>Haus-Nr</td>"
+					."\n\t\t<td class='head'>lfd.-Nr</td>";
+				break;
+				case "o": //"Ohne HsNr"
+					if ($osub == "g") {
+						echo "\n\t\t<td class='head'>unverschl&uuml;sselte Lage</td>";
+					}
+				break;
+			}
+		echo "\n\t</tr>\n\t<tr>";
+			if ($osub != "g") { // nicht bei Gewanne
+
+				echo "\n\t\t<td title='Bundesland'>";
+				if ($showkey) {echo "<span class='key'>".$land."</span><br>";}
+				echo $bnam."&nbsp;</td>";
+
+				echo "\n\t\t<td title='Regierungsbezirk'>";
+				if ($showkey) {echo "<span class='key'>".$regbez."</span><br>";}
+				echo $rnam."&nbsp;</td>";
+
+				echo "\n\t\t<td title='Kreis'>";
+				if ($showkey and $osub != "g") {echo "<span class='key'>".$kreis."</span><br>";}
+				echo $knam."&nbsp;</td>";
+
+				echo "\n\t\t<td title='Gemeinde'>";
+				if ($showkey and $osub != "g") {echo "<span class='key'>".$gem."</span><br>";}
+				echo $gnam."&nbsp;</td>";
+
+				echo "\n\t\t<td title='Stra&szlig;e'>";
+				if ($showkey and $osub != "g") {echo "<span class='key'>".$lage."</span><br>";}
+				if ($ltyp == "o") {
+					echo "<span class='wichtig'>".$snam."</span>";
+				} else {
+					echo $snam;
+				}	
+				echo "&nbsp;</td>";
+			}
+
+			switch ($ltyp) {
+				case "m":
+					echo "\n\t\t<td title='Hausnummer und Zusatz'><span class='wichtig'>".$hsnr."</span></td>";
+				break;
+				case "p":
+					echo "\n\t\t<td title='Pseudonummer - Nebengeb&auml;ude zu dieser Hausnummer'>".$pseu."</td>"
+					."\n\t\t<td title='Laufende Nummer Nebengeb&auml;ude'><span class='wichtig'>".$lfd."</span></td>";
+				break;
+				case "o":
+					if ($osub == "g") {
+						echo "\n\t\t<td title='Gewanne'><span class='wichtig'>".$unver."</span></td>";
+					}
+				break;
+			}
+		echo "\n\t</tr>"
+	."\n\t</table>";
+
+	echo "\n\t</td>\n\t<td>";
+
+	// Kopf Rechts: weitere Daten?
+	if ($osub != "g") { // Link zu Strasse
+		echo "\n\t\t<p class='nwlink noprint'>"
+			."\n\t\t<a href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$strgml;
+			if ($showkey) {echo "&amp;showkey=j";}
+			echo "' title='Stra&szlig;e'>Stra&szlig;e <img src='ico/Strassen.png' width='16' height='16' alt=''></a>"
+		."\n\t\t</p>";
+	}
+
+echo "\n\t</td>\n</tr>\n</table>";
+// Ende Seitenkopf
+
+// F L U R S T U E C K E
+// ax_Flurstueck  >weistAuf>  ax_LagebezeichnungMitHausnummer
+// ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer
+// ++ auch FlÃ€chenverschneidung?
+if ($ltyp <> "p") { // Pseudonummer linkt nur GebÃ€ude
+	echo "\n\n<a name='fs'></a><h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>\n"
+	."\n<p>mit dieser Lagebezeichnung.</p>";
+	switch ($ltyp) {
+		case "m": $bezart="weistauf"; break;
+		case "o": $bezart="zeigtauf"; break;
+	}
+
+	$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche 
+	FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+	WHERE $1 = ANY(f.".$bezart.") AND f.endet IS NULL AND g.endet IS NULL 
+	ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$v = array($gmlid);
+	$resf = pg_prepare("", $sql);
+	$resf = pg_execute("", $v);
+	if (!$resf) {
+		echo "<p class='err'>Fehler bei Flurst&uuml;ck.</p>\n";
+		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}	
+	}
+
+	echo "\n<table class='fs'>"
+	."\n<tr>"
+		."\n\t<td class='head'>Gemarkung</td>"
+		."\n\t<td class='head'>Flur</td>"
+		."\n\t<td class='head fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'>Flurst.</td>"
+		."\n\t<td class='head fla'>Fl&auml;che</td>"
+		."\n\t<td class='head nwlink noprint' title='Link: weitere Auskunft'>weit. Auskunft</td>"
+	."\n</tr>";
+	$j=0;
+	while($rowf = pg_fetch_array($resf)) {
+		$flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
+		$fskenn=$rowf["zaehler"]; // Bruchnummer
+		if ($rowf["nenner"] != "") {$fskenn.="/".$rowf["nenner"];}
+		$flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
+		echo "\n<tr>"
+			."\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
+			echo $rowf["bezeichnung"]."</td>"
+			."\n\t<td>".$flur."</td>"
+			."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>"
+			."\n\t<td class='fla'>".$flae."</td>"
+			."\n\t<td>\n\t\t<p class='nwlink noprint'>"
+				."\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck <img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
+			."\n\t\t</p>\n\t</td>"
+		."\n</tr>";
+		$j++;
+	}
+	echo "\n</table>";
+	if ($j > 6) {echo "<p class='cnt'>".$j." Flurst&uuml;cke</p>";}
+}
+
+// L A G E
+// andere Lage mit gleicher Hausnummer suchen
+if ($ltyp <> "o") { // nicht bei Gewanne (Ohne HsNr)
+	echo "\n\n<a name='lage'></a><h3><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Lage</h3>\n"
+	."\n<p>andere Lagebezeichnungen zur gleichen Hausnummer.</p>";
+	$whereclaus="WHERE land= $1 AND regierungsbezirk= $2 AND kreis= $3 AND gemeinde= $4 AND lage= $5 ";
+
+	$url=$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;id=".$id; // Basis
+	if ($showkey)   {$url.="&amp;showkey=j";}
+	$url.="&amp;gmlid=";
+
+	switch ($ltyp) {
+		case "m": // aktuell: Hausnummer gefunden
+			// dazu alle NebengebÃ€ude suchen
+			echo "\n<p>Nebengeb&auml;ude:&nbsp;";
+			$sql ="SELECT l.gml_id, l.laufendenummer FROM ax_lagebezeichnungmitpseudonummer l "
+			.$whereclaus."AND lage= $6 AND pseudonummer= $7 AND l.endet IS NULL ORDER BY laufendenummer;";
+
+			$v = array($land,$regbez,$kreis,$gem,$lage,$lage,$hsnr);
+			$res = pg_prepare("", $sql);
+			$res = pg_execute("", $v);
+			if (!$res) {
+				echo "\n<p class='err'>Fehler bei Nebengeb&auml;ude.<br>".$sql."</p>\n";
+				if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."</p>";}
+			}
+			$neb=0;
+			while($row = pg_fetch_array($res)) {
+				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
+				$neb++;
+			}
+			if ($neb == 0) {echo "keine";}
+			echo "</p>";
+		break;
+
+		case "p": // aktuell NebengebÃ€ude: Haupt- und NebengebÃ€ude suchen
+			echo "\n<p>Hauptgeb&auml;ude: ";
+			$sql ="SELECT l.gml_id FROM ax_lagebezeichnungmithausnummer l ";
+			$sql.=$whereclaus."AND hausnummer= $6 AND l.endet IS NULL ;";
+
+			$v = array($land,$regbez,$kreis,$gem,$lage,$pseu);
+			$res = pg_prepare("", $sql);
+			$res = pg_execute("", $v);
+
+			if (!$res) {echo "<p class='err'>Fehler bei Hauptgeb&auml;ude.<br>".$sql."</p>\n";}
+			$hg=0;
+			while($row = pg_fetch_array($res)) {
+				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=m'>Haus-Nr ".$pseu."</a>&nbsp;&nbsp;";
+				$hg++;
+			}
+			if ($hg == 0) {echo "&nbsp;Kein Hauptgeb&auml;ude gefunden.";}
+			echo "</p>";
+
+			echo "\n<p>Weitere Nebengeb&auml;ude:&nbsp;";
+			$sql ="SELECT l.gml_id, l.laufendenummer FROM ax_lagebezeichnungmitpseudonummer l "
+			.$whereclaus."AND pseudonummer= $6 AND laufendenummer <> $7 AND l.endet IS NULL ORDER BY laufendenummer;";
+			$v=array($land,$regbez,$kreis,$gem,$lage,$pseu,$lfd);
+			$res = pg_prepare("", $sql);
+			$res = pg_execute("", $v);
+			if (!$res) {
+				echo "\n<p class='err'>Fehler bei Nebengeb&auml;ude.</p>\n";
+				if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."</p>";}			
+			}
+			$neb=0;
+			while($row = pg_fetch_array($res)) {
+				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
+				$neb++;
+			}
+			if ($neb == 0) {echo "keine";}
+			echo "</p>";
+		break;
+	}
+}
+
+// G E B A E U D E
+if ($ltyp <> "o") { // OhneHsNr linkt nur Flurst.
+	echo "\n\n<a name='geb'></a><h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>"
+	."\n<p>mit dieser Lagebezeichnung.</p>";
+	switch ($ltyp) {
+		case "p": $bezart="g.hat"; break;
+		case "m": $bezart="ANY(g.zeigtauf)"; break; // array
+	}
+//	SELECT k,v,d FROM alkis_wertearten WHERE element='ax_gebaeude' AND bezeichnung='bauweise';
+//	SELECT k,v,d FROM alkis_wertearten WHERE element='ax_gebaeude' AND bezeichnung='gebaeudefunktion';
+//	SELECT k,v,d FROM alkis_wertearten WHERE element='ax_gebaeude' AND bezeichnung='zustand';
+	// Bauweise: nur 1 Beschreibung (.d) von 12, Funktion: ca. 50% von 232, Zustand: 2 von 7
+
+	$sql ="SELECT g.gml_id, g.gebaeudefunktion, array_to_string(g.name, ',') AS name, g.bauweise, g.grundflaeche, g.zustand, round(st_area(g.wkb_geometry)::numeric,2) AS flaeche,
+	h.v AS hv, h.d AS hd, u.v AS uv, u.d AS ud, z.v AS zv, z.d AS zd FROM ax_gebaeude g 
+	LEFT JOIN alkis_wertearten h ON cast(g.bauweise AS character varying)=h.k AND h.element='ax_gebaeude' AND h.bezeichnung='bauweise'
+	LEFT JOIN alkis_wertearten u ON cast(g.gebaeudefunktion AS character varying)=u.k AND u.element='ax_gebaeude' AND u.bezeichnung='gebaeudefunktion'
+	LEFT JOIN alkis_wertearten z ON cast(g.zustand AS character varying)=z.k AND z.element='ax_gebaeude' AND z.bezeichnung='zustand'
+	WHERE $1 = ".$bezart." AND g.endet IS NULL;";
+
+	$v = array($gmlid);
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", $v);
+	if (!$res) {
+		echo "<p class='err'>Fehler bei Geb&auml;ude.</p>\n";
+		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	}
+	echo "\n<table class='geb'>"
+	."\n<tr>"
+		."\n\t<td class='head' title='Name ist der Eigenname oder die Bezeichnung des Geb&auml;udes.'>Name</td>"
+		."\n\t<td class='head fla' title='Fl&auml;che'>Fl&auml;che</td>"
+		."\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>"
+		."\n\t<td class='head' title='Bauweise ist die Beschreibung der Art der Bauweise'>Bauweise</td>"
+		."\n\t<td class='head' title='Zustand beschreibt die Beschaffenheit oder die Betriebsbereitschaft von Geb&auml;ude. Diese Attributart wird nur dann optional gef&uuml;hrt, wenn der Zustand des Geb&auml;udes vom nutzungsf&auml;higen Zustand abweicht.'>Zustand</td>"
+		."\n\t<td class='head nwlink' title='Link zu kompletten Hausdaten'>Haus</td>"
+	."\n</tr>";
+	$i=0;
+	while($row = pg_fetch_array($res)) {
+		$ggml=$row["gml_id"];
+		$gfla=$row["flaeche"];
+		echo "\n\t<tr>"
+			."<td>".$row["name"]."</td>"
+			."<td class='fla'>".$gfla." m&#178;</td>";
+
+			echo "<td title='".$ud."'>";
+			if ($showkey) {echo "<span class='key'>".$row["gebaeudefunktion"]."</span> ";}
+			echo $row["uv"]."</td>";
+
+			echo "<td title='".$hd."'>";
+			if ($showkey) {echo "<span class='key'>".$row["bauweise"]."</span> ";}
+			echo $row["hv"]."</td>";
+				
+			echo "<td title='".$zd."'>";
+			if ($showkey) {echo "<span class='key'>".$row["zustand"]."</span> ";}
+			echo $row["zv"]."</td>";
+
+			echo "\n\t<td class='nwlink noprint'>"
+				."<a title='Hausdaten' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml
+				."'><img src='ico/Haus.png' width='16' height='16' alt=''></a>"
+			."</td>"
+		."</tr>";
+	}
+	echo "\n</table>";
+}
+
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;ltyp=".$ltyp); ?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkis_conf_location.php
===================================================================
--- /trunk/info/info/alkisn/alkis_conf_location.php	(revision 362)
+++ /trunk/info/info/alkisn/alkis_conf_location.php	(revision 362)
@@ -0,0 +1,11 @@
+<?php
+/*	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Pfad zur Konfigurationsdatei der ALKIS-Auskunft.
+	Die Conf-Datei sollte aus Sicherheitsgruenden nicht unterhalb des Web-Root-Verzeichnisses liegen.
+
+	Version:
+	2016-02-23 Version fuer norGIS-ALKIS-Import, keine PostNAS-Versionsnummer im DB-Namen
+*/
+require_once("/opt/gdi/conf/alkisn_conf.php");
+$dbname = $dbpre.$gkz;  // Prefix + Mandant
+?>
Index: /trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisfsnw.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisfsnw.php	(revision 362)
@@ -0,0 +1,827 @@
+<?php
+/*	Modul: alkisfsnw.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	FlurstÃŒcksnachweis fuer ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+
+	ToDo:
+	- BodenschÃ€tzung anzeigen
+	- Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen)
+*/
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Flurst&uuml;cksnachweis</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck.ico">
+	<script type="text/javascript">
+		function ALKISexport() {
+			window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=flurstueck&gmlid=".$gmlid."'"; ?>);
+		}
+	</script>
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+// S t a r t
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+// Ein (ALB- ?) FlurstÃŒcks-Kennzeichen wurde alternativ zur gml_id ÃŒbermittelt
+if ($gmlid == '' and $fskennz != '') {
+	// Ãbergabe Format z.B. "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
+	$arr=explode("-", $fskennz, 4);
+	$zgemkg=trim($arr[0]);
+	if (strlen($zgemkg) == 20 and $arr[1] == "") { // Oh, ist wohl schon das Datenbank-Feldformat 
+		$fskzdb=$zgemkg;
+	} else { // NÃ¶, ist wohl eher ALB-Format
+		// Das Kennzeichen auseinander nehmen. 
+		if (strlen($zgemkg) == 6) {
+			$land=substr($zgemkg, 0, 2);
+			$zgemkg=substr($zgemkg, 2, 4);
+		} else { // kein schÃ¶ner Land ..
+			$land=$defland; // Default-Land aus config
+		}
+		$zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
+		$zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
+		$zn=explode("/", $zfsnr, 2); // Bruch?
+		$zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);	
+		$znenner=trim($zn[1]);
+		if (trim($znenner, " 0.") == "") { // kein Bruch oder nur Nullen
+			$znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
+		} else {
+			$zn=explode(".", $znenner, 2); // .00 wegwerfen
+			$znenner=str_pad($zn[0], 4 , "0", STR_PAD_LEFT);
+		}
+		// nun die Teile stellengerecht wieder zusammen setzen		
+		$fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
+	}
+	// Spalte "flurstueckskennzeichen" ist in DB indiziert
+	// Format z.B.'052647002001910013__' oder '05264700200012______'
+	$sql ="SELECT gml_id FROM ax_flurstueck WHERE flurstueckskennzeichen= $1 AND endet IS NULL ;";
+
+	$v = array($fskzdb);
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", $v);
+	if ($row = pg_fetch_array($res)) {
+		$gmlid=$row["gml_id"];
+	} else {
+		echo "<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
+	}
+	pg_free_result($res);
+}
+
+// F L U R S T U E C K
+$sql ="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche, st_area(f.wkb_geometry) AS fsgeomflae, f.zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung 
+FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+WHERE f.gml_id= $1 AND f.endet IS NULL;";
+
+$v = array($gmlid); // mit gml_id suchen
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+if ($row = pg_fetch_array($res)) {
+	$gemkname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+	$gmkgnr=$row["gemarkungsnummer"];
+	$bezirk=$row["regierungsbezirk"];
+	$kreis=$row["kreis"];
+	$gemeinde=$row["gemeinde"];
+	$flurnummer=$row["flurnummer"];
+	$zaehler=$row["zaehler"];
+	$nenner=$row["nenner"];
+	$flstnummer=$zaehler;
+	if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
+	$fsbuchflae=$row["amtlicheflaeche"]; // amtliche Fl. aus DB-Feld
+	$fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÃ€che
+	$fsbuchflaed=number_format($fsbuchflae,0,",",".") . " m&#178;"; // Display-Format dazu
+	$fsgeomflaed=number_format($fsgeomflae,0,",",".") . " m&#178;";
+	$entsteh=$row["zeitpunktderentstehung"];
+	$name=$row["name"]; // Fortfuehrungsnummer(n)
+	$arrn = explode(",", trim($name, "{}") ); // PHP-Array
+} else {
+	echo "<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "</body></html>";
+	return;
+}
+pg_free_result($res);
+// Balken
+if ($eig=="j") {
+	echo "<p class='fsei'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
+	echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck mit Eigent&uuml;mer</h2>\n";
+} else {
+	echo "<p class='fskennz'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
+	echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck</h2>\n";
+}
+echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
+	// darin Tabelle Kennzeichen
+	echo "\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>";
+		echo "\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>";
+		echo "\n\t<tr>\n\t\t<td title='Gemarkung'>";
+		if ($showkey) {
+			echo "<span class='key'>".$gmkgnr."</span><br>";
+		}
+		echo $gemkname."&nbsp;</td>";
+		echo "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>";
+		echo "\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>";
+	echo "\n\t</table>";
+echo "\n\t</td>\n\t<td>"; // rechte Seite
+	// FS-Daten 2 Spalten
+	echo "\n\t<table class='fsd'>";
+		echo "\n\t<tr>\n\t\t<td>Entstehung</td>";
+		echo "\n\t\t<td>".$entsteh."</td>\n\t</tr>";
+		echo "\n\t<tr>";
+			echo "\n\t\t<td>letz. Fortf</td>";
+			echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
+				foreach($arrn AS $val) { // Zeile f. jedes Element des Array
+					echo trim($val, '"')."<br>";
+				}
+			echo "</td>";
+		echo "\n\t</tr>";
+
+	echo "\n\t</table>";
+echo "\n\t</td>\n</tr>\n</table>";
+//	echo "\n<tr>\n\t<td>Finanzamt</td>\n\t<td>".$finanzamt." ".$finame  . "</td>\n</tr>";
+// Ende Seitenkopf
+
+echo "\n<hr>";
+echo "\n<p class='nwlink noprint'>weitere Auskunft:</p>"; // oben rechts von der Tabelle
+echo "\n<table class='fs'>";
+
+// ** G e b i e t s z u g e h o e r i g k e i t **
+// eine Tabellenzeile mit der Gebietszugehoerigkeit eines Flurstuecks wird ausgegeben
+// Schluessel "land" wird nicht verwendet, gibt es Bestaende wo das nicht einheitlich ist?
+echo "\n<tr>\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>";
+
+// G e m e i n d e
+$sql="SELECT bezeichnung FROM ax_gemeinde WHERE regierungsbezirk= $1 AND kreis= $2 AND gemeinde= $3 AND endet IS NULL;"; 
+
+$v = array($bezirk,$kreis,$gemeinde);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Gemeinde</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+}
+$row = pg_fetch_array($res);
+$gnam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+echo "\n\t<td class='lr'>Gemeinde</td><td class='lr'>";
+if ($showkey) {
+	echo "<span class='key'>(".$gemeinde.")</span> ";
+}
+echo $gnam."</td><td width='80'>";  // Mindest-Breite der Spalte fuer die Links 
+	// Link zur FlurstÃŒcks-Historie (passt nicht ganz in die Zeile "Gemeinde", aber gut unter "weitere Auskunft")
+	echo "\n<p class='nwlink noprint'>";
+		echo "\n\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+			if ($showkey)   {echo "&amp;showkey=j";}
+			echo "' title='Vorg&auml;nger-Flurst&uuml;cke'>Historie ";
+			echo "<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>";
+		echo "</a>";
+	echo "\n</p>";
+echo "</td></tr>";
+pg_free_result($res);
+
+// K r e i s
+$sql="SELECT bezeichnung FROM ax_kreisregion WHERE regierungsbezirk= $1 AND kreis= $2 AND endet IS NULL;"; 
+$v = array($bezirk,$kreis);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Kreis</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+}
+$row = pg_fetch_array($res);
+$knam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+echo "<tr><td>&nbsp;</td><td>Kreis</td><td>";
+if ($showkey) {
+	echo "<span class='key'>(".$kreis.")</span> ";
+}
+echo $knam."</td><td>&nbsp;</td></tr>";
+pg_free_result($res);
+
+// R e g - B e z
+$sql="SELECT bezeichnung FROM ax_regierungsbezirk WHERE regierungsbezirk= $1 AND endet IS NULL;";
+$v = array($bezirk);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Regierungsbezirk</p>";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+}
+$row=pg_fetch_array($res);
+$bnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+echo "<tr><td>&nbsp;</td><td>Regierungsbezirk</td><td>";
+if ($showkey) {
+	echo "<span class='key'>(".$bezirk.")</span> ";
+}
+echo $bnam."</td><td>&nbsp;</td></tr>";
+pg_free_result($res);
+// ENDE G e b i e t s z u g e h o e r i g k e i t
+
+// ** L a g e b e z e i c h n u n g **
+
+// Lagebezeichnung MIT Hausnummer
+// ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
+$sql="SELECT DISTINCT l.gml_id, l.gemeinde, l.lage, l.hausnummer, s.bezeichnung 
+FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)  
+JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL    
+ORDER BY l.gemeinde, l.lage, l.hausnummer;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+
+if (!$res) {
+	echo "<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
+	if ($debug > 1) {
+		//echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";
+		echo "<p class='dbg'>Fehler:".pg_last_error()."</p>";
+	}
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+} else {
+	$j=0;
+	while($row = pg_fetch_array($res)) {
+		$sname = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
+		echo "\n<tr>\n\t";
+			if ($j == 0) {
+				echo "<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
+			} else {
+				echo "<td>&nbsp;</td>";
+			}
+			echo "\n\t<td>&nbsp;</td>";
+			echo "\n\t<td class='lr'>";
+			if ($showkey) {
+				echo "<span class='key' title='StraÃenschl&uuml;ssel'>(".$row["lage"].")</span>&nbsp;";
+			}
+			echo $sname."&nbsp;".$row["hausnummer"]."</td>";
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+				echo "\n\t\t\t<a title='Lagebezeichnung mit Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"];
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "'>Lage ";
+				echo "<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>";
+			echo "\n\t\t</p>\n\t</td>";
+		echo "\n</tr>";
+		$j++;
+	}
+	$cnt_adressen=$j;
+	pg_free_result($res);
+}
+// +++ Verbesserung: mehrere HsNr zur gleichen StraÃe als Liste?
+
+// Lagebezeichnung OHNE Hausnummer  (Gewanne oder nur Strasse)
+// ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
+$sql ="SELECT l.gml_id, l.unverschluesselt, l.gemeinde, l.lage, s.bezeichnung 
+FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf) 
+LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+WHERE f.gml_id = $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
+	//if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$j=0;
+// Es wird auch eine Zeile ausgegeben, wenn kein Eintrag gefunden!
+while($row = pg_fetch_array($res)) {
+	$gewann = htmlentities($row["unverschluesselt"], ENT_QUOTES, "UTF-8");
+	$skey=$row["lage"]; // Strassenschl.
+	$lgml=$row["gml_id"]; // key der Lage
+	if (!$gewann == "") {
+		echo "\n<tr>";
+			echo "\n\t<td class='ll' title='Lagebezeichnung'><img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''> Gewanne:</td>";
+			echo "\n\t<td></td>";
+			echo "\n\t<td class='lr'>".$gewann."</td>";
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+				echo "\n\t\t\t<a title='Lagebezeichnung Ohne Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
+				if ($showkey) {echo "&amp;showkey=j";}				
+				echo "'>\n\t\t\tLage <img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''></a>";
+			echo "\n\t\t</p>\n\t</td>";
+		echo "\n</tr>";
+	}
+	// Gleicher DB-Eintrag in zwei HTML-Zeilen, besser nur ein Link
+	if ($skey > 0) {
+		echo "\n<tr>";
+			echo "\n\t<td class='ll'><img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''> Stra&szlig;e:</td>";
+			echo "\n\t<td></td>";
+			echo "\n\t<td class='lr'>";
+			if ($showkey) {
+				echo "<span class='key'>(".$skey.")</span>&nbsp;";
+			}
+			echo $row["bezeichnung"]."</td>";
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+				echo "\n\t\t\t<a title='Lagebezeichnung Ohne Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
+				if ($showkey) {echo "&amp;showkey=j";}				
+				echo "'>\n\t\t\tLage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''>\n\t\t\t</a>";
+			echo "\n\t\t</p>\n\t</td>";
+		echo "\n</tr>";
+	}
+	$j++;
+}
+pg_free_result($res);
+// ENDE  L a g e b e z e i c h n u n g
+
+// ** N U T Z U N G ** Gemeinsame FlÃ€che von NUA und FS
+// Tabellenzeilen (3 Spalten) mit tats. Nutzung zu einem FS ausgeben
+
+/* N U T Z U N G   C l a s s i c (alt)
+$sql ="SELECT m.title, m.fldclass, m.fldinfo, n.gml_id, n.nutz_id, n.class, n.info, n.zustand, n.name, n.bezeichnung, m.gruppe, 
+st_area(st_intersection(n.wkb_geometry,f.wkb_geometry)) AS schnittflae, c.label, c.blabla 
+FROM ax_flurstueck f, nutzung n JOIN nutzung_meta m ON m.nutz_id=n.nutz_id 
+LEFT JOIN nutzung_class c ON c.nutz_id=n.nutz_id AND c.class=n.class 
+WHERE f.gml_id= $1 AND st_intersects(n.wkb_geometry,f.wkb_geometry) = true 
+AND st_area(st_intersection(n.wkb_geometry,f.wkb_geometry)) > 0.05 
+AND f.endet IS NULL ORDER BY schnittflae DESC;";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Suche tats. Nutzung</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+$the_Xfactor=$fsbuchflae / $fsgeomflae; // geom. ermittelte FlÃ€che auf amtl. BuchflÃ€che angleichen
+$j=0;
+while($row = pg_fetch_array($res)) {
+	$grupp=$row["gruppe"]; // 4 Gruppen
+	$nutzid=$row["nutz_id"]; // 27 Tabellen, num. Key
+	$title=htmlentities($row["title"], ENT_QUOTES, "UTF-8"); // Titel der 27 Tabellen
+	$fldclass=$row["fldclass"]; // Name 1. Zusatzfeld
+	$fldinfo= $row["fldinfo"];  // Name 2. Zus.
+	$gml=$row["gml_id"];
+	$class=$row["class"]; // 1. Zusatzfeld verschlÃŒsselt -> nutzung_class
+	$info=$row["info"]; // 2. Zus. verschlÃŒsselt (noch keine Info zum entschl.)
+	$schnittflae=$row["schnittflae"];
+	$label=$row["label"]; // Nutzungsart entschlÃŒsselt
+	$zus=$row["zustand"]; // im Bau
+	$nam=$row["name"]; // Eigenname
+	$bez=$row["bezeichnung"]; // weiterer Name (unverschl.)
+	$blabla=htmlentities($row["blabla"], ENT_QUOTES, "UTF-8");
+	$label=str_replace("/", "<br>", $label); // Ersetzt "/" durch html-Zeilenwechsel
+
+	echo "\n<tr>\n\t";
+		if ($j == 0) {
+			echo "<td class='ll' title='Abschnitt der tats&auml;chlichen Nutzung'><img src='ico/Abschnitt.png' width='16' height='16' alt=''> Nutzung:</td>";
+		} else {
+			echo "<td>&nbsp;</td>";
+		}
+		$absflaebuch = $schnittflae * $the_Xfactor; // angleichen geometrisch an amtliche FlÃ€che
+		$schnittflae = number_format($schnittflae,1,",",".") . " m&#178;"; // geometrisch
+		$absflaebuch = number_format($absflaebuch,0,",",".") . " m&#178;"; // Abschnitt an BuchflÃ€che angeglichen
+		echo "\n\t<td class='fla' title='geometrisch berechnet: ".$schnittflae."'>".$absflaebuch."</td>";
+
+		echo "\n\t<td class='lr'>";
+			if ($class == 0) {
+				if ($showkey) {echo "<span class='key'>(".$nutzid.")</span> ";}
+				echo $title; // Name der Tabelle
+			} elseif ( ($fldclass == "Funktion" OR $fldclass == "Vegetationsmerkmal") AND $label != "") { // Kurze Anzeige
+				if ($showkey) {echo "<span class='key' title='".$fldclass."'>(".$nutzid."-".$class.")</span> ";}
+				if ($blabla = "") {
+					echo $label;
+				} else {
+					echo "<span title='".$blabla."'>".$label."</span>";
+				}
+			} else { // ausfuehrlichere Anzeige
+				echo $title; // NUA-Tabelle
+				if ($class != "") { // NUA-SchlÃŒssel
+					echo ", ".$fldclass.": "; // Feldname
+					if ($showkey) {echo "<span class='key' title='".$fldclass."'>(".$nutzid."-".$class.")</span> ";}
+					if ($label != "") { // Bedeutung dazu wurde erfasst
+						if ($blabla = "") {
+							echo $label;
+						} else {
+							echo "<span title='".$blabla."'>".$label."</span>";
+						}
+					} else { // muss noch erfasst werden
+						echo $class." "; // SchlÃŒssel als Ersatz fÃŒr Bedeutung
+					}
+				}
+			}
+			if ($info != "") { // manchmal ein zweites Zusatzfeld (wie entschlÃŒsseln?)
+				echo ", ".$fldinfo."=".$info;
+			}
+			if ($zus != "") { // Zustand
+				echo "\n\t\t<br>";
+				if ($showkey) {echo "<span class='key'>(".$zus.")</span> ";}
+				echo "<span title='Zustand'>";				
+				switch ($zus) {
+					case 2100: echo "AuÃer Betrieb, stillgelegt, verlassen"; break;
+					case 4000: echo "Im Bau"; break;
+					case 8000: echo "Erweiterung, Neuansiedlung"; break;
+					default: echo "Zustand: ".$zus; break;
+				}
+				echo "</span>";
+			}
+			if ($nam != "") {echo "<br>Name: ".$nam;}
+			if ($bez != "") {echo "<br>Bezeichnung: ".$bez;}
+
+		echo "</td>";
+		echo "\n\t<td>";
+			switch ($grupp) { // Icon nach 4 Objektartengruppen
+				case "Siedlung":   $ico = "Abschnitt.png"; break;
+				case "Verkehr":	   $ico = "Strassen_Klassifikation.png"; break;
+				case "Vegetation": $ico = "Wald.png"; break;
+				case "GewÃ€sser":   $ico = "Wasser.png";	break;
+				default:	$ico = "Abschnitt.png";	break;
+			}
+			// Icon ist auch im Druck sichtbar, class='noprint' ?		
+			echo "<p class='nwlink'><img title='".$title."' src='ico/".$ico."' width='16' height='16' alt='NUA'></p>";
+		echo "</td>";
+	echo "\n</tr>";
+	$j++;
+}
+  E N D E   N U T Z U N G   C l a s s i c  */
+
+/* Status "Nutzung":
+
+ Die Classic-Tabelle "nutzung" ist eine Zusammenfassung aller Tabellen mit Nutzungs-FlÃ€chen
+ Die Classic-Tabelle "nutzung_meta" zeigt die Kategorie und Gruppe des Nutzungs-Abschnitts an.
+
+ Aus der norGIS-Struktur wird ersatzweise VORLÃUFIG die Tabelle "nutz_21" verwendet,
+ die das alte ALB-Format der Nutzungs-Abschnitte von FlurstÃŒcken simuliert.
+ Hier finden sich bereits verschnittene FlÃ€chen, aber die gml_id fehlt.
+
+ Die EntschlÃŒsselung der Nutzungsart in den verschiedenen ALKIS-Varianten ist darin unterentwickelt.
+ Diese ist eigentlich fÃŒr jede der getrennten Tabellen der Gruppe Nutzungsrt individuell.
+ Die Classic-LÃ¶sung mit 2 Zusatzfeldern war schon sehr pauschalisiert, aber 
+ durch die RÃŒck-Konvertierung in ALB-Strukturen in der norGIS-Version ist das zu stark vereinfacht.
+ z.B. wird "WohnbauflÃ€che" mit der Zusatzeigenschaft "Art der Bebauung": 'Offen'
+ nun zur Nutzungsart "Offen".
+ Durch JOIN auf die "alkis_elemente" mit einem Teil des SchlÃŒssels wird das zur "WohnbauflÃ€che, Offen".
+ Es sollte eine Tabellen-Struktur bereit gestellt werden, die auch aussagt, dass der Wert "Offen" zur
+ Zusatz-Eigenschaft "Art der Bebauung" gehÃ¶rt. Dazu muss das PostProcessing erweitert werden. */
+
+$sql="SELECT e.definition, trim(both FROM n.nutzsl) AS nutzsl, trim(both FROM n.fl) AS fl, trim(both FROM s.nutzung) AS nutzung
+ FROM nutz_21 n JOIN nutz_shl s ON n.nutzsl = s.nutzshl
+ JOIN alkis_elemente e ON e.kennung = substring(n.nutzsl from 1 for 5)
+WHERE n.flsnr = $1 ORDER BY cast(n.fl AS integer) DESC;";
+// Flurstueckskennzeichen mit Trennzeichen im ALB-Format wie 'llgggg-fff-zzzzz/nnn'
+
+$fskennzalb=$defland.$gmkgnr."-".str_pad($flurnummer,3,"0",STR_PAD_LEFT)."-".str_pad($zaehler,5,"0",STR_PAD_LEFT)."/".str_pad($nenner,3,"0",STR_PAD_LEFT);
+// echo "<p class='err'>Kennz ALB='".$fskennzalb."'</p>";
+
+$v = array($fskennzalb);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {
+	echo "<p class='err'>Fehler bei Suche tats. Nutzung</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = FS-Kennz = '".$fskennzalb."'</p>";}
+}
+
+$j=0;
+while($row = pg_fetch_array($res)) {
+	$flae=$row["fl"]; // BuchflÃ€che
+	$nutzsl=$row["nutzsl"]; // SchlÃŒssel
+	$nutzung=$row["nutzung"]; // Bezeichnung aus ALB-Tabelle, "fein"
+	$defi=$row["definition"]; // Langer Text mit Beschreibung
+	$title=htmlentities($defi, ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
+
+	// Aus der Definition den String zwischen den ersten '' ausschneiden
+	$pos = strpos($defi, "'") + 1;
+	$len = strpos($defi, "'", $pos) - $pos;
+	$nutztab=substr($defi, $pos, $len); // Nutzungart Kategorie aus der Beschreibung ausschneiden
+
+	echo "\n<tr>\n\t";
+		if ($j == 0) {
+			echo "<td class='ll' title='Abschnitt der tats&auml;chlichen Nutzung'><img src='ico/Abschnitt.png' width='16' height='16' alt=''> Nutzung:</td>";
+		} else {
+			echo "<td>&nbsp;</td>";
+		}
+		$absflaebuch = number_format($flae,0,",",".") . " m&#178;"; // Formatierte Abschnitts-Buch-FlÃ€che
+		echo "\n\t<td class='fla' title='Buchfl&auml;che des Abschnitts'>".$absflaebuch."</td>";
+
+		echo "\n\t<td class='lr' title='".$title."'>";
+			if ($showkey) {echo "<span class='key'>(".$nutzsl.")</span> ";}
+			echo $nutztab.", ".$nutzung;
+		echo "</td>";
+		echo "\n\t<td>";
+/*		//	Derzeit ist keine Gruppe zugeordnet
+			switch ($grupp) { // Icon nach 4 Objektartengruppen
+				case "Siedlung":   $ico = "Abschnitt.png"; break;
+				case "Verkehr":	   $ico = "Strassen_Klassifikation.png"; break;
+				case "Vegetation": $ico = "Wald.png"; break;
+				case "GewÃ€sser":   $ico = "Wasser.png";	break;
+				default:	$ico = "Abschnitt.png";	break;
+			}
+			// Icon ist auch im Druck sichtbar, class='noprint' ?		
+			echo "<p class='nwlink'><img title='".$title."' src='ico/".$ico."' width='16' height='16' alt='NUA'></p>";
+*/
+		echo "</td>";
+	echo "\n</tr>";
+	$j++;
+}
+pg_free_result($res);
+// ENDE  N U T Z U N G
+
+echo "\n<tr>"; // Summenzeile
+	echo "\n\t<td class='ll' title='amtliche Fl&auml;che (Buchfl&auml;che)'>Fl&auml;che:</td>";
+	echo "\n\t<td class='fla sum'>";
+	echo "<span title='geometrisch berechnete Fl&auml;che = ".$fsgeomflaed."' class='flae'>".$fsbuchflaed."</span></td>";
+
+	// Flaeche und Link auf GebÃ€ude-Auswertung
+	echo "\n\t<td>&nbsp;</td>\n\t<td>";
+		echo "\n\t\t<p class='nwlink noprint'>"; // Gebaeude-Verschneidung
+			echo "\n\t\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+			if ($showkey) {echo "&amp;showkey=j";}
+			if ($cnt_adressen > 0) { // wenn Adresse vorgekommen ist
+				echo "' title='Geb&auml;udenachweis'>Geb&auml;ude ";
+			} else { // GebÃ€ude mit Adresse gibt es NICHT, das ist klar
+				echo "' title='Suche Geb&auml;ude ohne Adresse auf dem Flurst&uuml;ck oder angrenzende Geb&auml;ude'>Suche ";
+			}
+			echo "<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
+		echo "\n\t\t</p>";
+	echo "\n\t</td>";
+echo "\n</tr>";
+
+// H i n w e i s  auf Bodenneuordnung oder eine strittige Grenze
+// b.name, b.artderfestlegung, 
+
+$sql_boden ="SELECT a.k AS wert, a.v AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, 
+b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key 
+FROM ax_bauraumoderbodenordnungsrecht b 
+LEFT JOIN alkis_wertearten a ON cast(b.artderfestlegung AS character varying)=a.k AND a.element='ax_bauraumoderbodenordnungsrecht' AND a.bezeichnung='artderfestlegung'
+LEFT JOIN ax_dienststelle d ON b.stelle=d.stelle 
+WHERE b.endet IS NULL AND d.endet IS NULL  
+AND (ST_Within((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL ), wkb_geometry)
+ OR ST_Overlaps((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL), wkb_geometry));";
+
+pg_prepare($con, "bodeneuordnung", $sql_boden);
+$res_bodeneuordnung = pg_execute($con, "bodeneuordnung", array($gmlid));
+if (!$res_bodeneuordnung) {
+	echo "<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql_boden."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+$sql_str="SELECT gml_id FROM ax_besondereflurstuecksgrenze WHERE endet IS NULL AND 1000 = ANY(artderflurstuecksgrenze) 
+AND ST_touches((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL),wkb_geometry);";
+
+pg_prepare($con, "strittigeGrenze", $sql_str);
+$res_strittigeGrenze = pg_execute($con, "strittigeGrenze", array($gmlid));
+if (!$res_strittigeGrenze) {
+	echo "<p class='err'>Fehler bei strittige Grenze</p>\n";
+	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql_str."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if (pg_num_rows($res_bodeneuordnung) > 0 OR pg_num_rows($res_strittigeGrenze) > 0) {
+	echo "\n<tr>";
+	echo "\n\t<td title='Hinweise zum Flurst&uuml;ck'><h6><img src='ico/Hinweis.png' width='16' height='16' alt=''> ";
+	echo "Hinweise:</td></h6>\n\t<td colspan=3>&nbsp;</td>";
+	echo "\n</tr>";
+
+	if (pg_num_rows($res_bodeneuordnung) > 0) {
+
+		while ($row = pg_fetch_array($res_bodeneuordnung)) { // 3 Zeilen je Verfahren
+
+			// Zeile 1 - kommt immer, darum hier den Link
+			echo "\n<tr title='Bau-, Raum- oder Bodenordnungsrecht'>"
+				."\n\t<td>Bodenrecht:</td>"
+				."\n\t<td>Festlegung</td>"; // "Art der Festlegung" zu lang
+				echo "\n\t<td>";
+					if ($showkey) {echo "<span class='key'>(".$row['wert'].")</span> ";}
+					echo $row['art_verf']
+				."</td>\n\t<td>";
+				// LINK:
+				echo "\n\t\t<p class='nwlink noprint'>";
+					echo "\n\t\t\t<a href='alkisbaurecht.php?gkz=".$gkz."&amp;gmlid=".$row['verf_gml'];
+					if ($showkey) {echo "&amp;showkey=j";}
+					echo "' title='Bau-, Raum- oder Bodenordnungsrecht'>Recht <img src='ico/Gericht.png' width='16' height='16' alt=''></a>";
+				echo "\n\t\t</p>"		
+				."</td>"
+			."\n</tr>";
+
+			// Zeile 2
+			$dstell=$row['stelle_key'];
+			if ($dstell != "") { // Kann auch leer sein
+				echo "\n<tr title='Flurbereinigungsbeh&ouml;rde'>";
+					echo "\n\t<td>&nbsp;</td>"
+					."\n\t<td>Dienststelle</td>"
+					."\n\t<td>";
+						if ($showkey) {echo "<span class='key'>(".$dstell.")</span> ";}
+						echo $row['stelle_bez'];
+					echo "</td>"
+					."\n\t<td>&nbsp;</td>"
+				."\n</tr>";
+			}
+
+			// Zeile 3
+			$vbez=$row['verf_bez']; // ist nicht immer gefÃŒllt
+			$vnam=$row['verf_name']; // noch seltener
+			if ($vbez != "") {
+				echo "\n<tr title='Verfahrensbezeichnung'>";
+					echo "\n\t<td>&nbsp;</td>\n\t<td>Verfahren</td>";
+					echo "\n\t<td>";
+						if ($vnam == "") {
+							echo $vbez; // nur die Nummer
+						} else {	// Name oder beides
+							if ($showkey) {echo "<span class='key'>(".$vbez.")</span> ";}
+							echo $vnam;
+						}
+		 			echo "</td>";
+					echo "\n\t<td>&nbsp;</td>";
+				echo "\n</tr>";
+			}
+		}
+	}
+	if (pg_num_rows($res_strittigeGrenze) > 0) { // 1 Zeile
+		echo "\n<tr>\n<td>Strittige Grenze:</td>"
+		."<td colspan=2>Mindestens eine Flurst&uuml;cksgrenze ist als <b>strittig</b> zu bezeichnen. Sie kann nicht festgestellt werden, weil die Beteiligten sich nicht &uuml;ber den Verlauf einigen. Nach sachverst&auml;ndigem Ermessen der Katasterbeh&ouml;rde ist anzunehmen, dass das Liegenschaftskataster nicht die rechtm&auml;&szlig;ige Grenze nachweist.</td>"
+		."\n<td>&nbsp;</td>\n</tr>";
+	}
+}
+echo "\n</table>";
+
+// G R U N D B U C H
+echo "\n<table class='outer'>"
+	."\n<tr>"
+		."\n\t<td>"
+			."\n\t\t<a name='gb'></a>\n\t\t<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>"
+		."\n\t</td>"
+		."\n\t<td>"
+			."\n\t\t<p class='nwlink noprint'>"
+				."\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid;
+				if ($showkey) {echo "&amp;showkey=j";}
+
+				// Umschalter: FS-Nachw ruft sich selbst mit geaend. Param. auf. Posit. auf Marke #gb
+				if ($eig=="j") {
+					echo "&amp;eig=n#gb' title='Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
+				} else { // ++ kÃ¶nnte man sich sparen, wenn unten nur ein "fiktives Blatt" kommt
+					echo "&amp;eig=j#gb' title='Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
+					."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
+				}
+			echo "\n\t\t</p>"
+		."\n\t</td>"
+	."\n</tr>"
+."\n</table>\n";
+
+// B U C H U N G S S T E L L E N  zum FS (istGebucht)
+$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer as lfd, s.zaehler, s.nenner, s.nummerimaufteilungsplan as nrpl, s.beschreibungdessondereigentums as sond, b.v AS bart, b.d AS barttitle
+FROM ax_flurstueck f JOIN ax_buchungsstelle s ON s.gml_id=f.istgebucht 
+LEFT JOIN alkis_wertearten b ON cast(s.buchungsart AS character varying)=b.k AND b.element='ax_buchungsstelle' AND b.bezeichnung='buchungsart'
+WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL ORDER BY s.laufendenummer;";
+
+$v = array($gmlid);
+$ress = pg_prepare("", $sql);
+$ress = pg_execute("", $v);
+if (!$ress) {
+	echo "\n<p class='err'>Keine Buchungsstelle.</p>\n";
+	if ($debug > 1) {
+		echo "<p class='dbg'>Fehler:".pg_result_error($ress)."</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	}
+}
+$bs=0; // Z.BuchungsStelle
+while($rows = pg_fetch_array($ress)) {
+	$gmls=$rows["gml_id"]; // gml b-Stelle
+	$lfd=$rows["lfd"]; // BVNR
+	$barttitle=htmlentities($rows["barttitle"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
+
+	// B U C H U N G S B L A T T  zur Buchungsstelle (istBestandteilVon)
+	$sql="SELECT b.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, wb.v AS blattartv, wb.d AS blattartd, z.bezeichnung 
+	FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON b.gml_id=s.istbestandteilvon 
+	LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk 
+	LEFT JOIN alkis_wertearten wb ON cast(b.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart' 
+	WHERE s.gml_id = $1 AND s.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL
+	ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung ;";
+
+	$v=array($gmls);
+	$resg=pg_prepare("", $sql);
+	$resg=pg_execute("", $v);
+	if (!$resg) {
+		echo "\n<p class='err'>Kein Buchungsblatt.</p>\n";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmls."'</p>";}
+	}
+	$bl=0; // Z.Blatt
+	while($rowg = pg_fetch_array($resg)) {
+		$gmlg=$rowg["gml_id"];
+		$beznam=$rowg["bezeichnung"];
+		$blattkeyg=$rowg["blattart"]; // Key
+		$blattartg=$rowg["blattartv"]; // Value
+		echo "\n<hr>"
+		."\n<table class='outer'>"
+		."\n<tr>"; // 1 row only
+			echo "\n\t<td>"; // Outer linke Spalte:
+
+				// Rahmen mit GB-Kennz
+				if ($blattkeyg == 1000) {
+					echo "\n\t<table class='kennzgb' title='Bestandskennzeichen'>";
+				}else {
+					echo "\n\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
+				}
+					echo "\n\t<tr>\n\t\t<td class='head'>Bezirk</td>"
+						."\n\t\t<td class='head' title='".$rowg["blattartd"]."'>";
+						if ($showkey) {echo "<span class='key'>".$blattkeyg."</span>&nbsp;";}
+						echo $blattartg."</td>"
+						."\n\t\t<td class='head'>Lfd-Nr.</td>"
+						."\n\t\t<td class='head'>Buchungsart</td>"
+					."\n\t</tr>"
+					."\n\t<tr>"
+						."\n\t\t<td title='Grundbuchbezirk'>";
+							if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span><br>";}
+						echo $beznam."&nbsp;</td>";
+
+						echo "\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$rowg["blatt"]."</span></td>";
+
+						echo "\n\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$rows["lfd"]."</td>";
+
+						echo "\n\t\t<td title='".$barttitle."'>";
+						if ($showkey) {echo "<span class='key'>".$rows["buchungsart"]."</span><br>";}
+						echo $rows["bart"]."</td>";
+					echo "\n\t</tr>";
+				echo "\n\t</table>";
+
+				// Miteigentumsanteil
+				if ($rows["zaehler"] <> "") {
+					echo "\n<p class='ant'>".$rows["zaehler"]."/".$rows["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
+				}
+			echo "\n</td>\n<td>"; // Outer rechte Spalte: NW-Links
+				echo "\n\t<p class='nwlink noprint'>weitere Auskunft:<br>"
+					."\n\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg."#bvnr".$lfd;
+						if ($showkey)   {echo "&amp;showkey=j";}
+						if ($blattkeyg == 1000) {
+							echo "' title='Grundbuchnachweis mit kompletter Eigent&uuml;merangabe'>";
+						} else {
+							echo "' title='Grundbuchnachweis'>";
+						}
+						echo $blattartg." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
+					."</a>"
+				."\n\t</p>";
+
+				ber_bs_hinw($gmls); // berechtigte Buchungstellen Hinweis
+
+			echo "\n</td>"
+		."\n</tr>"
+		."\n</table>";
+
+		// +++ Weitere Felder ausgeben? BeschreibungDesUmfangsDerBuchung
+		if ($rows["sond"] != "") {
+			echo "<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum<br>".$rows["sond"]."</p>";
+		}
+		if ($rows["nrpl"] != "") {
+			echo "<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$rows["nrpl"]."</span> im Aufteilungsplan.</p>";
+		}
+
+		// E I G E N T U E M E R, zum GB
+		// Person <-benennt< AX_Namensnummer  >istBestandteilVon-> AX_Buchungsblatt
+		if ($eig=="j") { // Wahlweise mit/ohne EigentÃŒmer
+			echo "\n\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>\n";
+			$n = eigentuemer($con, $gmlg, false, ""); // ohne Adresse
+ 			if ($n == 0) {
+				if ($blattkeyg == 1000) {
+					echo "\n<p class='err'>Keine Namensnummer gefunden.</p>";
+				} else {
+					echo "\n<p>ohne Eigent&uuml;mer.</p>";
+				}
+			}
+		}
+		$bl++;
+	}
+	if ($bl == 0) {echo "\n<p class='err'>Kein Buchungsblatt gefunden.</p>";}
+	$bs++;
+}
+pg_free_result($resg);
+if ($bs == 0) {echo "\n<p class='err'>Keine Buchungstelle gefunden.</p>";}
+pg_close($con);
+echo <<<END
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_fs.png" width="32" height="16" alt="Export"></a>&nbsp;
+	</div>
+</form>
+END;
+
+footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig);
+
+?>
+
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisauszug.css
===================================================================
--- /trunk/info/info/alkisn/alkisauszug.css	(revision 362)
+++ /trunk/info/info/alkisn/alkisauszug.css	(revision 362)
@@ -0,0 +1,155 @@
+/*	Modul: alkisauszug.css
+	S t y l e s zur ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+
+	Version:
+	2010-09-21	Inlay
+	2010-09-30	body-width bei Print
+	2010-10-12	class p.fsd: margin statt position-relative, dann keine Scrollbar
+	2011-01-04	Spalte td.fla im fsnw
+	2011-01-26	einheitlich td padding-top 6px
+	2011-11-16	FS-Historie
+	2013-06-27	p.recht
+	2014-01-27	strasse, hsnr, Print-Balken
+	2014-09-15	PostNAS 0.8: p.cnt
+	2014-12-30	Neu: td.fsnr
+	2016-02-24	Umstellung norBIT-Struktur
+*/
+body	{background-color: #FDFFFD;}
+p, body	{font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+	font-size: 10pt; color: #000033; margin-top: 2pt; margin-bottom: 2pt;}
+
+/* ** Banner im Kopf (farbiger Balken), Farbcode fuer Nachweis-Art ** */
+p.fsausk,p.fskennz,p.fsei,p.fshis,p.gbkennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht {text-align: right;}
+p.fsausk	{background-color: teal; color: silver;}	/* Uebersichts-Seite Flurstuecks-Auskunft */
+p.fskennz,p.fsei{background-color: navy; color: silver;}	/* Flurstuecks-Nachweis */
+/* p.fsei	{background-color: olive; color: silver;}*/	/* Flurstuecks- und Eigentuemer-Nachweis */
+p.fshis		{background-color: gray; color: white;}		/* Flurstuecks-Historie */
+p.gbkennz	{background-color: green; color: silver;}	/* Bestandsnachweis */
+p.nakennz	{background-color: maroon; color: silver;}	/* Personen- und Adressdaten */
+p.geb		{background-color: yellow; color: gray;}	/* Gebaeude zum FS */
+p.lage		{background-color: lime; color: gray;}		/* Lage/Adresse zum FS */
+p.strasse	{background-color: limegreen; color: slategray;}	/* Strasse */
+p.recht		{background-color: #F0F8FF; color: gray;}	/* Baurecht, Bodenneuordnung */
+
+/* Format nach Inhalt */
+/* p.bezieh	{text-align: right; background: olive;	color: silver;} */ /* Beziehungen */
+p.fsd		{margin-left: 170px;}	/* Flst-Flaeche */
+p.gbl		{position: relative; left: 60px;}	/* Nam: Buchungsstelle*/
+p.zus		{margin: 2pt; padding: 2pt; border:1px dotted maroon; background: white;} /* Zusatz zum Eigent., gerahmt */
+p.avh		{font-style: italic; color: navy;}	/* Anteilsverhaeltnis */
+p.ant		{font-style: italic; position: relative;left: 12px;} /* Anteil am FS */
+p.geig		{color: navy;}		/* GB-Nachw. Eigentuemer Name */
+p.gadr		{color: maroon; margin-top: 1pt;}	/* GB-Nachw. Eigentuemer Adresse */
+p.nwlink, td.nwlink {font-size: 7pt; text-align: right; margin-top: 0pt;}	/* Link zum Nachweis GB, FS, ..*/
+p.err		{font-size: 11px; color: red;}		/* Fehler -> Anwender */
+p.dbg		{font-size: 10px; color: gray;}		/* Debug -> Entwickler */
+p.cnt		{font-size: 10px; color: gray;}		/* Counter, Zaehler */
+p.warn		{color: gray; font-style: italic;}	/* Warnung, Hinweis */
+p.ph		{color: gray;}						/* Platzhalter */
+
+/* Links */
+a:link		{color: rgb(0,102,153);}
+a:visited	{color: rgb(0,153,102);}
+a:active	{color: rgb(0,102,102);}
+a:hover		{color: rgb(255,40,40);}
+
+/* Globaler Identifikator gml_id - Link fuer Entwicklung */
+a.gmlid		{text-decoration: none;	color: silver; font-style: italic; font-size: 7pt; text-align: right;}
+span.gmlid	{font-style: italic; font-size: 7pt; text-align: right;}
+
+/* komplette Adresse im Rahmen */
+div.adr {border-left-width: 0px; border-right-width: 0px; border-bottom-width: 2px; border-top-width: 2px; 
+	width: 60%; font-size: 12pt; border-color: #a2d545; border-style: solid; 
+	margin-bottom: 8px; margin-top: 8px; margin-left: 0.7in;
+	overflow: auto; padding: 6px; background: #e4f7dd;}
+
+span.key 	{color: gray; font-style: italic;} /* Schluesselwert vor Text, Wert zurueck nehmen */
+span.wichtig{color: #BB0000; font-weight: bold;} /* Wert hervorheben */
+span.flae	{font-weight: bold;} /* FlÃ€chensumme Flurst. */
+
+/* ** T a b e l l e n ** */
+table 		{font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 10pt; color: #000033;}
+table.fsd	{font-size: 9pt; margin-left: 12px;}
+table.bez	{font-size: 9pt; margin-bottom: 10px; margin-left: 3px;}
+
+/* Kennzeichen mit Rahmen, Rahmen-Farben wie 'Balken' */
+table.kennzfs	{border: 2px solid  navy;  padding: 3px; margin: 0px;}	/* Flurstueck */
+table.kennzfsh	{border: 2px dotted navy;  padding: 3px; margin: 0px;}	/* - historisch */
+table.kennzgb	{border: 2px solid  green; padding: 3px; margin: 0px;}	/* Grundbuch */
+table.kennzgbf	{border: 2px dotted green; padding: 3px; margin: 0px;}	/* - fiktiv */
+table.kennzla	{border: 2px solid  lime;  padding: 3px; margin: 0px;}	/* Lage */
+table.kennzstra	{border: 2px solid  limegreen;  padding: 3px; margin: 0px;}	/* Strasse */
+
+/* volle Breite fuer verschiedene Zwecke */
+table.fs, table.nua, table.klas, table.eig, table.outer, table.geb {width: 100%;}
+
+td	{vertical-align: top; padding-top: 6px;}	/* ** Tabellenfelder ** */
+/* border: 1px dotted gray;  Variante fuer TEST */
+
+td.ll	{width: 130px;}	/* Liste Links */
+td.lr	{color: black;}	/* Liste Rechts */
+td.ph	{color: gray;}	/* Platzhalter, vorlaeufig, spaeter loschen */
+
+td.fla	{width: 110px; padding-right: 4px; text-align: right;} /* Flaechen rechtsbuendig (stellengerecht) */
+td.fsnr	{padding-right: 4px; text-align: right;} /* Flst.-Nr. rechtsbuendig */
+td.key	{width:  35px; padding-right: 4px; padding-left: 4px;}
+/* Ertragsmesszahl der Bodenschaetzung
+td.emz	{width: 45px; padding-right: 4px; padding-left: 4px; text-align: right;} */
+td.kurz	{width: 26px; padding-left: 4px;}
+td.nanu	{width: 80px;}				/* Namensnummer */
+td.sond, p.sond	{font-size: 9pt; font-style: italic; background-color: white;
+		border: 1px dotted silver; padding: 6px;}	/* Sondereigentumsbeschreibung */
+
+td.nrap, p.nrap	{font-size: 9pt; font-style: italic; background-color: white;}	/* Nummer im Aufteilungsplan */
+
+td.fett	{font-weight: bold;}
+td.head	{border-bottom: 1px solid gray; font-style: italic; padding-top: 2px;}	/* Kopfzeile, Spaltenueberschrift */
+td.sum {border-top: 2px dotted maroon;	border-bottom:3px solid maroon;
+	border-left:0px dotted maroon;	border-right:0px dotted maroon; font-weight: bold;}	/* unter dem Strich = Summenzeile */
+td.bez	{font-weight: bold;}	/* Beziehungen */
+td.nhd	{width: 150px;}			/* Namen - linke / rechte Spalte */
+td.nam	{font-weight: bold;}
+td.gbl	{border-bottom: 1px dotted green;}	/* Name: GB-Liste */
+/* Inlay analog Template: linke Tabellenspalte - Feldname */
+td.li, td.gr {color:gray; padding-left: 8px; padding-right:8px; border-bottom: 0px; vertical-align:top;}
+/* dienendes GB in FS-Tab im Best-NW  */
+td.dien	{font-size: 9pt; font-style: italic; color: purple; border-bottom: 1px solid silver;}
+td.hsnr	{width: 70px; padding-right: 4px; text-align: right;} /* Hausnummer in StraÃe */
+
+/* Fallunterscheidung bei GebÃ€ude auf FlurstÃŒck: */
+td.gin {color: rgb(0,50,0);}	/* GebÃ€ude in FS */
+td.gtl {color: rgb(140,140,100);}	/* GebÃ€ude teilweise auf FS */
+td.gan {color: rgb(210,170,170);}	/* GebÃ€ude angrenzend an FS*/
+
+/* Ueberschriften */
+h1, h2, h3, h4, h5, h6 {font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;}
+h1 {	color: black;	font-size: 14pt;}
+h2 {	color: maroon;	font-size: 12pt;}
+h3 {	color: green;	font-size: 12pt;}
+h4 {	color: black;	font-size: 11pt;}
+h5 {	color: black;	font-size: 10pt;}
+h6 {	color: black;	font-size:  9pt; margin-top: 2pt; margin: 0pt}	/* FS in Best-NW */
+
+img	{border: 0px; margin: 0px;} /* Icons */
+
+iframe.inlay {border:0px; width: 100%;} /* height: 400px; */
+
+/* Seitenfuss */
+.buttonbereich	{font-size: 7pt; text-align: right;}
+.confbereich	{font-size: 7pt; background-color: #EFFDFF; width: 88%; position: relative; left: 40px;}
+
+/* abweichender Druck */
+@media print {
+	body {width: 98%; background-color:white;}
+
+	/* Balken im Druck */
+	p.fskennz,p.fsei,p.fshis,p.gbkennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht{text-align: right; color: black;}
+	p.fskennz,p.fsei{border-bottom: 2px solid navy; border-top: 2px solid navy;}
+	p.fshis		{border-bottom: 2px solid gray; border-top: 2px solid gray;}
+	p.gbkennz	{border-bottom: 2px solid green; border-top: 2px solid green;}
+	p.nakennz	{border-bottom: 2px solid maroon; border-top: 2px solid maroon;}
+	p.geb		{border-bottom: 2px solid yellow; border-top: 2px solid yellow;}
+	p.lage		{border-bottom: 2px solid lime; border-top: 2px solid lime;}
+	p.strasse	{border-bottom: 2px solid limegreen; border-top: 2px solid limegreen;}
+	p.recht		{border-bottom: 2px solid #F0F8FF; border-top: 2px solid #F0F8FF;}
+}
Index: /trunk/info/info/alkisn/alkisexport.php
===================================================================
--- /trunk/info/info/alkisn/alkisexport.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisexport.php	(revision 362)
@@ -0,0 +1,188 @@
+<?php
+/*	Modul alkisexport.php
+	CSV-Export von ALKIS-Daten zu einem Flurstueck, Grundbuch oder EigentÃŒmer.
+	Es wird eine GML-ID ÃŒbergeben.
+	Es wird ein gespeicherter View verwendet, der nach der gml_id gefiltert wird. 
+	Der View verkettet Flurstueck - Buchungsstelle - Grundbuch - Eigentuemer
+	Die Lagebezeichnung des FlurstÃŒcks wird in ein Feld komprimiert.
+	Parameter: gkz=mandant&gmlid=DE...&tabtyp=flurstueck/grundbuch/person
+
+	Version
+	2016-02-23 Version fuer norGIS-ALKIS-Import
+*/
+
+function lage_zum_fs($gmlid) {
+	// Zu einem FlurstÃŒck die Lagebezeichnungen (mit Hausnummer) so aufbereiten, 
+	// dass ggf. mehrere Lagebezeichnungen in eine Zelle der Tabelle passen.
+	// FS >westAuf> Lage >> Katalog
+	$sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer 
+	FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)
+	JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
+	WHERE f.gml_id= $1 ORDER BY s.bezeichnung, l.hausnummer;";
+
+	$v=array($gmlid);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {return "** Fehler bei Lagebezeichnung **";}
+	$j=0;
+	$lagehsnr="";
+	$salt="";
+	while($row = pg_fetch_array($res)) {
+		if ($j > 0) {$lagehsnr.=", ";}
+		$sneu=$row["bezeichnung"];
+		if ($sneu == $salt) { // gleiche Str.
+			$lagehsnr.=$row["hausnummer"]; // HsNr dran haengen
+		} else { // Name UND HsNr dranhaengen
+			$lagehsnr.=$sneu." ".$row["hausnummer"];
+		}
+		$salt=$sneu; // Name f. naechste Runde
+		$j++;
+	}
+	pg_free_result($res);
+	return($lagehsnr);
+}
+
+// HIER START
+$cntget = extract($_GET); // Parameter aus URL lesen
+header('Content-type: application/octet-stream');
+header('Content-Disposition: attachment; filename="alkis_'.$tabtyp.'_'.$gmlid.'.csv"');
+require_once("alkis_conf_location.php");
+include("alkisfkt.php");
+
+// CSV-Ausgabe: Kopfzeile mit Feldnamen
+echo "FS-Kennzeichen;GmkgNr;Gemarkung;Flur;Flurstueck;Flaeche;Adressen;GB-BezNr;GB-Bezirk;GB-Blatt;BVNR;Anteil_am_FS;Buchungsart;Namensnummer;AnteilDerPerson;RechtsGemeinschaft;Person;GebDatum;Anschrift;Anteil(berechnet)";
+
+// Datenbank-Verbindung
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) {exit("Fehler beim Verbinden der DB");}
+pg_set_client_encoding($con, 'LATIN1'); // FÃŒr Excel kein UTF8 ausgeben
+
+// Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv".
+switch ($tabtyp) { // zulaessige Werte fuer &tabtyp=
+	case 'flurstueck': $filter = "fsgml"; break; // ax_flurstueck.gml_id
+	case 'grundbuch':  $filter = "gbgml"; break; // ax_buchungsblatt.gml_id
+	case 'person':     $filter = "psgml"; break; // ax_person.gml_id
+	case 'strasse':    $filter = "stgml"; break; // ax_lagebezeichnungkatalogeintrag.gml_id = StraÃe-GML-ID
+	default: exit("Falscher Parameter '".$tabtyp."'"); break;
+}
+
+// Daten aus gespeichertem View, zusaetzlich Filter: "feld"='wert' mitgeben
+if ($tabtyp == 'strasse') { // Sonderversion
+	$sql="SELECT * FROM exp_csv_str WHERE ".$filter." = $1 ";
+} else {
+	$sql="SELECT * FROM exp_csv WHERE ".$filter." = $1 ";
+}
+
+$v=array($gmlid);
+$res=pg_prepare("", $sql);
+$res=pg_execute("", $v);
+if (!$res) {exit("Fehler bei Datenbankabfrage");}
+$i=1; // Kopfzeile zÃ€hlt mit
+$fsalt='';
+
+// Datenfelder auslesen
+while($row = pg_fetch_array($res)) {
+	$i++; // Zeile der Tabelle
+	$rechnen=true; // Formel in letzte Spalte?
+
+	// Flurstueck
+	$fsgml=$row["fsgml"];
+	$fs_kennz=$row["fs_kennz"]; // Rechts Trim "_" ?
+	$gmkgnr=$row["gemarkungsnummer"];
+	$gemkname=$row["gemarkung"]; 
+	$flurnummer=$row["flurnummer"];
+	$flstnummer=$row["zaehler"];
+	$nenner=$row["nenner"];
+	// Bruchnummer kann in Excel als Datum interpretiert werden. In '' setzen.
+	if ($nenner > 0) {$flstnummer="'".$flstnummer."/".$nenner."'";} // BruchNr
+	$fs_flae=$row["fs_flae"]; // amtliche Fl. aus DB-Feld
+
+	// Grundbuch (Blatt)
+	$gb_bezirk=$row["gb_bezirk"]; // Nummer des Bezirks
+    $gb_beznam=$row["beznam"];    // Name des Bezirks
+	$gb_blatt=$row["gb_blatt"];
+
+	// Buchungsstelle (Grundstueck)
+	$bu_lfd=$row["bu_lfd"]; // BVNR
+	$bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL
+	$bu_key=$row["buchungsart"]; // SchlÃŒssel
+	$bu_art=$row["bu_art"]; // entschlÃŒsselt (Umlaute in ANSI!)
+	if($bu_ant == '') { // Keine Bruch-Zahl
+		$bu_ant = '1'; // "voller Anteil" (Faktor 1)
+	} else {
+		$bu_ant=str_replace(".", ",", $bu_ant); // Dezimalkomma statt -punkt.		
+	}
+
+	// Namensnummer
+	$nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, wird sonst wie Datum dargestellt.
+	$nam_ant=$row["nam_ant"];
+	$nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (SchlÃŒssel)
+
+	if ($nam_adr == '') {     // keine Rechtsgemeinschaft
+		$rechtsg='';
+		if ($nam_ant == '') { // und kein Bruch-Anteil
+			$nam_ant=1; // dann ganzer Anteil
+		}
+	} else {
+		$rechnen=false; // bei Rechtsgemeinschaft die Anteile manuell interpretieren
+		if ($nam_adr == 9999) { // sonstiges
+			$rechtsg=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft
+		} else {
+		//	$rechtsg=rechtsgemeinschaft($nam_adr); // EntschlÃŒsseln
+			$rechtsg=$row["nam_adrv"]; // Art der Rechtsgemeischaft (Value zum Key)
+		}
+	}
+
+	// Person
+	$vnam=$row["vorname"];
+	$nana=$row["nachnameoderfirma"];
+	$namteil=$row["namensbestandteil"];
+	//$name=anrede($row["anrede"]);  
+	$name=$row["anrv"]; // Anrede (Value zum Key)
+	if ($name != "") {$name.=" ";} // Trenner
+	if ($namteil != "") {$name.=$namteil." ";} // von und zu
+	$name.=$nana;
+	if ($vnam != "") {$name.=", ".$vnam;} // Vorname nach hinten
+	$gebdat=$row["geburtsdatum"];
+
+	// Adresse der Person (Eigentuemer))
+	$ort=$row["ort"];
+	if ($ort == "") {
+		$adresse="";
+	} else { 
+		$adresse=$row["strasse"]." ".$row["hausnummer"].", ".$row["plz"]." ".$ort;
+		$land=$row["land"]; // nur andere LÃ€nder anzeigen
+		if (($land != "DEUTSCHLAND") and ($land != "")) {
+			$adresse.=" (".$land.")";
+		}
+	}
+
+	// Adressen (Lage) zum FS
+	if($fsgml != $fsalt) { // nur bei geÃ€ndertem Kennz.
+		$lage=lage_zum_fs($fsgml); // die Lage neu ermitteln
+		$fsalt=$fsgml;
+	}
+
+	// Den Ausgabe-Satz montieren aus FlurstÃŒcks-, Grundbuch- und Namens-Teil
+	//      A             B           C             D               E               F            G
+	$fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";";
+	//      H              I              J             K           L           M
+	$gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";";
+	//       N            O            P            Q         R           S
+	$namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse;
+
+	// Anteile "GB am FS" und "Pers am GB" verrechnen
+	if ($rechnen) { // beide Anteile verwertbar
+		$formelteil=";=L".$i."*O".$i; // Spalte T
+	} else {
+		$formelteil=';';
+	}
+
+	// Ausgabe in die CSV-Datei -> Download -> Tabellenkalkulation
+	echo "\n".$fsteil.$gbteil.$namteil.$formelteil;
+}
+pg_free_result($res);
+if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile
+pg_close($con);
+exit(0);
+?>
Index: /trunk/info/info/alkisn/alkisfkt.php
===================================================================
--- /trunk/info/info/alkisn/alkisfkt.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisfkt.php	(revision 362)
@@ -0,0 +1,362 @@
+<?php
+/*	Modul: alkisfkt.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Functions
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import, "function linkgml" raus. Case-EntschlÃŒsselung raus.
+*/
+
+function footer($gmlid, $link, $append) {
+	// Einen Seitenfuss ausgeben.
+	// Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
+	// Den URL-Parameter "&showkey=j/n" umschalten lassen.
+	// $append wird angehaengt wenn gefuellt. Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
+	global $gkz, $showkey, $hilfeurl;
+
+	$customer=$_SESSION["mb_user_name"];
+	echo "\n<div class='confbereich noprint'>"
+	."\n<table class='outer'>\n<tr>";
+
+	// Spalte 1: Info Benutzerkennung
+	echo "\n\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
+
+	// Spalte 2: Umschalter
+	echo "\n\t<td title='Konfiguration'>";
+		$mylink ="\n\t\t<a class='gmlid' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
+
+		if ($showkey) { // Umschalten SchlÃŒssel ein/aus
+			echo $mylink."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
+		} else {
+			echo $mylink."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
+		}
+	echo "\n\t</td>";
+
+	// Spalte 3
+	echo "\n\t<td title='Hilfe'>"
+	."\n\t\t<p class='nwlink'>\n\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t</p>\n\t</td>"
+	."\n</tr>\n</table>\n</div>\n";
+	return 0;
+}
+
+function ber_bs_hinw($gmls) {
+	// Unter einem Grundbuch-Link den Hinweis auf "berechtigte Buchungssstellen" anzeigen
+	// In FS-Nachweis wird nur der EigentÃŒmer des direkt gebuchten GrundstÃŒcks angezeigt.
+	// Den Erbbauberechtigten sieht man erst in der Grundbuch-Auskunft.
+	global $debug, $showkey;
+
+	// Buchungstelle dien. >an> Buchungstelle herr.
+	$sql ="SELECT count(sh.gml_id) AS anz, sh.buchungsart, a.v "
+	."FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) " 
+	."LEFT JOIN alkis_wertearten a ON sh.buchungsart=cast(a.k AS integer) " 
+	."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND a.element='ax_buchungsstelle' and a.bezeichnung='buchungsart' "
+	."GROUP BY sh.buchungsart, a.v;";
+
+	$v = array($gmls); // id dienende BS
+	$resan = pg_prepare("", $sql);
+	$resan = pg_execute("", $v);
+	if (!$resan) {
+		echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>\n";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmls."'</p>";}
+	}
+	$an=0;
+	while($rowan = pg_fetch_array($resan)) {
+		$an++;
+		if ($an == 1) {echo "\n\t<br>\n\t<p class='nwlink' title='Andere Grundst&uuml;cke mit Rechten an diesem.'>Berechtigte Buchungen:<br><b>";}
+		if ($an > 1) {echo",<br>";} // kann es gemischste Buchungsarten geben?
+		echo $rowan["anz"]." ".htmlentities($rowan["v"], ENT_QUOTES, "UTF-8");
+		if ($showkey) {echo " <span class='key'>(".$rowan["buchungsart"].")</span>";}
+	}
+	if ($an == 0) {
+		echo "<br><p class='nwlink' title='Kein anderes Grundst&uuml;ck hat ein Recht an diesem.'>Keine berechtigte Buchung</p>";
+	} else {
+		echo "</b></p>";
+	}
+	pg_free_result($resan);
+}
+
+function kurz_namnr($lang) {
+	// Namensnummer kÃŒrzen. Nicht benÃ¶tigte Stufen der Dezimalklassifikation abschneiden
+	$kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
+	$kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
+	$kurz=ltrim($kurz, "0"); // fuehrende Nullen am Anfang
+	$kurz=str_replace(".0",".",$kurz); // fuehrende Null jeder Stufe
+	return $kurz;
+}
+
+function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
+/*	Bestandsnachweis - Flurstuecksdaten
+	Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben.
+	Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
+	Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
+	Table-Tag und Kopfzeile im aufrufenden Programm. */
+	global $debug, $gkz, $showkey;
+
+	// F L U R S T U E C K
+	$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche 
+	FROM ax_flurstueck f JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id 
+	LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+	WHERE s.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$v = array($gml_bs);
+	$resf = pg_prepare("", $sql);
+	$resf = pg_execute("", $v);
+	if (!$resf) {echo "<p class='err'>Fehler bei Flurst&uuml;ck</p>\n";}
+
+	if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
+		$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
+	}
+	$altlfdnr="";
+	$j=0;
+	while($rowf = pg_fetch_array($resf)) {
+		$flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
+		// ohne fuehrende Nullen?
+		$fskenn=$rowf["zaehler"];
+		if ($rowf["nenner"] != "") { // Bruchnummer
+			$fskenn.="/".$rowf["nenner"];
+		}
+		$flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
+
+		echo "\n<tr>"; // eine Zeile je Flurstueck
+			// Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
+			if($lfdnr == $altlfdnr) { // gleiches Grundstueck
+				echo "\n\t<td>&nbsp;</td>"
+				."\n\t<td>&nbsp;</td>"
+				."\n\t<td>&nbsp;</td>";
+			} else { // Sprungmarke, BVNR
+				echo "\n\t<td>"
+					."<a name='bvnr".$lfdnr."'></a>"
+					."<span class='wichtig'>".$bvnr."</span>"
+				."</td>";
+
+				echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart 
+					if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
+					echo $ba; // entschluesselt
+				echo "</td>"
+				."\n\t<td>&nbsp;</td>"; // Anteil
+				$altlfdnr=$lfdnr;
+			}
+			//Sp. 4-7 aus Flurstueck
+			echo "\n\t<td>";
+			if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
+			echo $rowf["bezeichnung"]."</td>"
+			."\n\t<td>".$flur."</td>"
+			."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
+			."</td>"
+			."\n\t<td class='fla'>".$flae."</td>";
+
+			echo "\n\t<td><p class='nwlink noprint'>"
+				."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+					if ($showkey)   {echo "&amp;showkey=j";}
+					echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
+					."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+				."</a>"
+			."</p></td>"
+		."\n</tr>";
+
+		$j++;
+	} // Ende Flurstueck
+
+/*	if ($j == 0 ) { // nur Entw.
+		if ($debug > 1) {echo "<p class='dbg'>Keine FS gefunden</p>";}
+		if ($debug > 2) {echo "<p class='dbg'>SQL='".$sql."'<br>$1 = '".$gml_bs."'</p>";}
+	} */
+	pg_free_result($resf);
+	return $j;
+}
+
+function eigentuemer($con, $gmlid, $mitadresse, $lnkclass) {
+	// Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
+	// Sp.1 = Namennummer, Sp. 2 = Name / Adresse, Sp. 3 = Link
+	// Parameter:
+	//	$gmlid = ID GB-Blattes
+	//	$mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
+	// Return = Anzahl Namensnummern
+
+	// Schleife 1: N a m e n s n u m m e r
+	// Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
+	global $debug, $gkz, $showkey;
+
+	// Link ÃŒber Java-Class? (Ja in alkisinlayausk.php, sonst normal)
+	if ($lnkclass == "") {
+		$lnkvor = "";
+		$lnknach = "";
+	} else {
+		$lnkvor  = "javascript:".$lnkclass."(\"";
+		$lnknach = "\")";
+	} // Beispiel-Link href='javascript:imFenster(\"alkislage.php?gkz= ... ."\")'>xxx ";
+
+	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass, wn.v AS adrv, we.v AS eiartv
+FROM ax_namensnummer n 
+LEFT JOIN alkis_wertearten wn ON cast(n.artderrechtsgemeinschaft AS character varying)=wn.k AND wn.element='ax_namensnummer' AND wn.bezeichnung='artderrechtsgemeinschaft' 
+LEFT JOIN alkis_wertearten we ON cast(n.eigentuemerart AS character varying)=we.k AND we.element='ax_namensnummer' AND we.bezeichnung='eigentuemerart'
+WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
+
+	$v = array($gmlid); // 16 Stellen bei Relationen
+	$resn = pg_prepare("", $sqln);
+	$resn = pg_execute("", $v);
+
+	if (!$resn) {
+		echo "<p class='err'>Fehler bei Eigent&uuml;mer</p>\n";
+		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
+	}
+
+	echo "\n\n<table class='eig'>";
+	$n=0; // Z.NamNum.
+
+	while($rown = pg_fetch_array($resn)) {
+		$gmlnn=$rown["gml_id"];
+		echo "\n<tr>";
+			echo "\n\t<td class='nanu' title='Namens-Nummer'>\n\t\t<p>"; // Sp. 1
+				// VOR die Tabelle: "EigentÃŒmer"
+				$namnum=kurz_namnr($rown["lfd"]);
+				echo $namnum."&nbsp;";
+			echo "</p>\n\t</td>";
+
+			echo "\n\t<td>"; // Sp. 2
+			$rechtsg=$rown["adr"];
+			if ($rechtsg != "" ) {
+				if ($rechtsg == 9999) { // sonstiges
+					echo "\n\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
+				} else {
+					echo "\n\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
+				}
+			}
+			//if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";} // TEST:
+
+			// Schleife Ebene 2: andere Namensnummern
+			// Beziehung   ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer 
+
+			// Die Relation 'Namensnummer' besteht aus RechtsverhÃ€ltnissen zu 'Namensnummer' sagt aus, 
+			// dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehÃ¶ren kÃ¶nnen. 
+			// Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, 
+			// die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
+
+		// Schleife 2: P e r s o n
+		// Beziehung: ax_person  <benennt<  ax_namensnummer
+		$sqlp="SELECT p.gml_id, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad "
+		."FROM ax_person p JOIN ax_namensnummer nn ON nn.benennt=p.gml_id WHERE nn.gml_id= $1 AND p.endet IS NULL AND nn.endet IS NULL;";
+
+		$v = array($gmlnn);
+		$resp = pg_prepare("", $sqlp);
+		$resp = pg_execute("", $v);
+
+		if (!$resp) {
+			echo "\n\t<p class='err'>Fehler bei Person</p>\n";
+			if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlnn."'</p>";}
+		}
+
+		$i=0; // cnt Person
+		while($rowp = pg_fetch_array($resp)) { // Schleife notwendig? nn >benennt> Person ist kein Array!
+			$diePerson="";
+		//	+++ Anrede?
+			if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";}
+			$diePerson.=$rowp["nachnameoderfirma"];
+			if ($rowp["vorname"] <> "") {$diePerson.=", ".$rowp["vorname"];}
+			if ($rowp["namensbestandteil"] <> "") {$diePerson.=". ".$rowp["namensbestandteil"];}
+			if ($rowp["geburtsdatum"] <> "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
+			if ($rowp["geburtsname"] <> "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
+			$diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
+
+			// Spalte 1 enthÃ€lt die Namensnummer, nur in Zeile 0
+			if ($i > 0) {
+				echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>";
+			}
+			// Spalte 2 = Angaben
+			$eiartkey=$rown["eigentuemerart"]; // Key
+			$eiart=$rown["eiartv"]; // Value
+			echo "\n\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t</td>";
+
+			// Spalte 3 = Link
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+				if ($showkey AND $eiartkey != '') { // oft leer
+						echo "<span class='key'>(".$eiartkey.")</span> ";
+				}
+				echo "\n\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$rowp[0];
+				if ($showkey)   {echo "&amp;showkey=j";}
+				echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart;
+				echo " <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t</p>";
+			echo "\n\t</td>\n</tr>";
+
+			if ($mitadresse) {
+				// Schleife 3:  A d r e s s e  (OPTIONAL)
+				$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
+				."FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL LIMIT 2;";
+				$gmlp=$rowp["gml_id"]; // Person
+				$v = array($gmlp);
+				$resa = pg_prepare("", $sqla);
+				$resa = pg_execute("", $v);
+
+				if (!$resa) {
+					echo "\n\t<p class='err'>Fehler bei Adressen</p>\n";
+					if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqla."<br>$1=gml= '".$gmlp."'</p>";}
+				}
+				$j=0;
+				while($rowa = pg_fetch_array($resa)) {
+					$j++;
+					if ($j == 1) { // erste Adresse anzeigen
+						$gmla=$rowa["gml_id"];
+						$plz=$rowa["plz"]; // integer
+						if($plz == 0) {
+							$plz="";
+						} else {
+							$plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
+						}
+						$ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
+						$str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
+						$hsnr=$rowa["hausnummer"];
+						$land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
+
+						echo "\n<tr>\n\t<td>&nbsp;</td>"; //Sp. 1
+						echo "\n\t<td><p class='gadr'>"; //Sp. 2
+						if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
+						if ($plz.$ort != "") {echo $plz." ".$ort;}
+						if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
+						echo "</p></td>\n\t<td>"; // Sp. 3
+						echo "&nbsp;</td>\n</tr>";
+					} else { // manchmal dopplete Angaben (_straÃe / _str.)
+						echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>\n\t<td>&nbsp;</td>\n</tr>";
+					}
+				}
+				pg_free_result($resa);
+			}
+			// 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
+
+			$i++; // cnt Person
+
+			// Anteil als eigene Tab-Zeile:
+			$zaehler=$rown["zaehler"];
+			if ($zaehler != "") {
+				$zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
+				$nenner=str_replace(".", ",", $rown["nenner"]);
+				$comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
+				echo "\n<tr>\n\t<td>&nbsp;</td>"; // Sp. 1
+				echo "\n\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>";
+				echo "\n\t<td>&nbsp;</td>\n</tr>"; // Sp. 3
+			}
+		} // End Loop Person
+		if ($i == 0) { // kommt vor hinter Zeile Erbengemeinschaft, ist dann KEIN Fehler
+			if ($debug > 1) { // nur bei Entwicklung
+				echo "\n<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";
+				if ($rechtsg != 9999) {
+					echo "\n<p class='dbg'>Fehler: Keine Person zur Namensnummer ".$namnum."</p>";
+				//	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlp."<br>$1 = gml(NamNum) = '".$gmlnn."'</p>";}
+				}
+			}
+			echo "</td>\n\t<td>&nbsp;</td>\n<tr>";
+		}
+		$n++; // cnt NamNum
+	} // End Loop NamNum
+	echo "\n</table>\n";
+	if ($n == 0) { // bei "Fiktives Blatt" KEIN Fehler 
+		if ($debug > 1) {
+			echo "<p class='dbg'>keine Namensnummern zum Blatt</p>";
+			if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml(Blatt)= '".$gmlid."'</p>";}
+		}
+	}
+	pg_free_result($resn);
+	return $n; 
+} // End Function eigentuemer
+
+?>
Index: /trunk/info/info/alkisn/alkisstrasse.php
===================================================================
--- /trunk/info/info/alkisn/alkisstrasse.php	(revision 362)
+++ /trunk/info/info/alkisn/alkisstrasse.php	(revision 362)
@@ -0,0 +1,238 @@
+<?php
+/*	alkisstrasse.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	Alle FlurstÃŒcke an einer Strasse anzeigen, egal ob "mit" oder "ohne" Hausnummer
+	Parameter: "gml_id" aus der Tabelle "ax_lagebezeichnungkatalogeintrag"
+
+	Version:
+	2016-02-24 Version fuer norGIS-ALKIS-Import
+*/
+session_start();
+$id="n";
+$cntget = extract($_GET);
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+
+$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
+if ($keys == "j") {$showkey=true;} else {$showkey=false;}
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta name="author" content="b600352" >
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS Stra&szlig;e</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Strassen.ico">
+	<script type="text/javascript">
+		function ALKISexport() {
+			window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=strasse&gmlid=".$gmlid."'"; ?>);
+		}
+	</script>
+	<style type='text/css' media='print'>
+		.noprint {visibility: hidden;}
+	</style>
+</head>
+<body>
+<?php
+$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
+if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+
+$sql ="SELECT s.land, s.regierungsbezirk, s.kreis, s.gemeinde, s.lage, s.bezeichnung AS snam, 
+b.bezeichnung AS bnam, r.bezeichnung AS rnam, k.bezeichnung AS knam, g.bezeichnung AS gnam, o.gml_id AS ogml 
+FROM ax_lagebezeichnungkatalogeintrag s JOIN ax_bundesland b ON s.land=b.land 
+JOIN ax_regierungsbezirk r ON s.land=r.land AND s.regierungsbezirk=r.regierungsbezirk 
+JOIN ax_kreisregion k ON s.land=k.land AND s.regierungsbezirk=k.regierungsbezirk AND s.kreis=k.kreis 
+JOIN ax_gemeinde g ON s.land=g.land AND s.regierungsbezirk=g.regierungsbezirk AND s.kreis=g.kreis AND s.gemeinde=g.gemeinde 
+LEFT JOIN ax_lagebezeichnungohnehausnummer o ON s.land=o.land AND s.regierungsbezirk=o.regierungsbezirk AND s.kreis=o.kreis AND s.gemeinde=o.gemeinde AND s.lage=o.lage 
+WHERE s.gml_id= $1 AND s.endet IS NULL AND o.endet IS NULL ;"; 
+
+$v=array($gmlid);
+$res=pg_prepare("", $sql);
+$res=pg_execute("", $v);
+if (!$res) {
+	echo "\n<p class='err'>Fehler bei Lagebezeichnungskatalogeintrag.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+}
+
+if ($row = pg_fetch_array($res)) {
+	$lage=$row["lage"]; // Strassenschluessel
+	$snam=$row["snam"]; // Strassenname
+	$gem=$row["gemeinde"];
+	// Balken
+	$kennz=$gem."-".$lage." (".$snam.")"; // Schluessel als Sucheingabe in NAV brauchbar?
+	echo "<p class='strasse'>ALKIS Stra&szlig;e ".$kennz."&nbsp;</p>\n";
+} else {
+	echo "\n<p class='err'>Kein Treffer bei Lagebezeichnungskatalogeintrag.</p>\n";
+}
+
+echo "\n<h2><img src='ico/Strassen.png' width='16' height='16' alt=''> Stra&szlig;e</h2>\n";
+
+// Tabelle Kennzeichen
+echo "\n<table class='outer'>\n<tr>\n\t<td>"
+."\n\t<table class='kennzstra' title='Lage'>"
+	."\n\t<tr>"
+		."\n\t\t<td class='head'>Land</td>"
+		."\n\t\t<td class='head'>Reg.-Bez.</td>"
+		."\n\t\t<td class='head'>Kreis</td>"
+		."\n\t\t<td class='head'>Gemeinde</td>"
+		."\n\t\t<td class='head'>Stra&szlig;e</td>"
+	."\n\t</tr>"
+	."\n\t<tr>";
+
+		echo "\n\t\t<td title='Bundesland'>";
+		if ($showkey) {echo "<span class='key'>".$row["land"]."</span><br>";}
+		echo $row["bnam"]."&nbsp;</td>";
+
+		echo "\n\t\t<td title='Regierungsbezirk'>";
+		if ($showkey) {echo "<span class='key'>".$row["regierungsbezirk"]."</span><br>";}
+		echo $row["rnam"]."&nbsp;</td>";
+
+		echo "\n\t\t<td title='Kreis'>";
+		if ($showkey) {echo "<span class='key'>".$row["kreis"]."</span><br>";}
+		echo $row["knam"]."&nbsp;</td>";
+
+		echo "\n\t\t<td title='Gemeinde'>";
+		if ($showkey) {echo "<span class='key'>".$gem."</span><br>";}
+		echo $row["gnam"]."&nbsp;</td>";
+
+		echo "\n\t\t<td title='Stra&szlig;e'>";
+		if ($showkey) {echo "<span class='key'>".$lage."</span><br>";}
+		echo "<span class='wichtig'>".$snam."</span>";
+
+		echo "&nbsp;</td>"
+	."\n\t</tr>"
+."\n\t</table>";
+
+echo "\n\t</td>\n\t<td>";
+
+// Kopf Rechts:
+$ogml=$row["ogml"]; // ID von "Lage Ohne HsNr"
+if ($ogml != "") {
+	echo "\n\t\t<p class='nwlink noprint'>"
+		."\n\t\t<a href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$ogml;
+		if ($showkey)   {echo "&amp;showkey=j";}
+		echo "' title='Lage Ohne Hausnummer'>Lage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''></a>"
+	."\n\t\t</p>";
+}
+
+echo "\n\t</td>\n</tr>\n</table>";
+pg_free_result($res);
+// Ende Seitenkopf
+
+// F L U R S T U E C K E
+echo "\n\n<a name='fs'></a><h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>\n";
+echo "\n<p>Zusammenfassung von 'Lage mit Hausnummer' und 'Lage ohne Hausnummer' an dieser StraÃe</p>";
+
+// ax_Flurstueck >weistAuf> ax_LagebezeichnungMitHausnummer  > = Hauptgebaeude 
+// ax_Flurstueck >zeigtAuf> ax_LagebezeichnungOhneHausnummer > = Strasse
+// Suchkriterium: gml_id aus Katalog
+$subquery = "SELECT f1.gml_id AS fsgml, lm.gml_id AS lgml, lm.land, lm.regierungsbezirk, lm.kreis, lm.gemeinde, lm.lage, lm.hausnummer 
+ FROM ax_flurstueck f1 JOIN ax_lagebezeichnungmithausnummer lm ON lm.gml_id=ANY(f1.weistAuf) 
+ WHERE f1.endet IS NULL AND lm.endet IS NULL
+UNION SELECT f2.gml_id AS fsgml, '' AS lgml, lo.land, lo.regierungsbezirk, lo.kreis, lo.gemeinde, lo.lage, '' AS hausnummer 
+ FROM ax_flurstueck f2 JOIN ax_lagebezeichnungohnehausnummer lo ON lo.gml_id=ANY(f2.zeigtauf) 
+ WHERE f2.endet IS NULL AND lo.endet IS NULL";
+
+$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, duett.lgml, duett.hausnummer 
+ FROM ax_flurstueck f JOIN ( ".$subquery." ) AS duett ON f.gml_id=duett.fsgml 
+ JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+ JOIN ax_lagebezeichnungkatalogeintrag s ON duett.land=s.land AND duett.regierungsbezirk=s.regierungsbezirk AND duett.kreis=s.kreis AND duett.gemeinde=s.gemeinde AND duett.lage=s.lage 
+WHERE s.gml_id = $1 AND f.endet IS NULL AND s.endet IS NULL 
+ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+$v=array($gmlid);
+$resf=pg_prepare("", $sql);
+$resf=pg_execute("", $v);
+if (!$resf) {
+	echo "<p class='err'>Fehler bei Flurst&uuml;ck.</p>\n";
+	if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}	
+}
+
+echo "\n<table class='fs'>"
+."\n<tr>"
+	."\n\t<td class='head' title='Name der Gemarkung (Ortsteil)'>Gemarkung</td>"
+	."\n\t<td class='head' title='Flur-Nummer'>Flur</td>"
+	."\n\t<td class='head' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'>Flurst.</td>"
+	."\n\t<td class='head fla' title='amtliche Fl&auml;che in Quadratmeter'>Fl&auml;che</td>"
+	."\n\t<td class='head hsnr' title='Hausnummer aus der Lagebezeichnung des Flurst&uuml;cks'>HsNr.</td>"
+	."\n\t<td class='head nwlink noprint' title='Link: weitere Auskunft'>weit. Auskunft</td>"
+."\n</tr>";
+$j=0;
+$cnths=0; // Count Haus
+$gwgmkg=""; // Gruppenwechsel
+$gwflur="";
+
+while($rowf = pg_fetch_array($resf)) {
+	$gmkg=$rowf["bezeichnung"];
+	$flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
+	$fskenn=$rowf["zaehler"]; // Bruchnummer
+	if ($rowf["nenner"] != "") {$fskenn.="/".$rowf["nenner"];}
+	$flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
+	$lgml=$rowf["lgml"]; // ID von "Lage Mit" oder leer
+
+	echo "\n<tr>"
+		."\n\t<td>";
+		if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
+		if ($gwgmkg != $gmkg) {
+			echo "<b>".$gmkg."</b></td>";
+			$gwgmkg=$gmkg;
+			$gwflur="";
+		} else {
+			echo $gmkg."</td>";
+		}
+
+		if ($gwflur != $flur) {
+			echo "\n\t<td><b>".$flur."</b></td>";
+			$gwflur=$flur;
+		} else {
+			echo "\n\t<td>".$flur."</td>";
+		}
+
+		echo "\n\t<td><span class='wichtig'>".$fskenn."</span></td>"
+		."\n\t<td class='fla'>".$flae."</td>"
+		."\n\t<td class='hsnr'>".$rowf["hausnummer"]."</td>"
+		."\n\t<td>\n\t\t<p class='nwlink noprint'>";
+
+			if ($lgml != '') {
+				echo "\n\t\t<a href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$lgml;
+				if ($showkey) {echo "&amp;showkey=j";}
+				echo "' title='Lage Mit Hausnummer'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
+				$cnths++;
+			}
+
+			echo "\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+			if ($showkey) {echo "&amp;showkey=j";}
+			echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck <img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>";
+
+		echo "\n\t\t</p>\n\t</td>"
+	."\n</tr>";
+	$j++;
+}
+echo "\n</table>";
+if ($j > 6) {
+	echo "<p class='cnt'>".$j." Flurst&uuml;cke";
+	if ($cnths > 4) {echo ", ".$cnths." H&auml;user";}
+	echo "</p>";
+}
+pg_free_result($resf);
+?>
+
+<form action=''>
+	<div class='buttonbereich noprint'>
+	<hr>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.png" width="16" height="16" alt="Export"></a>&nbsp;
+	</div>
+</form>
+
+<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
+
+</body>
+</html>
