Index: /trunk/info/info/alkisn/alkisgebaeudenw.php
===================================================================
--- /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 427)
@@ -1,9 +1,13 @@
 <?php
-/*	alkisgebaeudenw.php - Gebaeudenachweis
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+/*	alkisgebaeudenw.php
+
+	ALKIS-Buchauskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	GebÃ€ude- und Bauwerks-Nachweis fÃŒr ein FlurstÃŒck
 
 	Version:
 	2016-02-24 Version fÃŒr norGIS-ALKIS-Import
-	....
+	...
 	2020-02-20 Authentifizierung ausgelegert in Function darf_ich()
 	2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
@@ -12,4 +16,6 @@
 	2021-03-11 Adresse(n) des gehÃ¶rtZu-Haus zum Bauwerk nicht mehr hier anzeigen sondern im neuen Bauwerk-Modul.
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-02-17 Neue Bauwerks-Typen
 */
 
@@ -34,6 +40,7 @@
 }
 	
-// Kopf fÃŒr die Anzeige der Bauwerke. Nur wenn tatsÃ€chlich Bauwerke vorkommen.
 function bauw_tab_head() {
+// Kopf fÃŒr die Anzeige der Bauwerke. Nur wenn tatsÃ€chlich Bauwerke vorkommen.	
+
 	// Ãberschrift
 	echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Bauwerke</h3>"
@@ -54,5 +61,4 @@
 
 // S T A R T
-
 ini_set("session.cookie_httponly", 1);
 session_start();
@@ -92,14 +98,10 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
-
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgebaeudenw.php'");
 if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
 
-// Flurstueck
+// FlurstÃŒck
 $sqlf ="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 ".UnqKatAmt("f","g")
@@ -148,7 +150,5 @@
 					."\n\t\t\t<td class='head'>Flurst-Nr.</td>"
 				."\n\t\t</tr>\n\t\t<tr>"
-					."\n\t\t\t<td title='Gemarkung'>";
-					if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
-					echo $gemkname."&nbsp;</td>"
+					."\n\t\t\t<td title='Gemarkung'>".DsKy($gmkgnr, 'Gemarkungsnummer').$gemkname."&nbsp;</td>"
 					."\n\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
 					."\n\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>"
@@ -158,7 +158,6 @@
 		."\n\t<td>"
 			."\n\t\t<p class='nwlink noprint'>" // Links zu anderem Nachweis
-				."\n\t\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\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf()
+				."&amp;eig=n' 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>"
@@ -169,8 +168,7 @@
 pg_free_result($resf);
 
-// G e b a e u d e
-
+// GebÃ€ude
 $sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, h.beschreibung AS bauweise_beschreibung, u.beschreibung AS bezeichner, u.dokumentation AS gfktd, g.zustand, z.beschreibung AS bzustand, 
-round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-Flaeche, auch ausserhalb des FS
+round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-FlÃ€che, auch 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 
@@ -181,5 +179,5 @@
 WHERE f.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL ";
 
-// "within" -> nur Geb., die komplett im FS liegen. "intersects" -> auch teil-ueberlappende Flst.
+// "within" -> nur Geb., die komplett im FS liegen. "intersects" -> auch teil-ÃŒberlappende 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
@@ -202,10 +200,9 @@
 	$ggml=$rowg["gml_id"];
 	$gebflsum=$gebflsum + $rowg["schnittflae"];
-	$gnam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array in der DB: '{"A","B"}'
+	$gnam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array in der DB: '{"A","B"}'
 	// Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum!?
-	/* SELECT name FROM ax_gebaeude WHERE NOT name IS NULL AND array_length(name, 1) > 1; */
 	$gfktk=htmlentities($rowg["gebaeudefunktion"], ENT_QUOTES, "UTF-8");  // Geb.-Funktion Key
-	$gfktv=htmlentities($rowg["bezeichner"], ENT_QUOTES, "UTF-8"); // Geb.Funktion Value
-	$gfktd=htmlentities($rowg["gfktd"], ENT_QUOTES, "UTF-8"); // GebÃ€ude-Funktion-Description
+	$gfktv=htmlentities($rowg["bezeichner"], ENT_QUOTES, "UTF-8"); // -Value
+	$gfktd=htmlentities($rowg["gfktd"], ENT_QUOTES, "UTF-8"); // -Description
 
 	$gbauw=$rowg["bauweise"];
@@ -235,25 +232,14 @@
 		."\n\t<td>";
 		if ($gnam != "") {echo "<span title='Geb&auml;udename'>".$gnam."</span><br>";}
-		echo "</td>";
-
-		echo "\n\t<td class='fla'>".$f1."</td>"
-		."\n\t<td class='".$gstyle."'>".$f2."</td>"; // FlÃ€chenangaben
-
-		echo "\n\t<td title='".$gfktd."'>"; // Funktion
-			if ($showkey) {echo "<span class='key'>(".$gfktk.")</span>&nbsp;";}
-			echo $gfktv;
-		echo "</td>";
-
-		echo "\n\t<td>";
+		echo "</td>"
+		."\n\t<td class='fla'>".$f1."</td>\n\t<td class='".$gstyle."'>".$f2."</td>" // FlÃ€chenangaben
+		."\n\t<td title='".$gfktd."'>".DsKy($gfktk, 'Funktion-*').$gfktv."</td>"
+		."\n\t<td>";
 		if ($gbauw != "") {
-			if ($showkey) {echo "<span class='key'>(".$gbauw.")</span>&nbsp;";}
-			echo $gbauwb;
-		}
-		echo "</td>";
-
-		echo "\n\t<td>";
+			echo DsKy($gbauw, 'Bauweise-*').$gbauwb;
+		}
+		echo "</td>\n\t<td>";
 		if ($gzus != "") {
-			if ($showkey) {echo "<span class='key'>(".$gzus.")</span>&nbsp;";}
-			echo $gzustand;
+			echo DsKy(gzus, 'Zustand-*').$gzustand;
 		}
 		echo "</td>";
@@ -298,9 +284,6 @@
 				$lagetxt=$snam." ".$hsnr;
 			}
-			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 "'>";
-				if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
-			echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a><br>";
+			echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp.LnkStf()."'>"
+			.DsKy($skey, 'Stra&szlig;en-*').$lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a><br>";
 		} // Ende Loop Lage m.H.
 		pg_free_result($resl);
@@ -308,7 +291,6 @@
 
 		echo "\n\t<td class='nwlink noprint'>" // Link Haus
-			."\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 "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>"
+			."\n\t\t<a title='Daten zum Geb&auml;ude-Objekt' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml.LnkStf()
+			."'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>"
 		."\n\t</td>"
 	."\n</tr>";
@@ -317,5 +299,4 @@
 if ($gebnr === 0) {
 	echo "<p><br>Kein Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>";
-	//if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
 } else {
 	echo "\n<tr>"
@@ -331,14 +312,14 @@
 
 // B a u w e r k e
-
 // Konstanten fÃŒr Sortierung und Gruppierung
 $btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5;
 $btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9;
-
-// Tabllen-Alias, 2stellig. 1. Stelle: f_=FlurstÃŒck, b_=Bauwerk, k_=Key = SchlÃŒsseltabelle. // 2. Stelle: wie Konstante
-
-// 1 -V e r k e h r
+$btyp_hist=10; $btyp_heil=11; $btyp_oeff=12; $btyp_bpkt=13;
+
+// Tabllen-Alias, 2-3 stellig. 1. Stelle: f_=FlurstÃŒck, b_=Bauwerk, k_=Key = SchlÃŒsseltabelle. // 2.-3. Stelle: wie Konstante
+
+// 1 - V e r k e h r
 $sqlb="SELECT ".$btyp_verkehr." AS bwtyp, b1.gml_id, 
- b1.bauwerksfunktion, k1.beschreibung AS bezeichner, k1.dokumentation AS bfktd, b1.bezeichnung, b1.name, NULL AS gehoertzu, 
+ b1.bauwerksfunktion, k1.beschreibung, k1.dokumentation, b1.bezeichnung, b1.name, NULL AS gehoertzu, 
  round(st_area(b1.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b1.wkb_geometry,f1.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b1.wkb_geometry,f1.wkb_geometry) as drin, GeometryType(b1.wkb_geometry) as bgeotyp 
@@ -349,16 +330,14 @@
 // 2 - G e w Ã€ s s e r
 $sqlb.="UNION
- SELECT ".$btyp_gewaesser." AS bwtyp, b2.gml_id, b2.bauwerksfunktion, ug.beschreibung AS bezeichner, ug.dokumentation AS bfktd, 
- b2.bezeichnung, b2.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_gewaesser." AS bwtyp, b2.gml_id, b2.bauwerksfunktion, k2.beschreibung, k2.dokumentation, b2.bezeichnung, b2.name, NULL AS gehoertzu, 
  round(st_area(b2.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b2.wkb_geometry,f2.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b2.wkb_geometry,f2.wkb_geometry) as drin, GeometryType(b2.wkb_geometry) as bgeotyp 
  FROM ax_flurstueck f2 
  JOIN ax_bauwerkimgewaesserbereich b2 ON st_intersects(b2.wkb_geometry,f2.wkb_geometry) = true
- LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion = ug.wert 
+ LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich k2 ON b2.bauwerksfunktion = k2.wert 
  WHERE f2.gml_id = $1 AND f2.endet IS NULL AND b2.endet IS NULL ";
 // 3 - S o n s t i g e  Bauwerke
 $sqlb.="UNION
- SELECT ".$btyp_sonst." AS bwtyp, b3.gml_id, b3.bauwerksfunktion, k3.beschreibung AS bezeichner, k3.dokumentation AS bfktd, 
- b3.bezeichnung, b3.name, b3.gehoertzu, 
+ SELECT ".$btyp_sonst." AS bwtyp, b3.gml_id, b3.bauwerksfunktion, k3.beschreibung, k3.dokumentation, b3.bezeichnung, b3.name, b3.gehoertzu, 
  round(st_area(b3.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b3.wkb_geometry,f3.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b3.wkb_geometry,f3.wkb_geometry) as drin, GeometryType(b3.wkb_geometry) as bgeotyp 
@@ -369,6 +348,5 @@
 // 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe
 $sqlb.="UNION
- SELECT ".$btyp_indu." AS bwtyp, b4.gml_id, b4.bauwerksfunktion, k4.beschreibung AS bezeichner, k4.dokumentation AS bfktd, 
- b4.bezeichnung, b4.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_indu." AS bwtyp, b4.gml_id, b4.bauwerksfunktion, k4.beschreibung, k4.dokumentation, b4.bezeichnung, b4.name, NULL AS gehoertzu, 
  round(st_area(b4.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b4.wkb_geometry,f4.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b4.wkb_geometry,f4.wkb_geometry) as drin, GeometryType(b4.wkb_geometry) as bgeotyp 
@@ -379,6 +357,5 @@
 // 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung
 $sqlb.="UNION
- SELECT ".$btyp_sport." AS bwtyp, b5.gml_id, b5.bauwerksfunktion, k5.beschreibung AS bezeichner, k5.dokumentation AS bfktd, 
- NULL AS bezeichnung, b5.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_sport." AS bwtyp, b5.gml_id, b5.bauwerksfunktion, k5.beschreibung, k5.dokumentation, NULL AS bezeichnung, b5.name, NULL AS gehoertzu, 
  round(st_area(b5.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b5.wkb_geometry,f5.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b5.wkb_geometry,f5.wkb_geometry) as drin, GeometryType(b5.wkb_geometry) as bgeotyp 
@@ -389,6 +366,5 @@
 // 6 - L e i t u n g
 $sqlb.="UNION
- SELECT ".$btyp_leitg." AS bwtyp, b6.gml_id, b6.bauwerksfunktion, k6.beschreibung AS bezeichner, k6.dokumentation AS bfktd, 
- NULL AS bezeichnung, b6.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_leitg." AS bwtyp, b6.gml_id, b6.bauwerksfunktion, k6.beschreibung, k6.dokumentation, NULL AS bezeichnung, b6.name, NULL AS gehoertzu, 
  round(st_area(b6.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b6.wkb_geometry,f6.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b6.wkb_geometry,f6.wkb_geometry) as drin, GeometryType(b6.wkb_geometry) as bgeotyp 
@@ -399,6 +375,5 @@
 // 7 - T r a n s p o r t a n l a g e
 $sqlb.="UNION
- SELECT ".$btyp_trans." AS bwtyp, b7.gml_id, b7.bauwerksfunktion, k7.beschreibung AS bezeichner, k7.dokumentation AS bfktd, 
- NULL AS bezeichnung, NULL AS name, NULL AS gehoertzu, 
+ SELECT ".$btyp_trans." AS bwtyp, b7.gml_id, b7.bauwerksfunktion, k7.beschreibung, k7.dokumentation, NULL AS bezeichnung, NULL AS name, NULL AS gehoertzu, 
  round(st_area(b7.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b7.wkb_geometry,f7.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b7.wkb_geometry,f7.wkb_geometry) as drin, GeometryType(b7.wkb_geometry) as bgeotyp 
@@ -409,6 +384,5 @@
 // 8 - T u r m  (Sonderfall Array)
 $sqlb.="UNION
- SELECT ".$btyp_turm." AS bwtyp, b8.gml_id, k8.wert AS bauwerksfunktion, k8.beschreibung AS bezeichner, k8.dokumentation AS bfktd, 
- NULL AS bezeichnung, b8.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_turm." AS bwtyp, b8.gml_id, k8.wert AS bauwerksfunktion, k8.beschreibung, k8.dokumentation, NULL AS bezeichnung, b8.name, NULL AS gehoertzu, 
  round(st_area(b8.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b8.wkb_geometry,f8.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b8.wkb_geometry,f8.wkb_geometry) as drin, GeometryType(b8.wkb_geometry) as bgeotyp 
@@ -419,6 +393,5 @@
 // 9 -  V o r r a t s b e h Ã€ l t e r ,  S p e i c h e r b a u w e r k
 $sqlb.="UNION
- SELECT ".$btyp_vorrat." AS bwtyp, b9.gml_id, b9.bauwerksfunktion, k9.beschreibung AS bezeichner, k9.dokumentation AS bfktd, 
- NULL AS bezeichnung, b9.name, NULL AS gehoertzu, 
+ SELECT ".$btyp_vorrat." AS bwtyp, b9.gml_id, b9.bauwerksfunktion, k9.beschreibung, k9.dokumentation, NULL AS bezeichnung, b9.name, NULL AS gehoertzu, 
  round(st_area(b9.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b9.wkb_geometry,f9.wkb_geometry))::numeric,2) AS schnittflae, 
  st_within(b9.wkb_geometry,f9.wkb_geometry) as drin, GeometryType(b9.wkb_geometry) as bgeotyp 
@@ -427,4 +400,38 @@
  LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion = k9.wert 
  WHERE f9.gml_id = $1 AND f9.endet IS NULL AND b9.endet IS NULL ";
+// 10 - H i s t o r i s c h e s  Bauwerk oder historische Einrichtung
+$sqlb.="UNION
+ SELECT ".$btyp_hist." AS bwtyp, b10.gml_id, NULL AS bauwerksfunktion, k10.beschreibung, k10.dokumentation, NULL AS bezeichnung, b10.name, NULL AS gehoertzu, 
+ round(st_area(b10.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b10.wkb_geometry,f10.wkb_geometry))::numeric,2) AS schnittflae, 
+ st_within(b10.wkb_geometry,f10.wkb_geometry) as drin, GeometryType(b10.wkb_geometry) as bgeotyp 
+ FROM ax_flurstueck f10 
+ JOIN ax_historischesbauwerkoderhistorischeeinrichtung b10 ON st_intersects(b10.wkb_geometry,f10.wkb_geometry) = true
+ LEFT JOIN ax_archaeologischertyp_historischesbauwerkoderhistorischee k10 ON b10.archaeologischertyp = k10.wert 
+ WHERE f10.gml_id = $1 AND f10.endet IS NULL AND b10.endet IS NULL ";
+// 11 - H e i l q u e l l e ,   G a s q u e l l e
+$sqlb.="UNION
+ SELECT ".$btyp_heil." AS bwtyp, b11.gml_id, NULL AS bauwerksfunktion, k11.beschreibung, k11.dokumentation, NULL AS bezeichnung, b11.name, NULL AS gehoertzu, 
+ round(st_area(b11.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b11.wkb_geometry,f11.wkb_geometry))::numeric,2) AS schnittflae, 
+ st_within(b11.wkb_geometry,f11.wkb_geometry) as drin, GeometryType(b11.wkb_geometry) as bgeotyp 
+ FROM ax_flurstueck f11 
+ JOIN ax_heilquellegasquelle b11 ON st_intersects(b11.wkb_geometry,f11.wkb_geometry) = true
+ LEFT JOIN ax_art_heilquellegasquelle k11 ON b11.art = k11.wert 
+ WHERE f11.gml_id = $1 AND f11.endet IS NULL AND b11.endet IS NULL ";
+// 12 - Einrichtung in Ã¶ffentlichen Bereichen
+$sqlb.="UNION
+ SELECT ".$btyp_oeff." AS bwtyp, b12.gml_id, NULL AS bauwerksfunktion, k12.beschreibung, k12.dokumentation, NULL AS bezeichnung, NULL AS name, NULL AS gehoertzu, 
+ round(st_area(b12.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b12.wkb_geometry,f12.wkb_geometry))::numeric,2) AS schnittflae, 
+ st_within(b12.wkb_geometry,f12.wkb_geometry) as drin, GeometryType(b12.wkb_geometry) as bgeotyp 
+ FROM ax_flurstueck f12 
+ JOIN ax_einrichtunginoeffentlichenbereichen b12 ON st_intersects(b12.wkb_geometry,f12.wkb_geometry) = true
+ LEFT JOIN ax_art_einrichtunginoeffentlichenbereichen k12 ON b12.art = k12.wert 
+ WHERE f12.gml_id = $1 AND f12.endet IS NULL AND b12.endet IS NULL ";
+/* TestfÃ€lle FS: SELECT f.gml_id FROM ax_flurstueck f JOIN ax_einrichtunginoeffentlichenbereichen b ON st_intersects(b.wkb_geometry,f.wkb_geometry) = true;
+ 140: DENW17AL34g000F6  */
+
+/* // 13 - Besonderer Bauwerkspunkt (ohne Geometrie !)
+$sqlb.="UNION
+ SELECT ".$btyp_bpkt.
+// Tab: ax_besondererbauwerkspunkt */
 
 // Generell ...
@@ -449,7 +456,9 @@
 	$bauflsum=$bauflsum + $rowb["schnittflae"];
 	$bbez=htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8");
+
 	$bfktk=htmlentities($rowb["bauwerksfunktion"], ENT_QUOTES, "UTF-8");
-	$bfktv=htmlentities($rowb["bezeichner"], ENT_QUOTES, "UTF-8");
-	$bfktd=htmlentities($rowb["bfktd"], ENT_QUOTES, "UTF-8");
+	$bfktv=htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8");
+	$bfktd=htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"); 
+
 	$bnam=htmlentities($rowb["name"], ENT_QUOTES, "UTF-8");
 	$bgeb=$rowb["gehoertzu"];
@@ -500,11 +509,11 @@
 				$btyptitle='Bauwerk im Verkehrsbereich'; break;
 			case $btyp_gewaesser:
-				$btyptitle='Bauwerk im GewÃ€sserbereich'; break;
+				$btyptitle='Bauwerk im Gew&auml;sserbereich'; break;
 			case $btyp_sonst: 
 				$btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung'; break;
 			case $btyp_indu:
-				$btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe"; break;
+				$btyptitle="Bauwerk oder Anlage f&uuml;r Industrie und Gewerbe"; break;
 			case $btyp_sport:
-				$btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung"; break;
+				$btyptitle="Bauwerk oder Anlage f&uuml;r Sport, Freizeit und Erholung"; break;
 			case $btyp_leitg:
 				$btyptitle="Leitung"; break;
@@ -514,7 +523,15 @@
 				$btyptitle="Turm"; break;
 			case $btyp_vorrat:
-				$btyptitle="VorratsbehÃ€lter, Speicherbauwerk"; break;
+				$btyptitle="Vorratsbeh&auml;lter, Speicherbauwerk"; break;
+			case $btyp_hist:
+				$btyptitle="Historisches Bauwerk oder historische Einrichtung"; break;
+			case $btyp_heil:
+				$btyptitle="Heilquelle, Gasquelle"; break;
+			case $btyp_oeff:
+				$btyptitle="Einrichtung in &ouml;ffentlichen Bereichen"; break;
+			case $btyp_bpkt:
+				$btyptitle="Besonderer Bauwerkspunkt"; break;
 			default:
-				$btyptitle='Fehler'; break;
+				$btyptitle='Fehler!'; break;
 		}
 		echo "<tr><td colspan=3></td><td colspan=2 class='gw'>".$btyptitle."</td></tr>"; // ++ Symbol?
@@ -528,8 +545,5 @@
 		echo "\n\t<td class='fla'>".$f1."</td>"
 		."\n\t<td class='".$bstyle."'>".$f2."</td>"; // FlÃ€chenangaben
-		echo "\n\t<td>";
-		if ($showkey) {echo "<span class='key'>(".$bfktk.")</span>&nbsp;";} // Bauwerksfunktion
-		echo "<span title='".$bfktd ."'>".$bfktv."</span>";
-		echo "</td>";
+		echo "\n\t<td>".DsKy($bfktk, 'Bauwerksfunktion-*')."<span title='".$bfktd ."'>".$bfktv."</span></td>";
 
 		// Lage / Haus (nur bei Typ 3 sonstige)
@@ -537,16 +551,14 @@
 		if ($bgeb != "") { // gehÃ¶rt zu GebÃ€ude
 		//	bw_gz_lage($bgeb); // Function: Lage (Adresse) ausgeben
-			echo "\n\t\t<a title='gehÃ¶rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$bgeb;
-			if ($showkey) {echo "&amp;showkey=j";}
-			echo "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
+			echo "\n\t\t<a title='gehÃ¶rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$bgeb.LnkStf()
+			."'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
 		}
 		echo "\n\t</td>";
 
 		// Bauwerk Details
-		echo "\n\t<td class='nwlink noprint'>"; // Link
-		echo "\n\t\t<a title='Bauwerksdaten' href='alkisbauwerk.php?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$bgml;
-		if ($showkey) {echo "&amp;showkey=j";}
-		echo "'>Bauwerk&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";  // +++ Icon fÃŒr Bauwerk schaffen +++
-		echo "\n\t</td>"
+		echo "\n\t<td class='nwlink noprint'>" // Link
+		."\n\t\t<a title='Bauwerksdaten' href='alkisbauwerk.php?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$bgml.LnkStf()
+		."'>Bauwerk&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>" // Icon fÃŒr Bauwerk schaffen
+		."\n\t</td>"
 	."\n</tr>";
 }
Index: /trunk/info/info/alkisn/alkislage.php
===================================================================
--- /trunk/info/info/alkisn/alkislage.php	(revision 426)
+++ /trunk/info/info/alkisn/alkislage.php	(revision 427)
@@ -2,5 +2,7 @@
 /*	alkislage.php
 
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
 	Kann die 3 Arten von Lagebezeichnung anzeigen und verbundene Objekte verlinken
 
@@ -13,9 +15,10 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
                Gemarkung und Flur bei Gruppenwechsel FETT anzeigen
-
-	ToDo:
+	2022-01-12 Neue Functions LnkStf(), DsKy()
+
+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.
+	Grenz-Ãberbauungen und angrenzende GebÃ€ude. Diese fehlen hier, weil nur VerknÃŒpfungen verarbeitet werden.
 	Mit FlÃ€chen-Verschneidung auch weitere FS anzeigen?
 */
@@ -45,9 +48,9 @@
 
 switch ($ltyp) {
-	case "m": // "Mit HsNr" = Hauptgebaeude
+	case "m": // "Mit HsNr" = HauptgebÃ€ude
 		$tnam = "ax_lagebezeichnungmithausnummer"; break;
-	case "p": // "mit PseudoNr" = Nebengebaeude
-		$tnam = "ax_lagebezeichnungmitpseudonummer";	break;
-	case "o": //"Ohne HsNr" = Gewanne oder Strasse
+	case "p": // "mit PseudoNr" = NebengebÃ€ude
+		$tnam = "ax_lagebezeichnungmitpseudonummer"; break;
+	case "o": //"Ohne HsNr" = Gewanne oder StraÃe
 		$tnam = "ax_lagebezeichnungohnehausnummer"; break;
 	default:
@@ -69,8 +72,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -173,5 +173,5 @@
 echo "\n<h2>Lagebezeichnung</h2>\n<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
+	// ToDo: kleiner, wenn ltyp=0 und die SchlÃŒsselfelder leer sind
 	echo "\n\t\t<table class='kennzla' title='Lage'>"
 		."\n\t\t<tr>";
@@ -199,23 +199,9 @@
 		echo "\n\t\t</tr>\n\t\t<tr>";
 			if ($osub != "g") { // nicht bei Gewanne
-
-				echo "\n\t\t\t<td title='Bundesland'>";
-				if ($showkey) {echo "<span class='key'>".$land."</span><br>";}
-				echo $bnam."&nbsp;</td>";
-
-				echo "\n\t\t\t<td title='Regierungsbezirk'>";
-				if ($showkey) {echo "<span class='key'>".$regbez."</span><br>";}
-				echo $rnam."&nbsp;</td>";
-
-				echo "\n\t\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\t<td title='Gemeinde'>";
-				if ($showkey and $osub != "g") {echo "<span class='key'>".$gem."</span><br>";}
-				echo $gnam."&nbsp;</td>";
-
-				echo "\n\t\t\t<td title='Stra&szlig;e'>";
-				if ($showkey and $osub != "g") {echo "<span class='key'>".$lage."</span><br>";}
+				echo "\n\t\t\t<td title='Bundesland'>".DsKy($land, 'Bundesland-*').$bnam."&nbsp;</td>"
+				."\n\t\t\t<td title='Regierungsbezirk'>".DsKy($regbez, 'Regierungsbezirk-*').$rnam."&nbsp;</td>"
+				."\n\t\t\t<td title='Kreis'>".DsKy($kreis, 'Kreis-*').$knam."&nbsp;</td>"
+				."\n\t\t\t<td title='Gemeinde'>".DsKy($gem, 'Gemeinde-*').$gnam."&nbsp;</td>"
+				."\n\t\t\t<td title='Stra&szlig;e'>".DsKy($lage, 'Stra&szlig;en-*');
 				if ($ltyp === "o") {
 					echo "<span class='wichtig'>".$snam."</span>";
@@ -248,14 +234,12 @@
 	if ($osub != "g") { // Link zu Strasse
 		echo "\n\t\t<p class='nwlink noprint'>"
-			."\n\t\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\t<a href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$strgml.LnkStf()
+			."' 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
+
+// F L U R S T Ã C K E
 // ax_Flurstueck  >weistAuf>  ax_LagebezeichnungMitHausnummer
 // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer
@@ -304,6 +288,5 @@
 
 		echo "\n<tr class='".$trclass."'>"
-			."\n\t<td>";
-			if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
+			."\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer');
 			if ($gwgmkg != $gmkg) {
 				echo "<b>".$gmkg."</b></td>";
@@ -322,7 +305,6 @@
 			."\n\t<td class='fla'>".$flae."</td>"
 			."\n\t<td>\n\t\t<p class='nwlink noprint'>"
-				."\n\t\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\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"].LnkStf()."&amp;eig=n"
+				."' 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>";
@@ -339,8 +321,5 @@
 	."\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=selbstverlinkung()."?gkz=".$gkz; // Basis
-	if ($showkey) {$url.="&amp;showkey=j";}
-	$url.="&amp;gmlid=";
+	$url=selbstverlinkung()."?gkz=".$gkz.LnkStf()."&amp;gmlid="; // Basis
 
 	switch ($ltyp) {
@@ -360,5 +339,5 @@
 			$neb=0;
 			while($row = pg_fetch_assoc($res)) {
-				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
+				echo "\n\t<a href='".$url.$row["gml_id"].LnkStf()."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
 				$neb++;
 			}
@@ -378,5 +357,5 @@
 			$hg=0;
 			while($row = pg_fetch_assoc($res)) {
-				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=m'>Haus-Nr ".$pseu."</a>&nbsp;&nbsp;";
+				echo "\n\t<a href='".$url.$row["gml_id"].LnkStf()."&amp;ltyp=m'>Haus-Nr ".$pseu."</a>&nbsp;&nbsp;";
 				$hg++;
 			}
@@ -396,5 +375,5 @@
 			$neb=0;
 			while($row = pg_fetch_assoc($res)) {
-				echo "\n\t<a href='".$url.$row["gml_id"]."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
+				echo "\n\t<a href='".$url.$row["gml_id"].LnkStf()."&amp;ltyp=p'>lfd.-Nr ".$row["laufendenummer"]."</a>&nbsp;&nbsp;";
 				$neb++;
 			}
@@ -405,5 +384,5 @@
 }
 
-// G E B A E U D E
+// G E B Ã U D E
 if ($ltyp != "o") { // OhneHsNr linkt nur Flurst.
 	echo "\n\n<a id='geb'></a>\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>"
@@ -444,25 +423,13 @@
 		$gfla=$row["flaeche"];
 		echo "\n<tr>"
-			."\n\t<td>".$row["name"]."</td>"
-			."\n\t<td class='fla'>".$gfla." m&#178;</td>";
-
-			echo "\n\t<td title='".htmlentities($row["ud"], ENT_QUOTES, "UTF-8")."'>";
-			if ($showkey) {echo "<span class='key'>".htmlentities($row["gebaeudefunktion"], ENT_QUOTES, "UTF-8")."</span> ";}
-			echo $row["uv"]."</td>";
-
-			echo "\n\t<td title='".htmlentities($row["hd"], ENT_QUOTES, "UTF-8")."'>";
-			if ($showkey) {echo "<span class='key'>".htmlentities($row["bauweise"], ENT_QUOTES, "UTF-8")."</span> ";}
-			echo $row["hv"]."</td>";
-				
-			echo "\n\t<td title='".htmlentities($row["zd"] , ENT_QUOTES, "UTF-8")."'>";
-			if ($showkey) {echo "<span class='key'>".htmlentities($row["zustand"], ENT_QUOTES, "UTF-8")."</span> ";}
-			echo $row["zv"]."</td>";
-
-			echo "\n\t<td class='nwlink noprint'>"
-				."\n\t\t<a title='komplette Hausdaten' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml;
-				if ($showkey) {echo "&amp;showkey=j";}
-				echo "'>Haus <img src='ico/Haus.png' width='16' height='16' alt=''></a>"
-			."\n\t</td>"
-		."\n</tr>";
+		."\n\t<td>".$row["name"]."</td>"
+		."\n\t<td class='fla'>".$gfla." m&#178;</td>"
+		."\n\t<td title='".htmlentities($row["ud"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["gebaeudefunktion"], 'Geb&auml;udefunktion-*').$row["uv"]."</td>"
+		."\n\t<td title='".htmlentities($row["hd"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["bauweise"], 'Bauweise-*').$row["hv"]."</td>"
+		."\n\t<td title='".htmlentities($row["zd"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["zustand"], 'Zustand-*').$row["zv"]."</td>"
+		."\n\t<td class='nwlink noprint'>"
+			."\n\t\t<a title='komplette Hausdaten' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml.LnkStf()
+			."'>Haus <img src='ico/Haus.png' width='16' height='16' alt=''></a>"
+		."\n\t</td>\n</tr>";
 	}
 	echo "\n</table>";
Index: /trunk/info/info/alkisn/alkis_conf_location.php
===================================================================
--- /trunk/info/info/alkisn/alkis_conf_location.php	(revision 426)
+++ /trunk/info/info/alkisn/alkis_conf_location.php	(revision 427)
@@ -1,6 +1,11 @@
 <?php
-/*	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+/*	alkis_conf_location.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, 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:
 	2020-10-13 Syntax ohne Klammern, rename
Index: /trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisfsnw.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisfsnw.php	(revision 427)
@@ -1,13 +1,13 @@
 <?php
-/*	Modul: alkisfsnw.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	FlurstÃŒcksnachweis fuer ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
+/*	alkisfsnw.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	FlurstÃŒcksnachweis fÃŒr ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
 
 	Version:
 	2016-02-24 Version fÃŒr norGIS-ALKIS-Import
-	.....
-	2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
-	2020-10-13 debug-infos raus
+	...
 	2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
 	2020-12-09 Verschn. mit "Bau-, Raum- oder Bodenordnungsrecht" korrigiert, Entschl. BodenschÃ€tzung korrigiert
@@ -15,4 +15,5 @@
 	2021-03-09 Link zum GebÃ€udenachweis auch mit "Bauwerke" betiteln
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Functions in Fach-Modul verschoben, die nicht von mehreren verwendet werden. Neue Functions LnkStf(), DsKy()
 
 ToDo:
@@ -23,4 +24,36 @@
 	- Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen) 
 */
+
+function werteliste($bez ,$sqlin) {
+// Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
+// Dient dazu, SchlÃŒssel-ARRAYs auflÃ¶sen ohne die Zeile im JOIN mehrfach aufzulisten
+// Anwendung: FS-Nachweis BodenschÃ€tzung
+	global $dbg;
+
+	if ($bez === 'e') {$tabelle = 'ax_entstehungsartoderklimastufewasserverhaeltnisse_bodensc';} 
+	elseif ($bez === 's') {$tabelle = 'ax_sonstigeangaben_bodenschaetzung';}
+
+	$sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
+	$v = array('9');
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Werteliste.</p>";
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
+		return;
+	}
+	$zeianz=pg_num_rows($res);
+	while($row = pg_fetch_assoc($res)) {
+		echo " ".$row["beschreibung"];
+	}
+	pg_free_result($res);
+	if ($zeianz === 0) {
+		echo "(kein Treffer)";
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
+	}
+	return;
+}
+
+// Start
 ini_set("session.cookie_httponly", 1);
 session_start();
@@ -71,8 +104,5 @@
 <?php
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten. Blendet z.B. "fiktives Blatt" aus.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -91,5 +121,5 @@
 	} else {
 		echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
-		echo "<p>Kennzeichen veraltet? <a href='./alkisfshist.php?gkz=".$gkz."&fskennz=".$fskennz."'>Suche in der Flurst&uuml;cks-Historie</a></p>";
+		echo "<p>Kennzeichen veraltet? <a href='./alkisfshist.php?gkz=".$gkz."&fskennz=".$fskennz.LnkStf()."'>Suche in der Flurst&uuml;cks-Historie</a></p>";
 		echo "\n</body>\n</html>";
 		return;
@@ -98,5 +128,5 @@
 }
 
-// F L U R S T U E C K  m. Gebiet
+// F L U R S T Ã C K  m. Gebiet
 $sql ="SELECT f.zeigtaufexternes_art, f.zeigtaufexternes_name, f.flurnummer, f.zaehler, f.nenner, f.gemeindezugehoerigkeit_regierungsbezirk, f.gemeindezugehoerigkeit_kreis, f.gemeindezugehoerigkeit_gemeinde, f.amtlicheflaeche, st_area(f.wkb_geometry) AS fsgeomflae, 
 to_char(cast(f.zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, f.istgebucht, g.gemarkungsnummer, g.bezeichnung, r.bezeichnung AS rbez, k.bezeichnung AS kbez, m.bezeichnung AS mbez 
@@ -136,5 +166,5 @@
 	$flstnummer=$zaehler;
 	if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
-	$fsbuchflae=$row["amtlicheflaeche"]; // amtliche Fl. aus DB-Feld
+	$fsbuchflae=$row["amtlicheflaeche"]; // amtl. Fl. aus DB-Feld
 	$fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÃ€che
 	$the_Xfactor = $fsbuchflae / $fsgeomflae; // Multiplikator zur Umrechnung geometrische AbschnittsflÃ€chen in BuchflÃ€che
@@ -165,5 +195,5 @@
 if ( ($filtkreis != '' and $filtkreis != $kreis) or ($filtgem != '' and $filtgem != $gemeinde) ) {
 	// Einer der gesetzten Filter passt nicht
-	if ($dbg > 2) { //++ SchÃ¶nes Bild? Stop-Zeichen?
+	if ($dbg > 2) {
 		echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
 		."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
@@ -179,7 +209,5 @@
 	."\n\t\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t\t\t\t<tr>" // darin Tabelle Kennzeichen
 		."\n\t\t\t\t\t<td class='head'>Gemarkung</td>\n\t\t\t\t\t<td class='head'>Flur</td>\n\t\t\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t\t\t</tr>"
-		."\n\t\t\t\t<tr>\n\t\t\t\t\t<td title='Gemarkung'>";
-			if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
-			echo $gemkname."&nbsp;</td>"
+		."\n\t\t\t\t<tr>\n\t\t\t\t\t<td title='Gemarkung'>".DsKy($gmkgnr, 'Gemarkungsnummer').$gemkname."&nbsp;</td>"
 		."\n\t\t\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
 		."\n\t\t\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t\t\t\t</tr>"
@@ -194,29 +222,18 @@
 ."\n</tr>";
 
-echo "\n<tr>" // Zeile: G e b i e t s z u g e h o e r i g k e i t  Gemeinde / Kreis / Regierungsbezirk
+echo "\n<tr>" // Zeile: GebietszugehÃ¶rigkeit - Gemeinde / Kreis / Reg.bez.
 	."\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>"
 	."\n\t<td>Gemeinde<br>Kreis<br>Regierungsbezirk</td>"
-	."\n\t<td class='lr' colspan='3'>"; // 3-5
-		if ($showkey) {echo "<span class='key'>(".$gemeinde.")</span> ";}
-		echo $mbez."<br>";
-		if ($showkey) {echo "<span class='key'>(".$kreis.")</span> ";}
-		echo $kbez."<br>";
-		if ($showkey) {echo "<span class='key'>(".$bezirk.")</span> ";}
-		echo $rbez
-	."</td>"
+	."\n\t<td class='lr' colspan='3'>".DsKy($gemeinde, 'Gemeinde-Nummer').$mbez."<br>".DsKy($kreis, 'Kreis-Nummer').$kbez."<br>".DsKy($bezirk, 'Regierungsbezirk-Nummer').$rbez."</td>"
 	."\n\t<td class='nwlink'>";
 	if ($fsHistorie){ // conf
 		echo "\n\t\t<p class='nwlink noprint'>"
-		."\n\t\t\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 "
-		."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
-		."</a>"
-		."\n\t\t</p>\n\t";
+		."\n\t\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf()
+		."' title='Vorg&auml;nger-Flurst&uuml;cke'>Historie <img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''></a>\n\t\t</p>\n\t";
 	}
 	echo "</td>"
 ."\n</tr>";
 
-// ** L a g e b e z e i c h n u n g **
+// L a g e b e z e i c h n u n g
 
 // Lagebezeichnung  M I T  Hausnummer
@@ -250,14 +267,12 @@
 		$hsnr=$row["hausnummer"];
 		echo "\n<tr>";
-			if ($j === 0) { // 1
+			if ($j === 0) {
 				echo "\n\t<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
 			} else {
 				echo "\n\t<td>&nbsp;</td>";
 			}
-			echo "\n\t<td>&nbsp;</td>" // 2
-			."\n\t<td class='lr' colspan='3'>"; // 3-5
-				if ($showkey) {echo "<span class='key' title='StraÃenschl&uuml;ssel'>(".$row["lage"].")</span>&nbsp;";}
-				echo $sname."&nbsp;".$hsnr."</td>";
-			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"; // 6
+			echo "\n\t<td>&nbsp;</td>"
+			."\n\t<td class='lr' colspan='3'>".DsKy($row["lage"], 'StraÃen-*').$sname."&nbsp;".$hsnr."</td>"
+			."\n\t<td>\n\t\t<p class='nwlink noprint'>";
 
 			// +++ davor auch Link "StraÃe"
@@ -266,11 +281,10 @@
 				$kgmlalt=$kgml; // Katalog GML-ID
 				echo "\n\t\t\t<a title='Flurst&uuml;cke mit oder ohne Hausnummer".$slink."' "
-				."href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."'>Stra&szlig;e "
+				."href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml.LnkStf()."'>Stra&szlig;e "
 				."<img src='ico/Strassen.png' width='16' height='16' alt='STRA'></a> ";
 			}
 
-			echo "\n\t\t\t<a title='Flurst&uuml;cke und Geb&auml;ude mit Hausnummer ".$hsnr."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"];
-				if ($showkey) {echo "&amp;showkey=j";}
-				echo "'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>"
+			echo "\n\t\t\t<a title='Flurst&uuml;cke und Geb&auml;ude mit Hausnummer ".$hsnr."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"].LnkStf()
+				."'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>"
 			."\n\t\t</p>\n\t</td>"  // 6
 		."\n</tr>";
@@ -293,8 +307,6 @@
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
-	//if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
 	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
 }
-$j=0;
 while($row = pg_fetch_assoc($res)) {
 	$skey=$row["lage"]; // Strassenschl.
@@ -304,11 +316,10 @@
 		echo "\n<tr>"
 			."\n\t<td class='ll' title='unverschl&uuml;sselte Lagebezeichnung'><img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''> Gewanne:</td>" // 1
-			."\n\t<td></td>" // 2
-			."\n\t<td class='lr' colspan='3'>".$gewann."</td>" // 3-5
-			."\n\t<td>\n\t\t<p class='nwlink noprint'>" // 6
-				."\n\t\t\t<a title='Flurst&uuml;cke mit der Gewanne ".$gewann."' 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>"
-			."\n\t\t</p>\n\t</td>" // 6
+			."\n\t<td></td>"
+			."\n\t<td class='lr' colspan='3'>".$gewann."</td>"
+			."\n\t<td>\n\t\t<p class='nwlink noprint'>"
+				."\n\t\t\t<a title='Flurst&uuml;cke mit der Gewanne ".$gewann."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml.LnkStf()
+				."'>\n\t\t\tLage <img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''></a>"
+			."\n\t\t</p>\n\t</td>"
 		."\n</tr>";
 	} elseif ($skey > 0) {
@@ -320,17 +331,12 @@
 		}
 		echo "\n<tr>"
-			."\n\t<td class='ll'><img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''> Stra&szlig;e:</td>" // 1
-			."\n\t<td></td>" // 2
-			."\n\t<td class='lr' colspan='3'>"; // 3-5
-				if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
-				echo $sname."</td>";
-			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>" // 6
-				."\n\t\t\t<a title='FlurstÃŒcke ".$slink."' 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>"
-			."\n\t\t</p>\n\t</td>" // 6
+			."\n\t<td class='ll'><img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''> Stra&szlig;e:</td>"
+			."\n\t<td></td>\n\t<td class='lr' colspan='3'>".DsKy($skey, 'StraÃen-*').$sname."</td>";
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"
+				."\n\t\t\t<a title='FlurstÃŒcke ".$slink."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml.LnkStf()
+				."'>\n\t\t\tLage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''>\n\t\t\t</a>"
+			."\n\t\t</p>\n\t</td>"
 		."\n</tr>";
 	}
-	$j++;
 }
 pg_free_result($res);
@@ -381,12 +387,9 @@
 		}
 		$absflaebuch = number_format($flae,0,",",".") . " m&#178;"; // Formatierte Abschnitts-Buch-FlÃ€che
-		echo "\n\t<td></td>"; // 2
-		echo "\n\t<td class='fla' title='Buchfl&auml;che des Abschnitts'>".$absflaebuch."</td>"; // 3 - gleiche Spalte wie Fl. in BodenschÃ€tzg.
-		echo "\n\t<td></td>"; // 4
-		echo "\n\t<td class='lr' title='".$title."'>"; // 5 - gleiche Sp. wie Zustandsstufe usw.
-			if ($showkey) {echo "<span class='key'>(".$nutzsl.")</span> ";}
-			echo $nutzung
-		."</td>"
-		."\n\t<td>"; // 6
+		echo "\n\t<td></td>"
+		."\n\t<td class='fla' title='Buchfl&auml;che des Abschnitts'>".$absflaebuch."</td>" // Sp. wie Fl. in BodenschÃ€tzg.
+		."\n\t<td></td>"
+		."\n\t<td class='lr' title='".$title."'>".DsKy($nutzsl, 'Nutzungsarten-*').$nutzung."</td>"
+		."\n\t<td>";
 /*		// Derzeit ist keine Gruppe zugeordnet
 			switch ($grupp) { // Icon nach 4 Objektartengruppen
@@ -395,9 +398,9 @@
 				case "Vegetation": $ico = "Wald.png"; break;
 				case "GewÃ€sser":   $ico = "Wasser.png";	break;
-				default:	$ico = "Abschnitt.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>" // 6
+		echo "</td>"
 	."\n</tr>";
 	$j++;
@@ -414,6 +417,5 @@
 	."\n\t<td>" // 6 Link auf GebÃ€ude-Auswertung
 		."\n\t\t<p class='nwlink noprint'>" // Gebaeude-Verschneidung
-		."\n\t\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
-		if ($showkey) {echo "&amp;showkey=j";}
+		."\n\t\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf();
 		if ($cnt_adressen > 0) { // wenn Adresse vorgekommen ist
 			echo "' title='Geb&auml;ude oder Bauwerke auf oder an dem Flurst&uuml;ck'>Geb&auml;ude/Bauw.";
@@ -482,30 +484,21 @@
 		."\n\t<td class='lr'><span title='".$kbez1."'>".$boedenzahl."</span>/<span title='".$kbez2."'>".$ackerzahl."</span></td>"
 		."\n\t<td class='lr'>";
-
-			if ($showkey) {echo "\n\t\t<span class='key'>(".$kulturartk.")</span> ";}
-			echo "\n\t\t<span title='Kulturart'>".$kulturartv."</span> ";
-
-			if ($showkey) {echo "\n\t\t<span class='key'>(".$row['bodenartk'].")</span> ";}
-			echo "\n\t\t<span title='Bodenart'>".$row['bodenartv']."</span> ";
-
-			echo "\n\t\t<span title='Zustandsstufe'>".$row['zustbodv']."</span> ";
+		echo "\n\t\t".DsKy($kulturartk, 'Kulturart')." <span title='Kulturart-*'>".$kulturartv."</span>";
+		echo "\n\t\t<br>".DsKy($row['bodenartk'], 'Bodenart-*')." <span title='Bodenart'>".$row['bodenartv']."</span>";
+		echo "\n\t\t<br><span title='Zustandsstufe'>".$row['zustbodv']."</span>";
 
 			// 2 ARRAYs auflÃ¶sen
 			if (isset($entsteh)) {
 				$ent=trim($entsteh, "{}");
-				echo "\n\t\t <span title='Enststehungsart oder Klimastufe, Wasserverh&auml;ltnisse'>";
-					if ($showkey) {echo "\n\t\t <span class='key'>(".$ent.")</span> ";}
-					werteliste ('e', $ent);
+				echo "\n\t\t<br><span title='Enststehungsart oder Klimastufe, Wasserverh&auml;ltnisse'>".DsKy($ent, '*');
+				werteliste('e', $ent); // ++ Zeilenweise mit <br> ?
 				echo "</span>";
 			}
 			if (isset($sonst)) {
 				$son=trim($sonst, "{}");
-				echo "\n\t\t <span title='Sonstige Angaben'>";
-					if ($showkey) {echo "\n\t\t <span class='key'>(".$son.")</span> ";}
-					werteliste ('s', $son);
-				echo "</span>";
+				echo "\n\t\t<br><span title='Sonstige Angaben'>".werteliste('s', $son)."</span>"; // ++ Zeilenweise mit <br> ?
 			}
 			if (isset($jahr)) {
-				echo "\n\t\t<span title='Jahreszahl'>".$jahr."</span>";
+				echo "\n\t\t<br><span title='Jahreszahl'>".$jahr."</span>";
 			}
 		echo "\n\t</td>"
@@ -557,13 +550,9 @@
 				."\n\t<td>Bodenrecht</td>" // 1
 				."\n\t<td class='re'>Festlegung: </td>" // 2 "Art der Festlegung" zu lang
-				."\n\t<td colspan='3'>"; // 3-5
-					if ($showkey) {echo "<span class='key'>(".$row['wert'].")</span> ";}
-					echo $row['art_verf']
-				."</td>";
-				echo "\n\t<td>" // 6 LINK:
+				."\n\t<td colspan='3'>".DsKy($row['wert'], 'Art des Verfahrens').$row['art_verf']."</td>";
+				echo "\n\t<td>"
 					."\n\t\t<p class='nwlink noprint'>"
-					."\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>"
+					."\n\t\t\t<a href='alkisbaurecht.php?gkz=".$gkz."&amp;gmlid=".$row['verf_gml'].LnkStf()
+					."' title='Bau-, Raum- oder Bodenordnungsrecht'>Recht <img src='ico/Gericht.png' width='16' height='16' alt=''></a>"
 					."\n\t\t</p>"		
 				."\n\t</td>"
@@ -574,9 +563,6 @@
 					."\n\t<td>&nbsp;</td>" // 1
 					."\n\t<td class='re'>Dienststelle: </td>" // 2
-					."\n\t<td colspan='3'>"; // 3-5
-						if ($showkey) {echo "<span class='key'>(".$dstell.")</span> ";}
-						echo $row['stelle_bez']
-					."</td>"
-					."\n\t<td>&nbsp;</td>" // 6
+					."\n\t<td colspan='3'>".DsKy($dstell, 'Art der Dienststelle').$row['stelle_bez']."</td>"
+					."\n\t<td>&nbsp;</td>"
 				."\n</tr>";
 			}
@@ -588,10 +574,9 @@
 					."\n\t<td class='re'>Verfahren: </td>"
 					."\n\t<td colspan='3'>";
-						if ($vnam == "") {
-							echo $vbez; // nur die Nummer
-						} else { // Name oder beides
-							if ($showkey) {echo "<span class='key'>(".$vbez.")</span> ";}
-							echo $vnam;
-						}
+					if ($vnam == "") {
+						echo $vbez; // nur die Nummer
+					} else { // Name oder beides
+						echo DsKy($vbez, 'Nummer des Verfahrens').$vnam;
+					}
 		 			echo "</td>"
 					."\n\t<td>&nbsp;</td>"
@@ -627,11 +612,8 @@
 		$verf_next=array(); // .. und zum AuffÃŒllen leeren
  		$stufe++;
-		$i=0; // SchleifenzÃ€hler Elemente
 		foreach($verf_akt as $gml_ber_bs) {
-			$i++;
 			if (ber_bs_zaehl($gml_ber_bs) > 0) {
 				$verf_neu=ber_bs_anzg($gml_ber_bs, $eig, false, $gmlid, ""); // Anzeige ber. Buchungst., ggf. mit EigentÃŒmer.
 				$anz_neu=count($verf_neu); // Das Ergebnis zÃ€hlen
-			//	if ($dbg > 2) {echo "<p class='dbg'>Weiter zu verfolgen: Stufe ".$stufe.", Element ".$i.", Anzahl: ".$anz_neu."</p>";}
 				if ($anz_neu > 0) { // wenn neue geliefert
 					$verf_next=array_merge($verf_next, $verf_neu); // die neuen an die Sammlung heften
@@ -647,14 +629,9 @@
 	// Wenn der Verweis der Buchungsstelle auf ein Grundbuch ins Leere lÃ€uft, weil das Grundbuch 
 	//  nicht im SekundÃ€rbestand vorhanden ist, dann kÃ¶nnte das am NBA-Verfahren liegen.
-	if ( $gezeigt === 0 and $stufe === 1 ) { // and $anzber === 0
-	//	Fehlt die Buchung oder das Grundbuch?
+	if ( $gezeigt === 0 and $stufe === 1 ) {
 		echo "<p class='err'>Das Grundbuch zur Buchung '".$gml_buchungsstelle."' fehlt in der Datenbank.</p>";
-		
-		if ($dbg > 1) { // fehlt die Buchung??
+		if ($dbg > 2) { // fehlt die Buchung?
 			echo "<p class='dbg'>Suchen mit SQL: SELECT * FROM ax_buchungsstelle WHERE gml_id='".$gml_buchungsstelle."'; </p>";
 		}
-	// Buchung verlinken fÃŒr weitere Suche:	alkisgsnw.php?gkz=320&gmlid=DENW18AL0000SEbl
-	// Aber das Modul zeigt nichts an (inner join ?)
-	// +++ ZunÃ€chst: Auch im Modul alkisgsnw.php den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht ?!
 	}
 }
Index: /trunk/info/info/alkisn/alkisgsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisgsnw.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisgsnw.php	(revision 427)
@@ -1,15 +1,17 @@
 <?php
-/*	Modul: alkisgsnw.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	GrundstÃŒcksnachweis fuer ein GrundstÃŒck aus ALKIS PostNAS
+/*	alkisgsnw.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	GrundstÃŒcksnachweis fÃŒr ein GrundstÃŒck (Buchung) aus ALKIS PostNAS
 
 	Version:
-	2018-05-03 Neues Modul "gsnw" abgeleitet aus "fsnw"
-	2018-11-09 Umstellung Full-Schema
-	2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
+	2018-05-03 Neues Modul
+	...
 	2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 
 ToDo: 
@@ -74,6 +76,4 @@
 // Der GrundstÃŒcksnachweis wird aus anderen Modulen nur fÃŒr die "GrundstÃŒck"-Buchung aufgerufen, so dass diese Suche nicht notwendig ist.
 // Bei Aufrufen von auÃen kann dies aber sinnvoll sein.
-
-// ToDo: um Mehr als eine Stufe zurÃŒck fÃŒhren (max. 3)
 
 	global $gkz, $dbg, $showkey, $gerooted;
@@ -110,7 +110,6 @@
 				$gml_d=$row["gml_id"];
 				$bvnr=ltrim($row["laufendenummer"], '0');
-				echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_d;
-				if ($showkey) {echo "&amp;showkey=j";}
-				echo "' title='Grundst&uuml;cksnachweis'>Buchung ".$bvnr
+				echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_d.LnkStf()
+				."' title='Grundst&uuml;cksnachweis'>Buchung ".$bvnr
 				." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a><br>";
 			}
@@ -170,5 +169,5 @@
 <?php
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgsnw.php'");
@@ -227,17 +226,13 @@
 		if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel
 		$zpaar=!$zpaar;
-		echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
-			echo "\n\t<td>";
-				if ($showkey) {echo "<span class='key'>".$rowfs["gemarkungsnummer"]."</span> ";}
-				echo $rowfs["bezeichnung"]
-			."</td>"
+		echo "\n<tr class='".$trclass."'>"; // eine Zeile je FlurstÃŒck
+			echo "\n\t<td>".DsKy($rowfs["gemarkungsnummer"], 'Gemarkungsnummer').$rowfs["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\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowfs["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=''>"
+				."\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowfs["gml_id"]."&amp;eig=n".LnkStf()
+				."' 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>"
Index: /trunk/info/info/alkisn/alkisauszug.css
===================================================================
--- /trunk/info/info/alkisn/alkisauszug.css	(revision 426)
+++ /trunk/info/info/alkisn/alkisauszug.css	(revision 427)
@@ -1,14 +1,14 @@
-/*	Modul: alkisauszug.css
-	S t y l e s  zur ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+/*	alkisauszug.css
+
+	S t y l e s  zur ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
 
 	Version:
-	2010-09-21	
-	....
-	2018-04-23	Spaltenbreiten
-	2018-05-03	GS-Nachweis
-	2020-02-03	media screen body width
+	2010-09-21
+	...
 	2021-03-08  Gruppenwechsel-ZwischenÃŒberschrift
 	2021-03-17	Balken von Bauwerk Farbe wie im WMS
 	2021-12-30	Spalte nwlink breiter, Class td.flag entfÃ€llt, Tabellenkopf Hintergrund
+	2022-02-24  neue Bauwerk-Typen, Farben ÃŒberarbeitet
 
 	https://wiki.selfhtml.org/wiki/Grafik/Farbpaletten#Farbnamen
@@ -19,40 +19,42 @@
 /* Banner im Kopf (farbiger Balken) */
 p.balken	{text-align: right; padding-top: 4px; padding-bottom: 4px; padding-right: 24px;}
-
 	/* Farbcode individuell fÃŒr Nachweis-Art (gleiche Farbe wie Rahmen um Kennz.) */
-p.fsausk	{background-color: teal; color: silver;}			/* Uebersichts-Seite Flurstuecks-Auskunft */
-p.fskennz,p.fsei{background-color: navy; color: silver;}		/* Flurstuecks-Nachweis */
-p.fshis		{background-color: gray; color: white;}				/* Flurstuecks-Historie */
+p.fsausk	{background-color: teal; color: silver;}			/* Ãbersichts-Seite FlurstÃŒcks-Auskunft */
+p.fskennz,p.fsei{background-color: navy; color: silver;}		/* FlurstÃŒcks-Nachweis */
+p.fshis		{background-color: gray; color: white;}				/* FlurstÃŒcks-Historie */
 p.gbkennz	{background-color: green; color: silver;}			/* Bestandsnachweis */
-p.gskennz	{background-color: LightGreen ; color: DimGray ;}	/* GrundstÃŒcksnachweis */
+p.gskennz	{background-color: LightGreen ; color: black;}		/* GrundstÃŒcksnachweis */
 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.geb		{background-color: yellow; color: black;}			/* GebÃ€ude zum FS */
+p.lage		{background-color: lime; color: black;}				/* Lage/Adresse zum FS */
+p.strasse	{background-color: limegreen; color: black;}		/* StraÃe */
 p.recht		{background-color: #F0F8FF; color: gray;}			/* Baurecht, Bodenneuordnung */
-
 	/* in alkisbauwerk.php synchron zum Mapfile (WMS), 9 Layer-Gruppen */
-p.bauwerk1	{background-color: rgb(40,0,180); color: gray;}		/* 1 Bauwerk im Verkehrsbereich */
-p.bauwerk2	{background-color: rgb(0,160,246); color: gray;}	/* 2 Bauwerk im GewÃ€sserbereich */
+p.bauwerk1	{background-color: rgb(40,0,180); color: silver;}	/* 1 Bauwerk im Verkehrsbereich */
+p.bauwerk2	{background-color: rgb(0,160,246); color: black;}	/* 2 Bauwerk im GewÃ€sserbereich */
 p.bauwerk3	{background-color: rgb(160,130,0); color: black;}	/* 3 Sonstiges Bauwerk oder sonstige Einrichtung */
-p.bauwerk4	{background-color: rgb(252,162,2); color: gray;}	/* 4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe */
-p.bauwerk5	{background-color: rgb(140,0,120); color: gray;}	/* 5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung */
+p.bauwerk4	{background-color: rgb(252,162,2); color: black;}	/* 4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe */
+p.bauwerk5	{background-color: rgb(140,0,120); color: silver;}	/* 5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung */
 p.bauwerk6	{background-color: rgb(220,10,10); color: black;}	/* 6 Leitung */
-p.bauwerk7	{background-color: rgb(10,180,10 ); color: gray;}	/* 7 Transportanlage */
-p.bauwerk8	{background-color: rgb(135,76,1); color: gray;}		/* 8 Turm */
+p.bauwerk7	{background-color: rgb(10,180,10 ); color: black;}	/* 7 Transportanlage */
+p.bauwerk8	{background-color: rgb(135,76,1); color: silver;}	/* 8 Turm */
 p.bauwerk9	{background-color: rgb(0,140,40); color: black;}	/* 9 VorratsbehÃ€lter, Speicherbauwerk */
+p.bauwerk10	{background-color: rgb(80,70,40); color: silver;}	/* 10 Historisches Bauwerk oder historische Einrichtung */
+p.bauwerk11	{background-color: rgb(190,170,10); color: black;}	/* 11 Heilquelle, Gasquelle */
+p.bauwerk12	{background-color: rgb(200,10,60); color: black;}	/* 12 Einrichtung in Ã¶ffentlichen Bereichen */
+p.bauwerk13	{background-color: rgb(250,40,10); color: black;}	/* 13 Besonderer Bauwerkspunkt */
 
 /* Format nach Inhalt */
-p.fsd		{margin-left: 170px;}					/* Flst-Flaeche */
+p.fsd		{margin-left: 170px;}					/* Flst-FlÃ€che */
 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.avh		{font-style: italic; color: navy;}		/* AnteilsverhÃ€ltnis */
 p.ant		{font-style: italic; position: relative;} /* Anteil am FS  left: 12px;*/
-p.geig		{color: navy;}							/* GB-Nachw. Eigentuemer Name */
-p.gadr		{color: maroon; margin-top: 1pt;}		/* GB-Nachw. Eigentuemer Adresse */
+p.geig		{color: navy;}							/* GB-Nachw. EigentÃŒmer Name */
+p.gadr		{color: maroon; margin-top: 1pt;}		/* GB-Nachw. EigentÃŒmer 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, td.dbg{font-size: 10px; color: gray;}		/* Debug -> Entwickler */
-p.cnt		{font-size: 10px; color: gray;}			/* Counter, Zaehler */
+p.cnt		{font-size: 10px; color: gray;}			/* Counter, ZÃ€hler */
 p.warn		{color: gray; font-style: italic;}		/* Warnung, Hinweis */
 p.ph		{color: gray;}							/* Platzhalter */
@@ -75,5 +77,5 @@
 	overflow: auto; padding: 6px; background: #e4f7dd;}
 
-span.key 	{color: gray; font-style: italic;} /* Schluesselwert vor Text */
+span.key 	{color: gray; font-style: italic;} /* SchlÃŒsselwert vor Text */
 span.wichtig{color: #BB0000; font-weight: bold;} /* Wert hervorheben */
 span.flae	{font-weight: bold;} /* FlÃ€chensumme Flurst. */
@@ -85,12 +87,12 @@
 
 /* Kennzeichen mit Rahmen, Rahmen-Farben wie 'Balken' */
-table.kennzfs	{border: 2px solid  navy;  padding: 3px; margin: 0px;}	/* Flurstueck */
+table.kennzfs	{border: 2px solid  navy;  padding: 3px; margin: 0px;}	/* FlurstÃŒck */
 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 */
+table.kennzstra	{border: 2px solid  limegreen;  padding: 3px; margin: 0px;}	/* StraÃe */
 
-/* fast volle Breite, fuer verschiedene Zwecke, aber kleiner als Body */
+/* fast volle Breite, fÃŒr verschiedene Zwecke, aber kleiner als Body */
 table.fs, table.nua, table.klas, table.eig, table.outer, table.geb {width: 98%;} 
 
@@ -102,5 +104,5 @@
 td.re	{min-width: 80px; padding-right: 4px; text-align: right;}	/* RechtsbÃŒndig */
 td.fla	{width: 110px; padding-right: 4px; text-align: right;}		/* FlÃ€chen rechtsbuendig (stellengerecht) */
-td.fsnr	{padding-right: 4px; text-align: right;}					/* Flst.-Nr. rechtsbuendig */
+td.fsnr	{padding-right: 4px; text-align: right;}					/* Flst.-Nr. rechtsbÃŒndig */
 td.key	{width:  35px; padding-right: 4px; padding-left: 4px;}
 /* td.emz	{width: 45px; padding-right: 4px; padding-left: 4px; text-align: right;} Ertragsmesszahl der BodenschÃ€tzung */
@@ -112,4 +114,5 @@
 td.fett	{font-weight: bold;}
 td.nwlink {min-width: 99px;} /* Link zum Nachweis */
+td.adrlink {min-width: 190px;} /* Link Adresse im Nauwerk */
 
 /* Kopfzeile, SpaltenÃŒberschrift, GW-Zwischenzeile */
@@ -142,10 +145,10 @@
 /* Ãberschriften */
 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 */
+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 */
@@ -156,5 +159,5 @@
 p.stop2 {font-size: 10pt;}
 
-/* Seitenfuss */
+/* SeitenfuÃ */
 .buttonbereich	{font-size: 7pt; text-align: right;}
 .confbereich	{font-size: 7pt; background-color: #F2F2F2; width: 65%; position: relative; left: 50px; border-radius: 12px; padding-right: 26px; margin-top: 20px;}
Index: /trunk/info/info/alkisn/alkisexport.php
===================================================================
--- /trunk/info/info/alkisn/alkisexport.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisexport.php	(revision 427)
@@ -1,5 +1,8 @@
 <?php
-/*	Modul alkisexport.php
-
+/*	alkisexport.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+	
 	CSV-Export von ALKIS-Daten zu einem Flurstueck, Grundbuch, EigentÃŒmer oder StraÃe.
 	Es wird eine GML-ID ÃŒbergeben.
@@ -67,6 +70,5 @@
 }
 
-// HIER START
-
+// START
 $tabtyp='';  $haus=''; // Var. init.
 $cntget = extract($_GET); // Parameter in Variable umwandeln
@@ -101,8 +103,4 @@
 include "alkis_conf_location.php";
 include "alkisfkt.php";
-
-// BerechtigungsprÃŒfung fÃŒr CSV vorÃŒbergehend deaktiviert weil darin HTML-Meldungen ausgegeben werden.
-// ggf. dies per Option verhindern und wieder aktivieren.
-//$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('Abbruch'); }
 
 if ($tabtyp === '') { // Parameter (-kombinationen) prÃŒfen
Index: /trunk/info/info/alkisn/alkisstrasse.php
===================================================================
--- /trunk/info/info/alkisn/alkisstrasse.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisstrasse.php	(revision 427)
@@ -2,5 +2,7 @@
 /*	alkisstrasse.php
 
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
 	Alle FlurstÃŒcke an einer StraÃe anzeigen, egal ob "mit" oder "ohne" Hausnummer
 	Parameter: "gml_id" aus der Tabelle "ax_lagebezeichnungkatalogeintrag"
@@ -12,4 +14,5 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 */
 ini_set("session.cookie_httponly", 1);
@@ -54,7 +57,4 @@
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
 $dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -87,9 +87,9 @@
 }
 if ($row = pg_fetch_assoc($res)) {
-	$lage=$row["lage"]; // Strassenschluessel
-	$snam=$row["snam"]; // Strassenname
+	$lage=$row["lage"]; // Str.schl.
+	$snam=$row["snam"]; // Str.name
 	$gem=$row["gemeinde"];
-	$kennz=$gem."-".$lage." (".$snam.")"; // Schluessel als Sucheingabe in NAV brauchbar?
-	echo "\n<p class='balken strasse'>ALKIS Stra&szlig;e ".$kennz."&nbsp;</p>"; // Balken
+	$kennz=$gem."-".$lage." (".$snam.")"; // SchlÃŒssel als Sucheingabe in NAV brauchbar?
+	echo "\n<p class='balken strasse'>ALKIS Stra&szlig;e ".$kennz."&nbsp;</p>";
 } else {
 	echo "\n<p class='err'>Kein Treffer bei Lagebezeichnungskatalogeintrag.</p>";
@@ -108,23 +108,12 @@
 			."\n\t\t\t<td class='head'>Kreis</td>"
 			."\n\t\t\t<td class='head'>Gemeinde</td>"
-			."\n\t\t<td class='head'>Stra&szlig;e</td>"
+			."\n\t\t\t<td class='head'>Stra&szlig;e</td>"
 		."\n\t\t</tr>"
 		."\n\t\t<tr>";
-			echo "\n\t\t\t<td title='Bundesland'>";
-			if ($showkey) {echo "<span class='key'>".$row["land"]."</span><br>";}
-			echo $row["bnam"]."&nbsp;</td>"
-			."\n\t\t\t<td title='Regierungsbezirk'>";
-			if ($showkey) {echo "<span class='key'>".$row["regierungsbezirk"]."</span><br>";}
-			echo $row["rnam"]."&nbsp;</td>"
-			."\n\t\t\t<td title='Kreis'>";
-			if ($showkey) {echo "<span class='key'>".$row["kreis"]."</span><br>";}
-			echo $row["knam"]."&nbsp;</td>"
-			."\n\t\t\t<td title='Gemeinde'>";
-			if ($showkey) {echo "<span class='key'>".$gem."</span><br>";}
-			echo $row["gnam"]."&nbsp;</td>"
-			. "\n\t\t\t<td title='Stra&szlig;e'>";
-			if ($showkey) {echo "<span class='key'>".$lage."</span><br>";}
-			echo "<span class='wichtig'>".$snam."</span>"
-			. "&nbsp;</td>"
+		echo "\n\t\t\t<td title='Bundesland'>".DsKy($row["land"], 'Bundesland-*').$row["bnam"]."&nbsp;</td>"
+			."\n\t\t\t<td title='Regierungsbezirk'>".DsKy($row["regierungsbezirk"], 'Regierungsbezirk-*').$row["rnam"]."&nbsp;</td>"
+			."\n\t\t\t<td title='Kreis'>".DsKy($row["kreis"], 'Kreis-*').$row["knam"]."&nbsp;</td>"
+			."\n\t\t\t<td title='Gemeinde'>".DsKy($gem, 'Gemeinde-*').$row["gnam"]."&nbsp;</td>"
+			."\n\t\t\t<td title='Stra&szlig;e'>".DsKy($lage, 'Stra&szlig;en-*')."<span class='wichtig'>".$snam."</span>&nbsp;</td>"
 		."\n\t\t</tr>"
 	."\n\t\t</table>";
@@ -135,7 +124,6 @@
 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<a href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$ogml.LnkStf()
+		."' title='Lage Ohne Hausnummer'>Lage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''></a>"
 	."\n\t\t</p>";
 }
@@ -199,6 +187,5 @@
 	$zpaar=!$zpaar;
 	echo "\n<tr class='".$trclass."'>"
-		."\n\t<td>";
-		if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
+		."\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer');
 		if ($gwgmkg != $gmkg) {
 			echo "<b>".$gmkg."</b></td>";
@@ -221,14 +208,12 @@
 		."\n\t<td>\n\t\t<p class='nwlink noprint'>";
 			if ($ltyp === 'm') { // nur Typ "Mit Haus" anzeigen. Dar Typ 'o' ist immer gleich und identisch mit dem Link im Kopf
-				echo "\n\t\t<a href='alkislage.php?gkz=".$gkz."&amp;ltyp=".$ltyp."&amp;gmlid=".$lgml;
-				if ($showkey) {echo "&amp;showkey=j";}
-				echo "' title='Lagebezeichnung mit Hausnummer'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
+				echo "\n\t\t<a href='alkislage.php?gkz=".$gkz."&amp;ltyp=".$ltyp."&amp;gmlid=".$lgml.LnkStf()
+				."' title='Lagebezeichnung mit Hausnummer'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
 				$cnths++;
 			}
 			// Link FlurstÃŒcksnachweis
-			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>"
+			echo "\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"].LnkStf()."&amp;eig=n"
+			."' 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++;
@@ -238,5 +223,5 @@
 	echo "<p class='cnt'>".$j." Flurst&uuml;cke";
 	if ($cnths > 1) {echo " und ".$cnths." Hauptgeb&auml;ude";}
-	echo " mit dieser StraÃe in der Lagebezeichnung</p>";
+	echo " mit dieser Stra&szlig;e in der Lagebezeichnung</p>";
 }
 pg_free_result($resf);
Index: /trunk/info/info/alkisn/alkisfkt.php
===================================================================
--- /trunk/info/info/alkisn/alkisfkt.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisfkt.php	(revision 427)
@@ -1,7 +1,9 @@
 <?php
-/*	Modul: alkisfkt.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	F u n c t i o n s
+/*	alkisfkt.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	F u n c t i o n s , die von mehreren Modulen verwendet werden.
 
 	Version:
@@ -15,7 +17,5 @@
 			   Footer: Umschalter fÃŒr SchlÃŒssel und Debug unabhÃ€ngig benutzbar. Authentifizierung aus QWC2 nicht hier behandeln.
 	2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
-
-++ ToDo:
-	- Parameter $lnkclass in eigentuemer() und $jfenster in buchung_anzg() vereinheitlichen
+	2022-01-13 Functions in Fach-Modul verschoben, wenn nur von einem verwendet. Neue Functions LnkStf(), DsKy()
 */
 
@@ -67,8 +67,8 @@
 
 function footer($gmlid, $link, $append) {
-	// Einen SeitenfuÃ ausgeben.
-	// Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
-	// Den URL-Parameter "&showkey=j/n" umschalten lassen.
-	// $append wird angehÃ€ngt wenn gefÃŒllt. Anwendung: &eig=j bei FSNW, &ltyp=m/p/o bei Lage
+// Einen SeitenfuÃ ausgeben.
+// Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
+// Den URL-Parameter "&showkey=j/n" umschalten lassen.
+// $append wird angehÃ€ngt wenn gefÃŒllt. Anwendung: &eig=j bei FSNW, &ltyp=m/p/o bei Lage
 	global $gkz, $showkey, $hilfeurl, $debug, $dbg, $customer;
 
@@ -78,5 +78,5 @@
 	."\n\t\t<table class='outer'>\n\t\t<tr>";
 
-	// Spalte 1: Info Benutzerkennung
+	// Sp.1: Info Benutzerkennung
 	if (isset($customer) and $customer != '') { // ÃŒber global von fkt. darf_ich()
 		echo "\n\t\t\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
@@ -85,5 +85,7 @@
 	}
 
-	// Spalte 2: Umschalter
+	// Sp.2: Umschalter
+// +++ ToDo: Texte eindeutiger machen, z.B. Anzeige der SchlÃŒssel ist an >> aus // Anzeige der SchlÃŒssel ist aus >> an
+// oder als Formular / Option-Element
 	echo "\n\t\t\t<td title='Konfiguration'>";
 		$mylink ="\n\t\t\t\t<a class='keyswitch' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
@@ -111,5 +113,5 @@
 	echo "\n\t\t\t</td>";
 
-	// Spalte 3: Dokumentation
+	// Sp.3: Dokumentation
 	echo "\n\t\t\t<td title='Hilfe'>"
 		."\n\t\t\t\t<p class='nwlink'>\n\t\t\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t\t\t</p>\n\t\t\t</td>"
@@ -128,5 +130,5 @@
 function UnqKatAmt($t1, $t2){
 // Wenn der Datenbestand aus NBA-Verfahren mehrerer KatasterÃ€mter gemixt wurde, dann muss beim SQL-JOIN auf einige SchlÃŒsseltabellen
-// zusÃ€tzlich dafÃŒr gesort werden, dass nur die SchlÃŒssel des gleichen Katasteramtes verwendet werden. Sont bekommt man redundante Treffer.
+// zusÃ€tzlich dafÃŒr gesort werden, dass nur die SchlÃŒssel des gleichen Katasteramtes verwendet werden. Sonst bekommt man redundante Treffer.
 // BenÃ¶tigt den Alias der zu verbindenden Tabellen.
 // Liefert einen String zum EinfÃŒgen hinter "JOIN .. ON".
@@ -139,6 +141,40 @@
 }
 
+function LnkStf(){
+// Link-Staffeltab - Die Parameter showkey und nodebug im href eines <a>-Tag an ein anderes Modul weiter geben.
+// Gibt einen String zurÃŒck, der im href eingefÃŒgt wird.
+	global $debug, $dbg, $showkey;
+
+	if ($showkey) { // SchlÃŒssel anzeigen
+		$ret="&amp;showkey=j";
+	} else {
+		$ret="";
+	}
+
+	// Nur relevant in einer Entwicklungsumgebung:
+	// Falls debug-Ausgaben erlaubt sind (conf) kann man das temporÃ€r einschrÃ€nken, umgekehrt nicht.
+	// $dbg = aktueller Arbeitswert, $debug = aus Conf.
+	if ($dbg === 0 AND $debug > 0){
+		$ret.="&amp;nodebug=j";
+	}
+	return $ret;
+}
+
+function DsKy($derKey, $Tipp){
+// Display Key - Optional einen ALKIS-internen SchlÃŒsselwert vor dem entschlÃŒsselten Wert ausgeben.
+// Die Option wird gesteuert durch einen Schalter im SeitenfuÃ.
+// Liefert einen HTML-Text zur Verwendung in einem Echo-Befehl. Zur Verkettung mit Literalen.
+	global $showkey;
+	$Tipp = str_replace("*", "Schl&uuml;ssel", $Tipp); // hÃ€ufig verwendet
+	if ($showkey and $derKey != "") {
+		$html="<span class='key' title='".$Tipp."'>(".$derKey.")&nbsp;</span>";
+	} else {
+		$html="";
+	}
+	return $html;
+}
+
 function ber_bs_zaehl($gmls) {
-	// Berechtigte Buchungs-Stellen zaehlen.
+// Berechtigte Buchungs-Stellen zÃ€hlen.
 
 	// Buchungstelle dienend <(Recht)an< Buchungstelle herrschend
@@ -148,5 +184,5 @@
 	$resan = pg_prepare("", $sql);
 	$resan = pg_execute("", $v);
-	if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen zaehlen'.</p>";}
+	if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen z&auml;hlen'.</p>";}
 	$rowan = pg_fetch_assoc($resan);
 	$anz=$rowan["anz"];
@@ -156,11 +192,11 @@
 
 function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs, $trtyp) {
-	// In einem FS-Nachw. EINE Buchungsstelle anzeigen.
-	// Parameter:
-	//  $gmlbs: GML-ID der anzuzeigenden Buchungs-Stelle
-	//  $eig: EigentÃŒmer ausgeben j/n
-	//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
-	//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
-	//	$trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÃ€rben"
+// In einem FS-Nachw. EINE Buchungsstelle anzeigen.
+// Parameter:
+//  $gmlbs: GML-ID der anzuzeigenden Buchungs-Stelle
+//  $eig: EigentÃŒmer ausgeben j/n
+//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
+//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
+//	$trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÃ€rben"
 	global $gkz, $dbg, $showkey, $bartgrp, $barttypgrp, $stufe, $katAmtMix;
 
@@ -190,5 +226,5 @@
 	}
 	if ($rowbs = pg_fetch_assoc($resbs)) { // EIN Treffer
-		$blattkeyber=$rowbs["blattart"]; // Schluessel von Blatt-Art des GB
+		$blattkeyber=$rowbs["blattart"]; // SchlÃŒssel von Blatt-Art des GB
 		if ($blattkeyber != '5000' or $dbg > 1) { // "Fiktives Blatt" nur bei Entwicklung anzeigen
 			$gezeigt = 1; // Funktionswert nach Treffer
@@ -203,5 +239,5 @@
 			$blatt=ltrim($rowbs["blatt"], "0");
 			$lfd=ltrim($rowbs["lfd"], "0");
-			if ($bartkey != $bartgrp) { // Wechsel der Buchungsart
+			if ($bartkey != $bartgrp) { // Wechsel Buchungsart
 				$barttitle=$rowbs["barttitle"]; // Buchungsart ErklÃ€rung
 				switch (true) { // Die Buchungsart einem Typ (Gruppierung) zuweisen
@@ -221,7 +257,6 @@
 						echo "\n\t<tr>\n\t\t<td colspan='3'>\n\t\t\t<h3 id='gb'>".$h3txt."</h3>\n\t\t</td>"; // 1-3
 						echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>" // 4
-							."\n\t\t\t\t<a href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gml_fs;
-							if ($showkey) {echo "&amp;showkey=j";}
-							if ($eig=="j") { // Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
+							."\n\t\t\t\t<a href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gml_fs.LnkStf();
+							if ($eig=="j") { // Umschalter: FS-Nachweis ruft sich selbst mit geÃ€ndertem Param. auf. Pos. auf Marke "#gb"
 								echo "&amp;eig=n#gb' title='Umschalter: Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
 							} else {
@@ -236,13 +271,8 @@
 					$barttypgrp = $barttyp;
 				}
-
-				// ++ mehr Abstand oben zur Zeile in .css?
 				echo "\n\t<tr>" // Buchungsart als Zwischenzeile
-					."\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Buchungsart:</td>" // 1
-					."\n\t\t<td colspan='2' title='".$barttitle."'>"; // 2-3
-						if ($showkey) {echo "<span class='key' title='Buchungsart'>(".$bartkey.")</span> ";}
-						echo "<span class='wichtig'>".$bart."</span>"
-					."</td>"
-					."\n\t\t<td></td>" // 4
+					."\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Buchungsart:</td>"
+					."\n\t\t<td colspan='2' title='".$barttitle."'>".DsKy($bartkey, 'Buchungsart')."<span class='wichtig'>".$bart."</span>"
+					."</td>\n\t\t<td></td>" // 4
 				."\n\t</tr>";
 				$bartgrp=$bartkey; // Gruppe merken
@@ -261,9 +291,7 @@
 					}
 					echo "\n\t\t\t<tr>"
-						."\n\t\t\t\t<td class='head'>Bezirk</td>"
-						."\n\t\t\t\t<td class='head'>";
-						if ($showkey) {echo "<span class='key' title='Blattart'>(".$blattkeyber.")</span> ";}
-						echo $blattartber."</td>"
-						."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
+					."\n\t\t\t\t<td class='head'>Bezirk</td>"
+					."\n\t\t\t\t<td class='head'>".DsKy($blattkeyber, 'Blattart-*').$blattartber."</td>"
+					."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
 					."\n\t\t\t</tr>";
 
@@ -273,9 +301,7 @@
 						echo "\n\t\t\t<tr>";
 					}
-					echo "\n\t\t\t\t<td title='Grundbuchbezirk'>";
-						if ($showkey) {echo "<span class='key' title='GB-Bezirk-Schl&uuml;ssel'>".$rowbs["bezirk"]."</span><br>";}
-						echo $beznam."</td>"
-						."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
-						."\n\t\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
+					echo "\n\t\t\t\t<td title='Grundbuchbezirk'>".DsKy($rowbs["bezirk"], 'GB-Bezirk-*').$beznam."</td>"
+					."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
+					."\n\t\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
 					."\n\t\t\t</tr>"
 					."\n\t\t\t</table>";
@@ -293,48 +319,38 @@
 
 				echo "\n\t\t<td>"; // 4
-					echo "\n\t\t\t<p class='nwlink noprint'>";
+					echo "\n\t\t\t<p class='nwlink noprint'>".DsKy($blattkeyber, 'Blattart-*');
 					//	Bestand
-						if ($showkey) {echo "<span class='key' title='Blattart'>(".$blattkeyber.")</span> ";}
-						$url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
-						if ($showkey) {$url.="&amp;showkey=j";}
+						$url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml.LnkStf();
 						if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";} // Sonderfall "Inlay" aus Feature-Info
 						echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis'>".$blattartber
-							." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
-						."</a>";
+						." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
 					//	Buchung
 						if ($trtyp === 1) {
-							echo "<br>";
-							if ($showkey) {echo "<span class='key' title='Buchungsart'>(".$bartkey.")</span> ";}
-							$url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml;
-							if ($showkey) {$url.="&amp;showkey=j";}
+							echo "<br>".DsKy($bartkey, 'Buchungsart');
+							$url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml.LnkStf();
 							if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";}
 							echo "\n\t\t\t\t<a href='".$url."' title='GrundstÃŒcksnachweis: ".$bart."'>Buchung"
-								." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
-							."</a>";
+							." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>";
 						}
 					echo "\n\t\t\t</p>"
-				."\n\t\t</td>" // 4
+				."\n\t\t</td>"
 			."\n\t</tr>";
 			if ($eig === "j") {
-				if ($jsfenster) {$lnkclass = "imFenster";} else {$lnkclass = "";} 
-				$n = eigentuemer($gbgml, true, $lnkclass); // mit Adresse
+				$n = eigentuemer($gbgml, true, $jsfenster); // mit Adresse
 			}
 		}
 	}
 	pg_free_result($resbs);
-	
-	//if ($dbg > 1) {echo "\n<p class='dbg'>Ende function buchung_anzg(), Return = ". $gezeigt ."</p>";}
-	
 	return $gezeigt; // 1 wenn eine Buchung ausgegeben wurde
 }
 
 function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs, $gsanfrd) {
-	// In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
-	// Parameter: 
-	//  $gmls: GML-ID der dienenden Buchungs-Stelle. Im ersten Durchlauf also, die BS auf der das FS gebucht ist.
-	//  $eig: EigentÃŒmer ausgeben j/n
-	//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
-	//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
-	//	$gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
+// In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
+// Parameter: 
+//  $gmls: GML-ID der dienenden Buchungs-Stelle. Im ersten Durchlauf also, die BS auf der das FS gebucht ist.
+//  $eig: EigentÃŒmer ausgeben j/n
+//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
+//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
+//	$gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
 	global $dbg, $gezeigt;
 
@@ -379,255 +395,49 @@
 
 function kurz_namnr($lang) {
-	// Namensnummer kÃŒrzen. Nicht benÃ¶tigte Stufen der Dezimalklassifikation abschneiden
+// 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"); // fuehr. Nullen
-	$kurz=str_replace(".0",".",$kurz); // fuehr. Null jeder Stufe
+	$kurz=ltrim($kurz, "0"); // fÃŒhrd. Nullen
+	$kurz=str_replace(".0",".",$kurz); // fÃŒhrd. Null jeder Stufe
 	$kurz=rtrim($kurz); // Leerzeichen hinten
-	// echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
 	return $kurz;
 }
 
-function bnw_bszeile_h() {
-/*	Bestandsnachweis - Buchungs-Stellen-Zeile ausgeben - herrschend.
-	Die GB-Daten hierzu stehen bereits im Kopf und bleiben in der Tab. leer */
-	global $dbg, $gkz, $showkey, $trclass, $lfdnr, $bartkey, $bart, $bartstory, $anteil;
-
-	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
-	echo "\n<tr class='".$trclass."'>"
-	."\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span></td>" // Sprungmarke=BVNR auf dem GB-Blatt
-	."\n\t<td class='dien' title='".$bartstory."'>";
-	if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
-	echo $bart."</td>"
-	."\n\t<td class='dien'>".$anteil."</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>";
-}
-
-function bnw_bszeile_d($bezkey, $beznam, $blatt, $blattartkey, $blattart, $lfdnran, $gbgml, $gml_bsan, $ebene, $und) {
-/*	Bestandsnachweis - Buchungsstellen-Zeile ausgeben - dienend
-	Eine Folge-Zeile fÃŒr eine dienende Buchung ausgeben. */
-	global $gkz, $showkey, $trclass, $bartkey, $bart, $bartstory, $anteil;
-
-	$bvnr=str_pad($lfdnran, 4, "0", STR_PAD_LEFT);
-	$filler=str_repeat("&nbsp;", $ebene - 2); // 3 und 4 EinrÃŒcken
-	if ($und){$filler.="und ";}; // Unterscheidung Hierarchie (Ebene wechselt) von Liste (gleiche Ebene)
-	echo "\n<tr class='".$trclass."'>"
-	."\n\t<td title='Ebene ".$ebene."'>".$filler."an</td>"
-	."\n\t<td class='dien' title='".$bartstory."'>"; // Sp.2 Buchungsart
-	if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
-	echo $bart."</td>"
-	."\n\t<td class='dien'>".$anteil."</td>"; // Sp.3 Anteil
-
-	// Sp.4 GB-Bezirk
-	echo "\n\t<td class='dien' title='Grundbuch-Bezirk'>"; 
-		if ($showkey) {echo "<span class='key'>".$bezkey."</span> ";}
-		echo htmlentities($beznam, ENT_QUOTES, "UTF-8")
-	."</td>"
-	."\n\t<td class='dien' title='".$blattart."'>".$blatt."</td>" // Sp.5
-	."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".$bvnr."</td>" // Sp.6
-	."\n\t<td class='dien'></td>"; 
-
-	echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"; // Sp.8 Link
-
-	// Link Bestand Blatt
-	if ($showkey) {echo "<span class='key'>".$blattartkey."</span>";} // Blatt-Art
-	echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
-		if ($showkey) {echo "&amp;showkey=j";}
-		echo "#bvnr".$lfdnran."' title='Zum Grundbuchnachweis des dienenden Blattes'>".$blattart
-	." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
-
-	if ($bartkey < 2000){
-		// Link Buchung BVNR nur fÃŒr GrundstÃŒck usw.
-		echo "<br>\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bsan;
-		if ($showkey) {echo "&amp;showkey=j";}
-		echo "' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>";	
-	}
-
-	echo "\n\t\t</p>"
-	."\n\t</td>\n</tr>";
-}
-
-function bnw_bsdaten($gml_h, $ebene) {
-/*	Bestandsnachweis - Buchungsstellen-Daten
-	"dienende" Buchungsstellen suchen. Miteigentumsanteil, Erbbaurecht usw. 
-	Return: gml_id der dienenden Buchungsstelle wenn gefunden? Sonst Leerstring */
-	global $dbg, $bartkey, $bart, $bartstory, $anteil;
-
-//	dann "dienende" Buchungsstellen
-//  sh=herrschend          sd=dienend
-//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes) 
-//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
-//	- "zu" kommt in der Praxis (NRW) nicht vor, wird hier nicht berÃŒcksichtigt
-
-	if ($ebene > 5) {echo "\n<p class='err'>UngewÃ¶hnlich tiefe Schachtelung ".$ebene." der Buchungs-Stellen.</p>";}
-
-	$sql ="SELECT sd.gml_id, sd.buchungsart, sd.zaehler, sd.nenner, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, "
-	."sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, "
-	."wb.beschreibung AS bart, wb.dokumentation, "
-	."b.gml_id as gbgml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, "
-	."bb.beschreibung AS blattartv, z.bezeichnung AS beznam "
-	."FROM ax_buchungsstelle sh "
-	."JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
-	."JOIN ax_buchungsblatt b ON b.gml_id=sd.istbestandteilvon "	
-	."LEFT JOIN ax_buchungsart_buchungsstelle wb ON sd.buchungsart = wb.wert "
-	."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk ".UnqKatAmt("b","z")
-	."LEFT JOIN ax_blattart_buchungsblatt bb ON b.blattart = bb.wert "
-	."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL "
-	."ORDER BY sd.laufendenummer;";
-	$v=array($gml_h); // gml_id "herrschende" B-Stelle
-	$resan=pg_prepare("", $sql);
-	$resan=pg_execute("", $v);
-	if (!$resan) {
-		echo "\n<p class='err'>Fehler bei 'dienende Buchungsstelle'.</p>";
-		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
-	}
-	$zeianz=pg_num_rows($resan); // Zeilen-Anzahl = Returnwert
-	//if ($dbg > 0) {echo "\n<p class='dbg'>Auf Ebene ".$ebene.": Anzahl diennende Buchungs-Stellen = ".$zeianz.".</p>";}
-	$und = false; // mehrfaches "Recht an" auf gleicher Ebene
-	while($row= pg_fetch_assoc($resan)) {
-		$gml_bsan=$row["gml_id"];	// id der dien. BS
-		$blatt=ltrim($row["blatt"], "0");		
-
-		// als Global-Var zur Sub-Function:
-		$bartkey=$row["buchungsart"];	
-		$bart=$row["bart"]; // Buchungsart, entschlÃŒsselt
-		$bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8");
-		if ($row["zaehler"] == "") {$anteil = "";} 
-		else {$anteil = $row["zaehler"]."/".$row["nenner"];}
-
-		// Zeile ausgeben Buchungsstelle dienend 
-		bnw_bszeile_d($row["bezirk"], $row["beznam"], $blatt, $row["blattart"], $row["blattartv"], $row["lfd"], $row["gbgml"], $gml_bsan, $ebene, $und);
-		$und = true;
-		if ($row["nrap"] != "") { // Nr im Auft.Plan
-			echo "\n<tr>\n\t<td colspan=3></td><td class='nrap' colspan=4>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td><td></td>\n</tr>";
-		}
-		if ($row["sond"] != "") { // Sondereigentumsbeschreibung
-			echo "\n<tr>\n\t<td></td><td class='sond' colspan=6 title='Sondereigentums-Beschreibung'>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td><td></td>\n</tr>";
-		}
-
-		// Rekursiver Aufruf der gleichen Function, weitere Ebene dienend?
-		$tiefer = bnw_bsdaten($gml_bsan, ($ebene + 1));
-		If ($tiefer == 0) {  // Wenn nicht, dann kann es FlurstÃŒcke dazu geben
-			$fscnt= bnw_fsdaten($gml_bsan, false); // FlurstÃŒcksdaten
-		}
-	}
-	pg_free_result($resan);
-	return $zeianz;
-}
-
-function bnw_fsdaten($gml_bs, $mit_buchung_link) {
-/*	Bestandsnachweis - FlurstÃŒcksdaten
-	Die Tabellenzeilen mit den FlurstÃŒcksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
-	Die Funktion wird entweder aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall)
-	oder bei Erbbaurecht fÃŒr die mit "an" verknÃŒpften Buchungsstellen der untersten Ebene (dienende Buchung).
-	Der Tabellenkopf wird im aufrufenden Programm ausgegeben. 
-	Return: Anzahl der ausgegebenen FlurstÃŒcke */
-	global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil;
-
-	$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 ".UnqKatAmt("f","g")
-	."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
-	if ($filtgem === '') { // ungefiltert
-		$v=array($gml_bs);
-	} else {
-		$sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÃ€ndiges Gebiet
-		$v=array($gml_bs, $filtkreis, $filtgem);
-	}
-	$sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
-	$resf = pg_prepare("", $sql);
-	$resf = pg_execute("", $v);
-	if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
-	$zeianz=pg_num_rows($resf);
-	while($rowf = pg_fetch_assoc($resf)) {
-		$fskenn=$rowf["zaehler"];
-		if ($rowf["nenner"] != "") { // Bruch
-			$fskenn.="/".$rowf["nenner"];
-		}
-		$flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
-
-		echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
-		
-		// Sp. 1-3 der Tab. Daten aus Buchungsstelle, nicht aus FS
-		if($lfdnr === $altlfdnr) { // gleiches GrundstÃŒck, leer lassen
-			echo "\n\t<td>&nbsp;</td>"
-			."\n\t<td>&nbsp;</td>"
-			."\n\t<td>&nbsp;</td>";
-		} else { // Sprungmarke, BVNR
-			$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
-			echo "\n\t<td id='bvnr".$bvnr."'>"; // Sprungmarke
-				echo "<span class='wichtig'>".$bvnr."</span>"
-			."\n\t</td>";
-			echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart 
-				if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";}
-				echo $bart;
-			echo "</td>"
-			."\n\t<td>&nbsp;</td>"; // Anteil
-			$altlfdnr=$lfdnr;
-		}
-
-		// Sp. 4-7 aus FlurstÃŒck
-		echo "\n\t<td>";
-		if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
-		echo $rowf["bezeichnung"]."</td>"
-		."\n\t<td>".$rowf["flurnummer"]."</td>\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>"
-		."\n\t<td class='fla'>".$flae."</td>";
-		echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
-
-		// Buchung BVNR
-		If ($mit_buchung_link == true) { // nur bei GrundstÃŒck
-			echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs;
-			if ($showkey) {echo "&amp;showkey=j";}
-			echo "' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>&nbsp;";			
-			$mit_buchung_link = false; // nur in erster Zeile
-		}
-		// Flurstk.
-		echo "\n\t\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>";
-	}
-	pg_free_result($resf);
-	return $zeianz;
-}
-
-function eigentuemer($gmlid, $mitadresse, $lnkclass) {
-	// Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
-	//  Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=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
+function eigentuemer($gmlid, $mitadresse, $jsfenster) {
+/*	Tabelle mit EigentÃŒmerdaten zu einem Grundbuchblatt ausgeben
+	Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=Link
+  Parameter:
+	$gmlid: ID GB-Blatt
+	$mitadresse: Option (t/f) ob die Adresszeile ausgegeben werden soll
+	$jsfenster: Beim Link mit Javascript ein neues Fenster Ã¶ffnen
+  Return = Anzahl Namensnummern */
 	global $dbg, $gkz, $showkey;
-
-	if ($lnkclass == "") {
+	if ($jsfenster) { // beim Link aus iFrame ausbrechen
+		$lnkvor  = "javascript:imFenster(\"";
+		$lnknach = "\")";		
+	} else { 	
 		$lnkvor = "";
 		$lnknach = "";
-	} else { // Link ÃŒber Java-Class "imFenster" aus alkisinlayausk.php
-		$lnkvor  = "javascript:".$lnkclass."(\"";
-		$lnknach = "\")";
-	}
-
-	$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, n.benennt, wn.beschreibung AS adrv, we.beschreibung AS eiartv "
+	}
+
+	// N a m e n s n u m m e r
+	// ax_namensnummer >istBestandteilVon> ax_buchungsblatt
+	$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, n.benennt, "
+	."wn.beschreibung AS adrv, we.beschreibung AS eiartv, "
+	."p.gml_id AS gmlpers, p.nachnameoderfirma, p.vorname, p.geburtsname, to_char(cast(p.geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, p.namensbestandteil, p.akademischergrad "
 	."FROM ax_namensnummer n "
 	."LEFT JOIN ax_artderrechtsgemeinschaft_namensnummer wn ON n.artderrechtsgemeinschaft = wn.wert "
-	."LEFT JOIN ax_eigentuemerart_namensnummer we ON n.eigentuemerart = we.wert "
-	."WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
-	// VerknÃŒpfungsfeld "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
+	."LEFT JOIN ax_eigentuemerart_namensnummer we ON n.eigentuemerart = we.wert "	
+	."LEFT JOIN ax_person p ON p.gml_id = n.benennt "
+	."WHERE n.istbestandteilvon = $1 AND n.endet IS NULL AND p.endet IS NULL "
+	."ORDER BY n.laufendenummernachdin1421;";
+	// "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
 
 	$v = array($gmlid); // GB-Blatt
 	$resn = pg_prepare("", $sqln);
 	$resn = pg_execute("", $v);
-
 	if (!$resn) {
-		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>"; // kein Fehler bei Blattarten > 1000
-		//if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sqln )."</p>";}
+		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sqln )."</p>";}
 	}
 
@@ -637,132 +447,110 @@
 		$namnum=kurz_namnr($rown["lfd"]);
 		$rechtsg=$rown["adr"];
+		$beschr=htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8");
+		$adrv=htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8");
 		$eiartkey=$rown["eigentuemerart"]; // Key
 		$eiart=$rown["eiartv"]; // Value
-	//	if ($dbg > 1) {echo "\n<p class='dbg'>Eigent&uuml:merart = '".$eiartkey."' = '".$eiart."'</p>";}
+		$anlass=$rown["anlass"]; // ???
+		$gmlpers=$rown["gmlpers"]; // leer bei RechtsverhÃ€ltnis
+		$akadem=$rown["akademischergrad"];
+		$nachnam=$rown["nachnameoderfirma"];
+		$vorname=$rown["vorname"];
+		$nbest=$rown["namensbestandteil"];
+		$gebdat=$rown["geburtsdatum"];
+		$gebnam=$rown["geburtsname"];
+		$zaehler=str_replace(".", ",", $rown["zaehler"]); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
+		$nenner=str_replace(".", ",", $rown["nenner"]);
 
 		echo "\n\t<tr>";
-			if($n === 0) { // erste EigentÃŒmer-Zeile zu einer Buchung
-				echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
-			} else { // Folgezeile
-				echo "\n\t\t<td class='ll'>&nbsp;</td>"; // 1
-			}
-
-			if ($rechtsg != "" ) { // Erbengemeinschaft usw.
-				echo "\n\t\t<td colspan='2'>"; // 2-3
-				if ($rechtsg == 9999) { // sonstiges
-					echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
-				} else {
-					echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
+		if($n === 0) { // 1. Zeile zum GB
+			echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
+		} else { // Folgezeile
+			echo "\n\t\t<td class='ll'>&nbsp;</td>";
+		}
+		if ($rechtsg != "" ) { // Erbengemeinschaft usw.
+			echo "\n\t\t<td colspan='2'>";
+			if ($rechtsg == 9999) { // sonstiges
+				echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".$beschr."</p>";
+			} else {
+				echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".$adrv."</p>";
+			}
+		} else { // Namensnummer
+			echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>"
+			. "\n\t\t<td>";
+		}
+		if ($anlass > 0 ) {echo "<p>Anlass=".$anlass."</p>";}
+		// Andere Namensnummern? Relation: 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.
+
+		$diePerson="";
+		if ($akadem != "") {$diePerson=$akadem." ";}
+		$diePerson.=$nachnam;
+		if ($vorname != "") {$diePerson.=", ".$vorname;}
+		if ($nbest != "") {$diePerson.=". ".$nbest;}
+		if ($gebdat != "") {$diePerson.=", geb. ".$gebdat;}
+		if ($gebnam != "") {$diePerson.=", geb. ".$gebnam;}
+		$diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8");
+
+		if ($eiartkey == "") {$eiart="Eigent&uuml;mer" ;} // Default
+		echo "\n\t\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t\t</td>"
+		."\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>".DsKy($eiartkey, 'Eigent&uuml;merart-*')
+		."\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers.LnkStf()
+		.$lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
+		." \n\t\t\t\t\t<img src='ico/Eigentuemer.png' width='16' height='16' alt=''>\n\t\t\t\t</a>\n\t\t\t</p>"
+		."\n\t\t</td>\n\t</tr>";
+
+		if ($mitadresse) { // optional
+			// A d r e s s e  zur Person
+			$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 "
+			."ORDER BY a.beginnt DESC LIMIT 2;";
+			$v = array($gmlpers);
+			$resa = pg_prepare("", $sqla);
+			$resa = pg_execute("", $v);
+			if (!$resa) {
+				echo "\n\t<p class='err'>Fehler bei Adressen</p>";
+				if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqla)."</p>";}
+			}
+			$j=0;
+			while($rowa = pg_fetch_assoc($resa)) {
+				$j++;
+				if ($j === 1) { // erste ("jÃŒngste") 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\t<tr>\n\t\t<td class='ll'>&nbsp;</td>\n\t\t<td>&nbsp;</td>"
+					."\n\t\t<td><p class='gadr'>";
+					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\t<td>&nbsp;</td>\n\t</tr>";
+				} else { // manchmal mehrere Angaben
+					echo "\n\t<tr>\n\t\t<td class='ll'>&nbsp;</td>\n\t\t<td>&nbsp;</td>"
+					."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>"
+					."\n\t\t<td>&nbsp;</td>\n\t</tr>";
 				}
-			} else { // Namensnummer
-				echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>" // 2
-				. "\n\t\t<td>"; // 3
-
-			}
-			//if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";}
-
-			// Andere Namensnummern?  Relation:  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 nachnameoderfirma, vorname, geburtsname, to_char(cast(geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, namensbestandteil, akademischergrad "
-		."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
-		$gmlpers=$rown["benennt"]; // leer bei RechtsverhÃ€ltnis
-		$v = array($gmlpers); // gml_id von ax_person
-		$resp = pg_prepare("", $sqlp);
-		$resp = pg_execute("", $v);
-		if (!$resp) {
-			echo "\n\t<p class='err'>Fehler bei Person</p>";
-			if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqlp)."</p>";}
-		}
-
-		$i=0; // cnt Person
-		while($rowp = pg_fetch_assoc($resp)) { // Schleife weglassen: "benennt" 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
-
-			echo "\n\t\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t\t</td>"; // 3 - Person in Sp.3 hinter NamNum (Sp.2)
-			echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>"; // 4
-				if ($showkey AND $eiartkey != '') {echo "<span class='key' title='Eigent&uuml;merart'>(".$eiartkey.")</span> ";}
-				echo "\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers;
-				if ($showkey) {echo "&amp;showkey=j";}
-				if ($eiartkey == "") {$eiart="Eigent&uuml;mer" ;} // Default. Ersatz-Text, wenn nicht gefÃŒllt
-				echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
-				." \n\t\t\t\t\t<img src='ico/Eigentuemer.png' width='16' height='16' alt=''>\n\t\t\t\t</a>\n\t\t\t</p>"
-			."\n\t\t</td>" // 4
-			."\n\t</tr>";
-
-			if ($mitadresse) {
-				// Schleife 3: optional  A d r e s s e  zur Person
-				$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 ORDER BY a.beginnt DESC LIMIT 2;";
-				$v = array($gmlpers);
-				$resa = pg_prepare("", $sqla);
-				$resa = pg_execute("", $v);
-				if (!$resa) {
-					echo "\n\t<p class='err'>Fehler bei Adressen</p>";
-					if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqla)."</p>";}
-				}
-				$j=0;
-				while($rowa = pg_fetch_assoc($resa)) {
-					$j++;
-					if ($j === 1) { // erste ("jÃŒngste") 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\t<tr>"
-							."\n\t\t<td class='ll'>&nbsp;</td>" // 1
-							."\n\t\t<td>&nbsp;</td>" // 2
-							."\n\t\t<td><p class='gadr'>"; // 3
-							if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
-							if ($plz.$ort != "") {echo $plz." ".$ort;}
-							if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
-						echo "</p></td>" // 3
-							."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
-					} else { // manchmal doppelte Angaben
-						echo "\n\t<tr>"
-							."\n\t\t<td class='ll'>&nbsp;</td>" // 1
-							."\n\t\t<td>&nbsp;</td>" // 2
-							."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>" // 3
-							."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
-					}
-				} // Ende Loop Adresse zur Person
-				pg_free_result($resa);
-			}
-			// 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
-			$i++; // cnt Person
-
-			$zaehler=$rown["zaehler"];
-			if ($zaehler != "") { // Anteil als eigene Tab-Zeile
-				$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\t<tr>"
-				."\n\t\t<td class='ll'>&nbsp;</td>" // 1
-				."\n\t\t<td>&nbsp;</td>" // 2
-				."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>" // 3
-				."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
-			}
-		} // End Loop Person
-		pg_free_result($resp);
-
-		if ($i === 0) { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
+			}
+			pg_free_result($resa);
+		}	// 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
+
+		if ($zaehler != "") { // Anteil als eigene Tab-Zeile
+			$comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
+			echo "\n\t<tr>\n\t\t<td class='ll'>&nbsp;</td>\n\t\t<td>&nbsp;</td>"
+			."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>"
+			."\n\t\t<td>&nbsp;</td>\n\t</tr>";
+		}
+		if ($gmlpers == "") { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
 			if ($dbg > 1) {echo "\n\t\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";}
 			if ($rechtsg !== '9999') {
@@ -771,70 +559,43 @@
 			echo "</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
 		}
-		$n++; // cnt NamNum
-	} // End Loop NamNum
-
+		$n++;
+	}
 	pg_free_result($resn);
 	return $n; 
 }
 
-function werteliste ($bez ,$sqlin) {
-	// Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
-	// Dient dazu, SchlÃŒssel-ARRAYs auflÃ¶sen ohne die Zeile im JOIN mehrfach aufzulisten
-	// Anwendung: FS-Nachweis BodenschÃ€tzung
-	global $dbg;
-
-	if ($bez === 'e') {$tabelle = 'ax_entstehungsartoderklimastufewasserverhaeltnisse_bodensc';} 
-	elseif ($bez === 's') {$tabelle = 'ax_sonstigeangaben_bodenschaetzung';}
-
-	$sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
-	$v = array('9');
-	$res = pg_prepare("", $sql);
-	$res = pg_execute("", $v);
-	if (!$res) {
-		echo "\n<p class='err'>Fehler bei Werteliste.</p>";
-		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
-		return;
-	}
-	$i=0;
-	while($row = pg_fetch_assoc($res)) {
-		echo " ".$row["beschreibung"];
-		$i++;	
-	}
-	pg_free_result($res);
-	if ($i === 0) {
-		echo "(kein Treffer)";
-		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
-	}
-	return;
-}
-
 function fortfuehrungen($entsteh, $dbzeart, $dbzename) {
 // Tabelle im Kopf von FlurstÃŒck und FS-Historie. 2 Z./Sp. Entstehung/FortfÃŒhrung
-// Parameter: Die DB-Spalten "zeitpunktderentstehung", "zeigtaufexternes_art" und "zeigtaufexternes_name"
+// Parameter: Die DB-Spalten "zeitpunktderentstehung"[], "zeigtaufexternes_art"[] und "zeigtaufexternes_name"[]
 	global $dbg, $showkey;
 
-//	if ($dbg > 2) {echo "<p class='dbg'>function fortfuehrungen<br>1: ".$dbzeart."<br>2: ".$dbzename."</p>";}
- 
 	echo "\n\t<table class='fsd'>" // FS-Daten 2 Spalten
-		."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
-		."\n\t\t\t<td title='Zeitpunkt der Enstehung'>".$entsteh."</td>\n\t\t</tr>";
-	echo "\n\t<tr>"
-		."\n\t\t\t<td>";
+	."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
+	."\n\t\t\t<td title='Zeitpunkt der Enstehung'>".$entsteh."</td>\n\t\t</tr>";
+	echo "\n\t<tr>\n\t\t\t<td>";
 	$arrart=explode(",", trim($dbzeart, "{}"));
-	foreach($arrart AS $artval) { // Zeile fÃŒr jedes Element
+	foreach($arrart AS $artval) { // Eine Zeile fÃŒr jedes Element von "zeigtaufexternes_art"
 		$artval=trim($artval, '"');
-// ibR: {"Entstehung des FlurstÃŒcks/5200","Letzte FortfÃŒhrung des FlurstÃŒcks/5300",urn:adv:fachdatenverbindung:AA_Antrag}
-// AED: {http://geoportal.kreis-herford.de/alkis/alkis.html#5200,http://geoportal.kreis-herford.de/alkis/alkis.html#5300,urn:adv:fachdatenverbindung:AA_Antrag}
-
 		$artpos=strpos($artval, '#');
 		if ($artpos > 0) { // AED
 			$artkey=substr($artval, $artpos + 1);
 			switch ($artkey) { // keine SchlÃŒsseltabelle?
-				case '5100': $arttxt="Grundst&uuml;ckshinweis (aus ALB-Historie)"; break;
-				case '5200': $arttxt="Entstehung des Flurst&uuml;cks"; break;
-				case '5300': $arttxt="Letzte Fortf&uuml;hrung des Flurst&uuml;cks"; break;
-				default: $arttxt=$artval;
-			}
-			if ($showkey) {echo "<span class='key'><a target='_blank' href='".$artval."'>".$artkey."</a></span> ";}
+				case '5100':
+					$arttxt="Grundst&uuml;ckshinweis (aus ALB-Historie)";
+					$artinfo="";
+					break;
+				case '5200':
+					$arttxt="Entstehung des Flurst&uuml;cks";
+					$artinfo="'Entstehung des FlurstÃŒcks' enthÃ€lt das Jahr der Entstehung, die lfd. Nr. der FortfÃŒhrung und den SchlÃŒssel der FortfÃŒhrungsart zur manuellen Recherche in den Grundbuchakten.";
+					break;
+				case '5300':
+					$arttxt="Letzte Fortf&uuml;hrung des Flurst&uuml;cks";
+					$artinfo="'Letzte FortfÃŒhrung' enthÃ€lt das Jahr der letzten FortfÃŒhrung, die lfd. Nr. der FortfÃŒhrung und den SchlÃŒssel der FortfÃŒhrungsart zur manuellen Recherche in den Grundbuchakten.";
+					break;
+				default:
+					$arttxt=$artval;
+					$artinfo="";
+			}
+			if ($showkey) {echo "<span class='key'><a target='_blank' title='".htmlentities($artinfo, ENT_QUOTES, "UTF-8")."' href='".$artval."'>(".$artkey.")</a></span> ";}
 			echo $arttxt."<br>";
 		} else {
@@ -843,23 +604,17 @@
 				$artkey=substr($artval, $artpos + 1);
 				$arttxt=substr($artval, 0, $artpos);
-				if ($showkey) {echo "<span class='key'>".$artkey."</span> ";}
-				echo $arttxt."<br>";
-			}
-		}
-	}
-	echo "</td>"
-	."\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
-	$arrname=explode(",", trim($dbzename, "{}"));
-	foreach($arrname AS $val) {
-		echo trim($val, '"')."<br>";
-	}
-	echo "</td>"
-	."\n\t\t</tr>"
-	."\n\t</table>";
-}
-
-function fskenn_dbformat ($fskennz) {
-	// Erzeugt, wenn notwendig, aus dem Bindetrich-getrennten FlurstÃŒckskennzeichen "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz" 
-	// das ALKIS-DB-interne Format des FlurstÃŒckskennzeichens.
+				echo DsKy($artkey, 'Fortf&uuml;hrungsart').$arttxt."<br>";
+			}
+		}
+	}
+	echo "</td>\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
+	$arrname=explode(",", trim($dbzename, "{}")); // Eine Zeile fÃŒr jedes Element von "zeigtaufexternes_name"
+	foreach($arrname AS $val) {echo trim($val, '"')."<br>";}
+	echo "</td>\n\t\t</tr>\n\t</table>";
+}
+
+function fskenn_dbformat($fskennz) {
+// Erzeugt aus dem Bindetrich-getrennten FlurstÃŒckskennzeichen "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz" 
+// das ALKIS-DB-interne Format des FlurstÃŒckskennzeichens.
 	global $defland;
 	$arr=explode("-", $fskennz, 4); // zerlegen
@@ -875,5 +630,5 @@
 		}
 		$zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
-		$zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
+		$zfsnr=trim($arr[2]); // FlurstÃŒcks-Nr
 		$zn=explode("/", $zfsnr, 2); // Bruch?
 		$zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
@@ -894,4 +649,3 @@
 	return $fskzdb;
 }
-
 ?>
Index: /trunk/info/info/alkisn/alkisinlaybaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 427)
@@ -1,5 +1,9 @@
 <?php
-/*	alkisinlaybaurecht.php - Inlay fuer Template: Baurecht
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+/*	alkisinlaybaurecht.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	Inlay fÃŒr Template: Baurecht
 	Ãhnlich alkisbaurecht, aber nur Basisdaten, kein Footer und keine FlurstÃŒcks-Verschneidung.
 
@@ -51,5 +55,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
+$dbg=$debug;
 
 // Body des Inlay muss in Mapbender-Feature-Info-PopUp passen. Kleiner als 750 aus css.
Index: /trunk/info/info/alkisn/alkisbaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisbaurecht.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisbaurecht.php	(revision 427)
@@ -1,5 +1,7 @@
 <?php
 /*	alkisbaurecht.php - Baurecht
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
 
 	Version:
@@ -10,4 +12,5 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Limit in Variable. Neue Functions LnkStf(), DsKy()
 */
 ini_set("session.cookie_httponly", 1);
@@ -48,10 +51,6 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) {die('<p class="stop1">Abbruch</p></body>');}
-
-$dbg=$debug; // CONF in Arbeits-Variable
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
-
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbaurecht.php'");
 if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
@@ -89,11 +88,10 @@
 	$behd=$row["dokumentation"];
 
-	echo "<p class='balken recht'>ALKIS Bau-, Raum- oder Bodenordnungsrecht ".$artfest."-".$verfnr."&nbsp;</p>"; // Balken
+	echo "<p class='balken recht'>ALKIS Bau-, Raum- oder Bodenordnungsrecht ".$artfest."-".$verfnr."&nbsp;</p>";
 	echo "\n<h2><img src='ico/Gericht.png' width='16' height='16' alt=''> Bau-, Raum- oder Bodenordnungsrecht</h2>";
 	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\t<td class='li'>Art der Festlegung:</td>"
+			."\n\t<td>".DsKy($artfest, '* Art der Festlegung')."<span class='wichtig'>".$row["adfbez"]."</span></td>"
 		."\n</tr>";
 		if ($enam != "") {
@@ -109,18 +107,12 @@
 			."\n</tr>";
 		}
-		if ($stellb != "") { // z.B. Umlegung *mit* und Baulast *ohne* Dienststelle, darum bezirk testen
+		if ($stellb != "") { // z.B. Umlegung *mit* und Baulast *ohne* Dienststelle
 			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\t<td class='li'>Dienststelle:</td>\n\t<td>".DsKy($row["stelle"], 'Dienststelle-*').$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>&nbsp;";}
-						echo "<span title='".$behd."'>".$behb."</span>";
-					echo "</td>"
+				."\n\t<td class='li'>Art der Dienststelle:</td>"
+				."\n\t<td>".DsKy($stella, '* Art der Dienststelle')."<span title='".$behd."'>".$behb."</span>"."</td>"
 				."\n</tr>";
 			}
@@ -139,4 +131,5 @@
 ."\n<p>Ermittelt durch geometrische Verschneidung. Nach Gr&ouml;&szlig;e absteigend.</p>";
 
+$fslimit=200;
 $sql ="SELECT f.gml_id, g.bezeichnung, f.gemarkungsnummer, 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  
@@ -151,5 +144,5 @@
 	$v=array($gmlid, $filtkreis, $filtgem);
 }
-$sql.="ORDER BY schnittflae DESC LIMIT 100;"; 
+$sql.="ORDER BY schnittflae DESC LIMIT ".$fslimit.";"; 
 // > 0.0 ist gemeint, Ungenauigkeit durch st_simplify
 // Limit: Flurbereinig. kann groÃ werden!
@@ -180,15 +173,13 @@
 		$nen=$row["nenner"];
 		echo "\n<tr>"
-			."\n\t<td>";
-			if ($showkey) {echo "<span class='key'>(".$gmkgnr.")</span> ";}
-			echo $gemarkung."</td>"
+			."\n\t<td>".DsKy($gmkgnr, 'Gemarkungsnummer').$gemarkung."</td>"
 			."\n\t<td>".$row["flurnummer"]."</td>"
 			."\n\t<td><span class='wichtig'>".$row["zaehler"];
-				if ($nen != "") {echo "/".$nen;}
+			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' "
+				."\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$row["gml_id"].LnkStf()."&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=''>"
@@ -206,6 +197,6 @@
 	//	if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = ".$gmlid." $2 = ".$filtkreis." $3 = ".$filtgem."</p>";}
 	}
-} elseif ($fscnt === 100) {
-	echo "<p>... und weitere Flurst&uuml;cke (Limit 100 erreicht).</p>";
+} elseif ($fscnt >= $fslimit) {
+	echo "<p>... und weitere Flurst&uuml;cke (Limit ".$fslimit." erreicht).</p>";
 }
 
Index: /trunk/info/info/alkisn/alkisbauwerk.php
===================================================================
--- /trunk/info/info/alkisn/alkisbauwerk.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisbauwerk.php	(revision 427)
@@ -1,35 +1,39 @@
 <?php
-/*	alkisbauwerk.php - Bauwerksdaten
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-
-	1 Bauwerk im Verkehrsbereich
-	2 Bauwerk im GewÃ€sserbereich
-	3 Sonstiges Bauwerk oder sonstige Einrichtung 51009
-	4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe 51002
-	5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung 51006
-	6 Leitung 51005
-	7 Transportanlage 51004
-	8 Turm 51001
-	9 VorratsbehÃ€lter, Speicherbauwerk 51003
+/*	alkisbauwerk.php
+
+	ALKIS-Buchauskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+ 
+	Bauwerksdaten
+
+	Typen von Bauwerken (jeweils eigene Tabellen mit unterschiedlicher Struktur):
+	 1 Bauwerk im Verkehrsbereich
+	 2 Bauwerk im GewÃ€sserbereich
+	 3 Sonstiges Bauwerk oder sonstige Einrichtung 51009
+	 4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe 51002
+	 5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung 51006
+	 6 Leitung 51005
+	 7 Transportanlage 51004
+	 8 Turm 51001
+	 9 VorratsbehÃ€lter, Speicherbauwerk 51003
+	10 Historisches Bauwerk oder historische Einrichtung 51007
+	11 Heilquelle, Gasquelle 51008 
+	12 Einrichtung in Ã¶ffentlichen Bereichen 51010
+	(13 Besonderer Bauwerkspunkt 51011) fehlt noch
 
 	Version:
 	2021-03-11 Neues Modul
-	2021-03-17 Korrekturen
-	2021-12-09 2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Debugging verbessert.
+	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Debugging verbessert.
+	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-02-23 Neue Bauwerks-Typen 10-12
 
 ToDo:
-	- Icon fÃŒr "Bauwerk" machen! ggf. einzeln fÃŒr jede der 9 Arten?
-	- 4 weitere Objektarten, bisher nicht verwendet:
-	51007 'Historisches Bauwerk oder historische Einrichtung'
-	51008 'Heilquelle, Gasquelle'
-	51010 'Einrichtung in Ã¶ffentlichen Bereichen'
-	51011 'Besonderer Bauwerkspunkt'
+	- Vom Bauwerk ÃŒberlagerte FlurstÃŒcke ÃŒber geom. Verschneidung ermitteln und verlinken.
+	- Icon fÃŒr "Bauwerk" machen! Ggf. einzeln fÃŒr jede Art?
 */
 
-// Bauwerk (bw) gehÃ¶rt zu (gz) Lage
-// Ein Bauwerk "gehÃ¶rt zu" (Relation) einem GebÃ€ude. Zu diesem GebÃ€ude die Adresse(n) als Tabellen-Zeile ausgeben
+// Ein Bauwerk (bw_) "gehÃ¶rt zu" (_gz_) (Relation) einem GebÃ€ude. Zu diesem GebÃ€ude die Lage-Zeilen als Tabellen ausgeben
 function bw_gz_lage($gmlgz) {
-	global $gkz, $dbg, $showkey;
-	
+	global $gkz, $dbg;
 	// HAUPTgebÃ€ude  Geb >zeigtAuf> lage (mehrere)
 	$sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde "
@@ -38,6 +42,4 @@
 	."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")
 	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
-
-	// ++ evtl. keine NEBEN-GebÃ€ude mÃ¶glich, nur Haupt-?
 	// UNION - oder NEBENgebÃ€ude  Geb >hat> Pseudo
 	$sqlgz.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer, p.bezeichnung as gemeinde "
@@ -45,6 +47,7 @@
 	."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
 	."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")	
-	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL " // ID des Hauses"
-	."ORDER BY bezeichnung, hausnummer, laufendenummer;";
+	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
+
+	$sqlgz.="ORDER BY bezeichnung, hausnummer, laufendenummer;";
 	$v = array($gmlgz);
 	$resgz = pg_prepare("", $sqlgz);
@@ -52,11 +55,17 @@
 	if (!$resgz) {
 		echo "\n<p class='err'>Fehler bei Lage mit HsNr. zum Bauwerk</p>";
-		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
-		if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";}
+		if ($dbg > 1) {
+			echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";
+			if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
+		}
 	} else {
-		echo "\n<tr>";
-		echo "\n\t<td class='li'>Lage</td>";
-		echo "\n\t<td class='fett'>";
+		$erst=true;
 		while($rowgz = pg_fetch_assoc($resgz)) { // LOOP: Lagezeilen
+			if ($erst) {
+				echo "\n<tr>\n\t<td class='li'>Lage</td>";
+				$erst=false;
+			} else {
+				echo "\n<tr>\n\t<td class='li'>&nbsp;</td>";
+			}
 			$ltyp=$rowgz["ltyp"];
 			$skey=$rowgz["lage"];
@@ -65,24 +74,16 @@
 			$hlfd=$rowgz["laufendenummer"];
 			$gmllag=$rowgz["lgml"];
-			$gemeinde=$rowgz["gemeinde"];
-
+			$gemeinde=htmlentities($rowgz["gemeinde"], ENT_QUOTES, "UTF-8");
 			if ($ltyp === "p") {
-				$lagetitl="NebengebÃ€ude Nr. ".$hlfd;
+				$lagetitl="Nebengeb&auml;ude Nr. ".$hlfd;
 				$lagetxt=$snam." ".$hsnr." (".$hlfd."), ".$gemeinde;
 			} else {
-				$lagetitl="HauptgebÃ€ude - Hausnummer ".$hsnr;
+				$lagetitl="HauptgebÃ€ude - HsNr. ".$hsnr;
 				$lagetxt=$snam." ".$hsnr.", ".$gemeinde;
 			}
-
-			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 "'>";
-				if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
-			echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
-		}
-		echo "</td>";
-		echo "\n\t<td>";
-		echo "\n\t\t<p class='erkli'>Das Haus hat die Adresse ".$lagetitl."</p>";
-		echo "\n\t</td>\n</tr>";
+			echo "\n\t<td class='adrlink'><a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp.LnkStf()."'>"
+			.DsKy($skey, 'Stra&szlig;en-*').$lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
+			echo "</td>\n\t<td><p class='erkli'>Adresse: ".$lagetitl."</p></td>\n</tr>";
+		}
 		pg_free_result($resgz);
 	}
@@ -119,24 +120,23 @@
 			$titel='Bezeichnung';
 		break;	
-	// 1 Verk.
-		case 'durchfahrtshoehe':
+		case 'durchfahrtshoehe': // 1
 			$titel='Durchfahrtsh&ouml;he';
 			$einh=' m';
 		break;	
-	// 6 Leitung
-		case 'spannungsebene':
+		case 'spannungsebene': // 6
 			$titel='Spannungsebene';
 			$einh=' KV';
 		break;
-	// 7 Transport
-		case 'produkt':
+		case 'produkt': // 7
 			$titel='Produkt';
 		break;
-	// Fehler
+		case 'kilometerangabe': // 12
+			$titel='Kilometerangabe';
+			$einh=' KM';
+		break;
 		default: // noch nicht berÃŒcksichtigt
 			if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
 			$titel=$col;
 	}
-
 	if ($inhalt != '') {$inhalt.=$einh;}
 	tab_zeile($titel, '', $inhalt, '', '');
@@ -156,5 +156,5 @@
 //	if ($dbg > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
 	switch ($col) {
-		case 'hatdirektunten': // [] ++ Wie kann man dies Objekt finden?
+		case 'hatdirektunten': // [] In welcher Tabelle kann man dies Objekt finden?
 			$olist='';
 			$arrhdu=explode(",", trim($inhalt, "{}"));
@@ -167,7 +167,6 @@
 				verweis_zeile('Haus', '', 'Das Bauwerk geh&ouml;rt zum Haus');
 			} else {
-				$link="\n\t\t<a title='geh&ouml;rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$inhalt;
-				if ($showkey) {$link.="&amp;showkey=j";}
-				$link.="'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
+				$link="\n\t\t<a title='geh&ouml;rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$inhalt.LnkStf()
+				."'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
 				verweis_zeile('Haus', $link, 'Das Bauwerk geh&ouml;rt zum Haus');
 				bw_gz_lage($inhalt);				
@@ -182,5 +181,4 @@
 
 // S T A R T
-
 ini_set("session.cookie_httponly", 1);
 session_start();
@@ -199,5 +197,5 @@
 	die("Fehlender Parameter");
 }
-if (!preg_match('#^[1-9]{1}$#', $btyp)) {die("Eingabefehler btyp");} // Bauwerks-Typ = Tabelle
+if (!preg_match('#^[0-9]{1,2}$#', $btyp)) {die("Eingabefehler btyp");} // Bauwerks-Typ = Tabelle
 if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
 if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
@@ -224,13 +222,14 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-if ($nodebug === "j") {$dbg=0;} // Entwicklungsumgebung temporÃ€r ausschalten
+$dbg=$debug;
+if ($nodebug === "j") {$dbg=0;}
 
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbauwerk.php'");
 if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>\n";
 
-// Konstanten fÃŒr Sortierung und Gruppierung
+// Konstanten fÃŒr Sortierung und Gruppierung nach Bauwerks-Typen
 $btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5;
 $btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9;
+$btyp_hist=10; $btyp_heil=11; $btyp_oeff=12; $btyp_bpkt=13;
 
 /* in ALLEN Bauwerks-Typen folgende Spalten, bisher NICHT verwendet:
@@ -244,161 +243,150 @@
 	3. sqlz: ZusÃ€tzliche Spalten, individuell je Objektart (einfache Werte-Darstellung)
 	4. sqlr: Relationen zu anderen Objektarten */
+$WH=" WHERE b".$btyp.".gml_id = $1 AND b".$btyp.".endet IS NULL;"; // WHERE-Clause (mehrfach je Typ verwendet)
 switch ($btyp) {
-	
+
 case $btyp_verkehr:	// 1 - V e r k e h r
+	$FR=" FROM ax_bauwerkimverkehrsbereich b1 "; // FROM-Clause (mehrfach je Typ verwendet)
 	$btyptitle='Bauwerk im Verkehrsbereich';
-	$sqlb="SELECT b1.bauwerksfunktion, k1.beschreibung, k1.dokumentation, b1.name, b1.statement, GeometryType(b1.wkb_geometry) as bgeotyp, round(st_area(b1.wkb_geometry)::numeric,2) AS flae
- FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion=k1.wert 
- WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
-	$sqlk="SELECT b1.zustand, k1.beschreibung, k1.dokumentation
- FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_zustand_bauwerkimverkehrsbereich k1 ON b1.zustand=k1.wert 
- WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
-	$sqlz="SELECT b1.bezeichnung, b1.breitedesobjekts, b1.durchfahrtshoehe FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
-	$sqlr="SELECT b1.hatdirektunten FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
+	$sqlb="SELECT b1.bauwerksfunktion, k1.beschreibung, k1.dokumentation, b1.name, b1.statement, GeometryType(b1.wkb_geometry) as bgeotyp, round(st_area(b1.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion=k1.wert".$WH;
+	$sqlk="SELECT b1.zustand, k1.beschreibung, k1.dokumentation".$FR."LEFT JOIN ax_zustand_bauwerkimverkehrsbereich k1 ON b1.zustand=k1.wert".$WH;
+	$sqlz="SELECT b1.bezeichnung, b1.breitedesobjekts, b1.durchfahrtshoehe".$FR.$WH;
+	$sqlr="SELECT b1.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_gewaesser:	// 2 - G e w Ã€ s s e r
+	$FR=" FROM ax_bauwerkimgewaesserbereich b2 ";
 	$btyptitle='Bauwerk im GewÃ€sserbereich';
-	$sqlb="SELECT b2.bauwerksfunktion, ug.beschreibung, ug.dokumentation, b2.name, b2.statement, GeometryType(b2.wkb_geometry) as bgeotyp, round(st_area(b2.wkb_geometry)::numeric,2) AS flae
- FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion=ug.wert 
- WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
-	$sqlk="SELECT b2.zustand, k2.beschreibung, k2.dokumentation
- FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_zustand_bauwerkimgewaesserbereich k2 ON b2.zustand=k2.wert 
- WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
-	$sqlz="SELECT b2.bezeichnung FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
-	$sqlr="SELECT b2.hatdirektunten FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
+	$sqlb="SELECT b2.bauwerksfunktion, ug.beschreibung, ug.dokumentation, b2.name, b2.statement, GeometryType(b2.wkb_geometry) as bgeotyp, round(st_area(b2.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion=ug.wert".$WH;
+	$sqlk="SELECT b2.zustand, k2.beschreibung, k2.dokumentation".$FR."LEFT JOIN ax_zustand_bauwerkimgewaesserbereich k2 ON b2.zustand=k2.wert".$WH;
+	$sqlz="SELECT b2.bezeichnung".$FR.$WH;
+	$sqlr="SELECT b2.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_sonst:	// 3 - S o n s t i g e  Bauwerke
+	$FR=" FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 ";
 	$btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung';
-	$sqlb="SELECT b3.bauwerksfunktion, k3.beschreibung, k3.dokumentation, b3.name, b3.statement,
- GeometryType(b3.wkb_geometry) as bgeotyp, round(st_area(b3.wkb_geometry)::numeric,2) AS flae
- FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion=k3.wert 
- WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
-	$sqlk="SELECT b3.funktion, k3.beschreibung AS beschr, k3.dokumentation AS doku, b3.hydrologischesmerkmal, hm.beschreibung AS hmbeschr, hm.dokumentation AS hmdoku
- FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 
- LEFT JOIN ax_funktion_bauwerk k3 ON b3.funktion=k3.wert 
- LEFT JOIN ax_hydrologischesmerkmal_sonstigesbauwerkodersonstigeeinri hm ON b3.hydrologischesmerkmal=hm.wert 
- WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
-	$sqlz="SELECT b3.bezeichnung, b3.objekthoehe FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
- 	$sqlr="SELECT b3.hatdirektunten, b3.gehoertzu FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
-	
-/*  gehoertzubauwerk_ax_sonstigesbauwerkodersonstigeeinrichtun 
-    gehoertzubauwerk_ax_bauwerkoderanlagefuersportfreizeitunde 
-    gehoertzubauwerk_ax_leitung 
-    gehoertzubauwerk_ax_bauwerkoderanlagefuerindustrieundgewer 
-    gehoertzubauwerk_ax_einrichtunginoeffentlichenbereichen 
-    gehoertzubauwerk_ax_heilquellegasquelle 
-    gehoertzubauwerk_ax_historischesbauwerkoderhistorischeeinr 
-    gehoertzubauwerk_ax_turm 
-    gehoertzubauwerk_ax_vorratsbehaelterspeicherbauwerk 
-    gehoertzubauwerk_ax_transportanlage 
-    gehoertzubauwerk_ax_wegpfadsteig 
-    gehoertzubauwerk_ax_gleis 
-    gehoertzubauwerk_ax_bahnverkehrsanlage 
-    gehoertzubauwerk_ax_bauwerkimgewaesserbereich 
-    gehoertzubauwerk_ax_strassenverkehrsanlage 
-    gehoertzubauwerk_ax_seilbahnschwebebahn 
-    gehoertzubauwerk_ax_einrichtungenfuerdenschiffsverkehr 
-    gehoertzubauwerk_ax_bauwerkimverkehrsbereich 
-    gehoertzubauwerk_ax_flugverkehrsanlage 
-    gehoertzubauwerk_ax_gewaesserstationierungsachse 
-    gehoertzubauwerk_ax_sickerstrecke 
-    gehoertzubauwerk_ax_schifffahrtsliniefaehrverkehr 
-    gehoertzubauwerk_ax_wasserspiegelhoehe 
-    gehoertzubauwerk_ax_abschnitt 
-    gehoertzubauwerk_ax_ast 
-    gehoertzubauwerk_ax_netzknoten 
-    gehoertzubauwerk_ax_nullpunkt 
-    gehoertzubauwerk_ax_hafen 
-    gehoertzubauwerk_ax_testgelaende 
-    gehoertzubauwerk_ax_schleuse 
-    gehoertzubauwerk_ax_ortslage 
-    gehoertzubauwerk_ax_grenzuebergang 
-    gehoertzubauwerk_ax_polder 
-    gehoertzubauwerk_ax_gewaessermerkmal 
-    gehoertzubauwerk_ax_untergeordnetesgewaesser 
-    gehoertzubauwerk_ax_vegetationsmerkmal */ 
+	$sqlb="SELECT b3.bauwerksfunktion, k3.beschreibung, k3.dokumentation, b3.name, b3.statement, GeometryType(b3.wkb_geometry) as bgeotyp, round(st_area(b3.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion=k3.wert".$WH;
+	$sqlk="SELECT b3.funktion, k3.beschreibung, k3.dokumentation, b3.hydrologischesmerkmal, hm.beschreibung AS hmbeschr, hm.dokumentation AS hmdoku"
+	.$FR."LEFT JOIN ax_funktion_bauwerk k3 ON b3.funktion=k3.wert "
+	." LEFT JOIN ax_hydrologischesmerkmal_sonstigesbauwerkodersonstigeeinri hm ON b3.hydrologischesmerkmal=hm.wert".$WH;
+	$sqlz="SELECT b3.bezeichnung, b3.objekthoehe".$FR.$WH;
+ 	$sqlr="SELECT b3.hatdirektunten, b3.gehoertzu".$FR.$WH;
 break;
 
 case $btyp_indu:	// 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe
+	$FR=" FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 ";
 	$btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe";
-	$sqlb="SELECT b4.bauwerksfunktion, k4.beschreibung, k4.dokumentation, b4.name, b4.statement, GeometryType(b4.wkb_geometry) as bgeotyp, round(st_area(b4.wkb_geometry)::numeric,2) AS flae
- FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion=k4.wert 
- WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
-	$sqlk="SELECT b4.zustand, k4.beschreibung, k4.dokumentation
- FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_zustand_bauwerkoderanlagefuerindustrieundgewerbe k4 ON b4.zustand=k4.wert 
- WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
-	$sqlz="SELECT b4.bezeichnung, b4.objekthoehe FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
- 	$sqlr="SELECT b4.hatdirektunten FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
+	$sqlb="SELECT b4.bauwerksfunktion, k4.beschreibung, k4.dokumentation, b4.name, b4.statement, GeometryType(b4.wkb_geometry) as bgeotyp, round(st_area(b4.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion=k4.wert".$WH;
+	$sqlk="SELECT b4.zustand, k4.beschreibung, k4.dokumentation"
+	.$FR."LEFT JOIN ax_zustand_bauwerkoderanlagefuerindustrieundgewerbe k4 ON b4.zustand=k4.wert".$WH;
+	$sqlz="SELECT b4.bezeichnung, b4.objekthoehe".$FR.$WH;
+ 	$sqlr="SELECT b4.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_sport:	// 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung
+	$FR=" FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 ";
 	$btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung";
-	$sqlb="SELECT b5.bauwerksfunktion, k5.beschreibung, k5.dokumentation, b5.name, b5.statement, GeometryType(b5.wkb_geometry) as bgeotyp, round(st_area(b5.wkb_geometry)::numeric,2) AS flae
- FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion=k5.wert 
- WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
-	$sqlk="SELECT b5.sportart, k5.beschreibung, k5.dokumentation
- FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_sportart_bauwerkoderanlagefuersportfreizeitunderholung k5 ON b5.sportart=k5.wert 
- WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
-	$sqlz="SELECT b5.breitedesobjekts FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
- 	$sqlr="SELECT b5.hatdirektunten FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
+	$sqlb="SELECT b5.bauwerksfunktion, k5.beschreibung, k5.dokumentation, b5.name, b5.statement, GeometryType(b5.wkb_geometry) as bgeotyp, round(st_area(b5.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion=k5.wert".$WH;
+	$sqlk="SELECT b5.sportart, k5.beschreibung, k5.dokumentation"
+	.$FR."LEFT JOIN ax_sportart_bauwerkoderanlagefuersportfreizeitunderholung k5 ON b5.sportart=k5.wert".$WH;
+	$sqlz="SELECT b5.breitedesobjekts".$FR.$WH;
+ 	$sqlr="SELECT b5.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_leitg:	// 6 - L e i t u n g
+	$FR=" FROM ax_leitung b6 ";
 	$btyptitle="Leitung";
-	$sqlb="SELECT b6.bauwerksfunktion, k6.beschreibung, k6.dokumentation, b6.name, b6.statement, GeometryType(b6.wkb_geometry) as bgeotyp, round(st_area(b6.wkb_geometry)::numeric,2) AS flae
- FROM ax_leitung b6 LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion=k6.wert 
- WHERE b6.gml_id = $1 AND b6.endet IS NULL;";	
+	$sqlb="SELECT b6.bauwerksfunktion, k6.beschreibung, k6.dokumentation, b6.name, b6.statement, GeometryType(b6.wkb_geometry) as bgeotyp, round(st_area(b6.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion=k6.wert".$WH;	
 	$sqlk="";
-	$sqlz="SELECT b6.spannungsebene FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
- 	$sqlr="SELECT b6.hatdirektunten FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
+	$sqlz="SELECT b6.spannungsebene".$FR.$WH;
+ 	$sqlr="SELECT b6.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_trans:	// 7 - T r a n s p o r t a n l a g e
+	$FR=" FROM ax_transportanlage b7 ";
 	$btyptitle="Transportanlage";
-	$sqlb="SELECT b7.bauwerksfunktion, k7.beschreibung, k7.dokumentation, NULL AS name, b7.statement, GeometryType(b7.wkb_geometry) as bgeotyp, round(st_area(b7.wkb_geometry)::numeric,2) AS flae
- FROM ax_transportanlage b7 LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion=k7.wert 
- WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
-	$sqlk="SELECT b7.lagezurerdoberflaeche, k7.beschreibung, k7.dokumentation
- FROM ax_transportanlage b7 LEFT JOIN ax_lagezurerdoberflaeche_transportanlage k7 ON b7.lagezurerdoberflaeche=k7.wert 
- WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
-	$sqlz="SELECT b7.produkt FROM ax_transportanlage b7 WHERE b7.gml_id = $7 AND b7.endet IS NULL;";
- 	$sqlr="SELECT b7.hatdirektunten FROM ax_transportanlage b7 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
+	$sqlb="SELECT b7.bauwerksfunktion, k7.beschreibung, k7.dokumentation, b7.statement, GeometryType(b7.wkb_geometry) as bgeotyp, round(st_area(b7.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion=k7.wert".$WH;
+	$sqlk="SELECT b7.lagezurerdoberflaeche, k7.beschreibung, k7.dokumentation"
+	.$FR."LEFT JOIN ax_lagezurerdoberflaeche_transportanlage k7 ON b7.lagezurerdoberflaeche=k7.wert".$WH;
+	$sqlz="SELECT b7.produkt".$FR.$WH;
+ 	$sqlr="SELECT b7.hatdirektunten".$FR.$WH;
 break;
 
 case $btyp_turm:	// 8 - T u r m  (Sonderfall Array)
+	$FR=" FROM ax_turm b8 ";
 	$btyptitle="Turm";
-	$sqlb="SELECT k8.wert AS bauwerksfunktion, k8.beschreibung, k8.dokumentation, b8.name, b8.statement, GeometryType(b8.wkb_geometry) as bgeotyp, round(st_area(b8.wkb_geometry)::numeric,2) AS flae
- FROM ax_turm b8 LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion)
- WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
-	$sqlk="SELECT b8.zustand, k8.beschreibung, k8.dokumentation
- FROM ax_turm b8 LEFT JOIN ax_zustand_turm k8 ON b8.zustand=k8.wert 
- WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
-	$sqlz="SELECT b8.objekthoehe FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
- 	$sqlr="SELECT b8.hatdirektunten, b8.zeigtauf FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
+	$sqlb="SELECT k8.wert AS bauwerksfunktion, k8.beschreibung, k8.dokumentation, b8.name, b8.statement, GeometryType(b8.wkb_geometry) as bgeotyp, round(st_area(b8.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion)".$WH;
+	$sqlk="SELECT b8.zustand, k8.beschreibung, k8.dokumentation"
+	.$FR."LEFT JOIN ax_zustand_turm k8 ON b8.zustand=k8.wert".$WH;
+	$sqlz="SELECT b8.objekthoehe".$FR.$WH;
+ 	$sqlr="SELECT b8.hatdirektunten, b8.zeigtauf".$FR.$WH;
 break;
 
 case $btyp_vorrat:	// 9 -  V o r r a t s b e h Ã€ l t e r ,  S p e i c h e r b a u w e r k
+	$FR=" FROM ax_vorratsbehaelterspeicherbauwerk b9 ";
 	$btyptitle="VorratsbehÃ€lter, Speicherbauwerk";
-	$sqlb="SELECT b9.bauwerksfunktion, k9.beschreibung, k9.dokumentation, b9.name, b9.statement, GeometryType(b9.wkb_geometry) as bgeotyp, round(st_area(b9.wkb_geometry)::numeric,2) AS flae
- FROM ax_vorratsbehaelterspeicherbauwerk b9 LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion=k9.wert 
- WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
+	$sqlb="SELECT b9.bauwerksfunktion, k9.beschreibung, k9.dokumentation, b9.name, b9.statement, GeometryType(b9.wkb_geometry) as bgeotyp, round(st_area(b9.wkb_geometry)::numeric,2) AS flae"
+	.$FR."LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion=k9.wert".$WH;
 	$sqlk="SELECT b9.lagezurerdoberflaeche, k9.beschreibung, k9.dokumentation, 
-	 b9.speicherinhalt, sp9.beschreibung AS spbes, sp9.dokumentation AS spdok
- FROM ax_vorratsbehaelterspeicherbauwerk b9 
- LEFT JOIN ax_lagezurerdoberflaeche_vorratsbehaelterspeicherbauwerk k9 ON b9.lagezurerdoberflaeche=k9.wert 
- LEFT JOIN ax_speicherinhalt_vorratsbehaelterspeicherbauwerk sp9 ON b9.speicherinhalt=sp9.wert 
- WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
-	$sqlz="SELECT b9.objekthoehe FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
- 	$sqlr="SELECT b9.hatdirektunten FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
-break;
+	 b9.speicherinhalt, sp9.beschreibung AS spbes, sp9.dokumentation AS spdok"
+	.$FR."LEFT JOIN ax_lagezurerdoberflaeche_vorratsbehaelterspeicherbauwerk k9 ON b9.lagezurerdoberflaeche=k9.wert 
+ LEFT JOIN ax_speicherinhalt_vorratsbehaelterspeicherbauwerk sp9 ON b9.speicherinhalt=sp9.wert".$WH;
+	$sqlz="SELECT b9.objekthoehe".$FR.$WH;
+ 	$sqlr="SELECT b9.hatdirektunten".$FR.$WH;
+break;
+
+case $btyp_hist: // 10 - H i s t o r i s c h e s  Bauwerk oder historische Einrichtung
+	$FR=" FROM ax_historischesbauwerkoderhistorischeeinrichtung b10 ";
+	$btyptitle="Historisches Bauwerk oder historische Einrichtung";
+	$sqlb="SELECT b10.name, b10.statement, GeometryType(b10.wkb_geometry) as bgeotyp, round(st_area(b10.wkb_geometry)::numeric,2) AS flae".$FR.$WH;
+	$sqlk="SELECT b10.archaeologischertyp, k10.beschreibung, k10.dokumentation"
+	.$FR."LEFT JOIN ax_archaeologischertyp_historischesbauwerkoderhistorischee k10 ON b10.archaeologischertyp=k10.wert".$WH;
+	$sqlz="";
+ 	$sqlr="SELECT b10.hatdirektunten".$FR.$WH;
+break;
+
+case $btyp_heil: // 11 - H e i l q u e l l e ,  G a s q u e l l e
+	$FR=" FROM ax_heilquellegasquelle b11 ";
+	$btyptitle="Heilquelle, Gasquelle";
+	$sqlb="SELECT b11.name, b11.statement, GeometryType(b11.wkb_geometry) as bgeotyp, round(st_area(b11.wkb_geometry)::numeric,2) AS flae".$FR.$WH;
+	$sqlk="SELECT b11.art, k11.beschreibung, k11.dokumentation, "
+	."b11.hydrologischesmerkmal, hm.beschreibung AS hmbes, hm.dokumentation AS hmdok".$FR
+	."LEFT JOIN ax_art_heilquellegasquelle k11 ON b11.art=k11.wert "
+	."LEFT JOIN ax_hydrologischesmerkmal_heilquellegasquelle hm ON b11.hydrologischesmerkmal=hm.wert".$WH;
+	$sqlz="";
+ 	$sqlr="SELECT b11.hatdirektunten ".$FR.$WH;
+break;
+
+case $btyp_oeff: // 12 - Einrichtung in  Ã¶ f f e n t l i c h e n  Bereichen
+	$FR=" FROM ax_einrichtunginoeffentlichenbereichen b12 ";
+	$btyptitle="Einrichtung in &ouml;ffentlichen Bereichen";
+	$sqlb="SELECT b12.statement, GeometryType(b12.wkb_geometry) as bgeotyp, round(st_area(b12.wkb_geometry)::numeric,2) AS flae".$FR.$WH;
+	$sqlk="SELECT b12.art, k12.beschreibung, k12.dokumentation".$FR
+	."LEFT JOIN ax_art_einrichtunginoeffentlichenbereichen k12 ON b12.art=k12.wert".$WH;
+	$sqlz="SELECT b12.kilometerangabe".$FR.$WH;
+ 	$sqlr="SELECT b12.hatdirektunten ".$FR.$WH;
+break;
+/*
+case $btyp_bpkt: // 13 - Besonderer Bauwerkspunkt (ohne Geom.)
+	$FR=" FROM ax_besondererbauwerkspunkt b13 ";
+	$btyptitle="Besonderer Bauwerkspunkt";
+//  punktkennung, sonstigeeigenschaft, zustaendigestelle_land, zustaendigestelle_stelle
+break; */
 
 default:
-	die('<p class="stop1">Fehler showkey</p></body>');
-break;
-}
-
-// 1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind
+	die('<p class="stop1">Falscher Bauwerkstyp.</p></body>');
+break;
+}
+
+// 1. sqlb: Standard-Spalten, die bei (fast) jedem Typ vorhanden sind
 $v=array($gmlid);
 $resb=pg_prepare("", $sqlb);
@@ -423,14 +411,13 @@
 	} else { // Treffer
 		// Seitenkopf
-		echo "<p class='balken bauwerk".$btyp."'>ALKIS Bauwerk ".$btyp." - ".$gmlid."&nbsp;</p>"; // Balken, Farbe wie WMS
-		echo "\n<h2>".$btyptitle."</h2>";
-		echo "\n<p class='nwlink noprint'>"; // Umschalter: auch leere Felder
-		echo "Umschalten: <a class='nwlink' href='".selbstverlinkung()."?gkz=".$gkz."&amp;btyp=".$btyp."&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 "<p class='balken bauwerk".$btyp."'>ALKIS Bauwerk ".$btyp." - ".$gmlid."&nbsp;</p>" // Balken, Farbe wie WMS
+		."\n<h2>".$btyptitle."</h2>"
+		."\n<p class='nwlink noprint'>" // Umschalter: auch leere Felder
+		."Umschalten: <a class='nwlink' href='".selbstverlinkung()."?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$gmlid.LnkStf();
+		if ($allefelder) {
+			echo "&amp;allfld=n'>nur Felder mit Inhalt";
+		} else {
+			echo "&amp;allfld=j'>auch leere Felder";
+		}
 		echo "</a></p>";
 
@@ -445,30 +432,38 @@
 		."\n</tr>";
 
-		tab_zeile('Bauwerksfunktion', $rowb["bauwerksfunktion"], htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"));
-		tab_zeile('Name',        '', htmlentities($rowb["name"], ENT_QUOTES, "UTF-8"), '', '');
-		tab_zeile('Statement',   '', htmlentities($rowb["statement"], ENT_QUOTES, "UTF-8"), '', '');
+		if (isset($rowb["bauwerksfunktion"])) { // nicht immer vorhanden
+			tab_zeile('Bauwerksfunktion', $rowb["bauwerksfunktion"], htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"));
+		}
+
+		if (isset($rowb["name"])) {
+			tab_zeile('Name', '', htmlentities($rowb["name"], ENT_QUOTES, "UTF-8"), '', '');
+		}
+
+		tab_zeile('Statement', '', htmlentities($rowb["statement"], ENT_QUOTES, "UTF-8"), '', '');
 
 		// G e o m e t r i e  und FlÃ€che
-		$geotyp=$rowb["bgeotyp"];
-		switch ($geotyp) {
-			case "POINT":
-				$geodeutsch=$geotyp." bedeutet 'Punkt', einzelne Koordinate.";
-			break;
-			case "LINESTRING":
-				$geodeutsch=$geotyp." bedeutet 'Linie'.";
-			break;
-			case "POLYGON":
-				$geodeutsch=$geotyp." bedeutet eine einzelne 'Fl&auml;che'.";
-			break;
-			case "MULTIPOLYGON":
-				$geodeutsch=$geotyp." bedeutet eine 'Fl&auml;che', die aus mehreren Teilen bestehen kann oder die Aussparungen haben kann.";	
-			break;
-			default: $geodeutsch="";
-		}
-		tab_zeile('Geometrietyp', '', $geotyp, '', $geodeutsch);
-
-		if ($geotyp == "POLYGON" or $geotyp == "MULTIPOLYGON") {
-			$flaeche=$rowb["flae"]." m&#178;";
-			tab_zeile('Fl&auml;che', '', $flaeche, '', "Die 'Fl&auml;che' des Bauwerks wird aus der Geometrie berechnet, aber nur bei POLYGON.");
+		if (isset($rowb["bgeotyp"])) {
+			$geotyp=$rowb["bgeotyp"];
+			switch ($geotyp) {
+				case "POINT":
+					$geodeutsch=$geotyp." bedeutet 'Punkt', einzelne Koordinate.";
+				break;
+				case "LINESTRING":
+					$geodeutsch=$geotyp." bedeutet 'Linie'.";
+				break;
+				case "POLYGON":
+					$geodeutsch=$geotyp." bedeutet eine einzelne 'Fl&auml;che'.";
+				break;
+				case "MULTIPOLYGON":
+					$geodeutsch=$geotyp." bedeutet eine 'Fl&auml;che', die aus mehreren Teilen bestehen kann oder die Aussparungen haben kann.";	
+				break;
+				default: $geodeutsch="";
+			}
+			tab_zeile('Geometrietyp', '', $geotyp, '', $geodeutsch);
+
+			if ($geotyp == "POLYGON" or $geotyp == "MULTIPOLYGON") {
+				$flaeche=$rowb["flae"]." m&#178;";
+				tab_zeile('Fl&auml;che', '', $flaeche, '', "Die 'Fl&auml;che' des Bauwerks wird aus der Geometrie berechnet, aber nur bei POLYGON.");
+			}
 		}
 	}
@@ -476,5 +471,5 @@
 }
 
-// 2. sqlk:  Z u s Ã€ t z l i c h e   K e y - V a l u e - B e z i e h u n g e n
+// 2. sqlk:  ZusÃ€tzliche Key-Value-Beziehungen
 // Andere Art der Darstellung als die schlichten Zusatzfelder, Key optional anzeigen, ErklÃ€rung zum Wert aus SchlÃŒsseltabelle
 if ($sqlk != '') {
@@ -500,31 +495,44 @@
 		} else {
 		// Treffer
+			$bes=htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8");
+			$dok=htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8");
 			switch ($btyp) {  // individuell je Typ
 			case $btyp_verkehr: // 1
-				tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
 			break;
 			case $btyp_gewaesser: // 2
-				tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
 			break;
 			case $btyp_sonst: // 3
-				tab_zeile('Funktion', $rowk["funktion"], htmlentities($rowk["beschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["doku"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Funktion', $rowk["funktion"], $bes, '', $dok);
 				tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], htmlentities($rowk["hmbeschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["hmdoku"], ENT_QUOTES, "UTF-8"));
 			break;
 			case $btyp_indu: // 4
-				tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
 			break;
 			case $btyp_sport: // 5
-				tab_zeile('Sportart', $rowk["sportart"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Sportart', $rowk["sportart"], $bes, '', $dok);
 			break;
 			case $btyp_trans: // 7
-				tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], $bes, '', $dok);
 			break;
 			case $btyp_turm: // 8
-				tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
 			break;
 			case $btyp_vorrat: // 9
-				tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
+				tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], $bes, '', $dok);
 				tab_zeile('Speicherinhalt', $rowk["speicherinhalt"], htmlentities($rowk["spbes"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["spdok"], ENT_QUOTES, "UTF-8"));
-			break;
+			case $btyp_hist: // 10
+				tab_zeile('Arch&auml;ologischer Typ', $rowk["archaeologischertyp"], $bes, '', $dok);
+			break;
+			case $btyp_heil: // 11
+				tab_zeile('Art', $rowk["art"], $bes, '', $dok);
+				tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], htmlentities($rowk["hmbes"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["hmdok"], ENT_QUOTES, "UTF-8"));
+			break;
+			case $btyp_oeff: // 12
+				tab_zeile('Art', $rowk["art"], $bes, '', $dok);
+			break;
+//			case $btyp_bpkt: // 13
+//			break;
 			}
 		}
Index: /trunk/info/info/alkisn/alkisfshist.php
===================================================================
--- /trunk/info/info/alkisn/alkisfshist.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisfshist.php	(revision 427)
@@ -1,7 +1,10 @@
 <?php
-/*	Modul: alkisfshist.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	Flurstuecks-Historie fuer ein Flurstueckskennzeichen aus ALKIS PostNAS
+/*	alkisfshist.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	FlurstÃŒcks-Historie fÃŒr ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
+
 	Version:
 	2016-02-24 Version fÃŒr norGIS-ALKIS-Import
@@ -11,8 +14,9 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neuer Parameter $PrntBtn (Drucken-SchaltflÃ€che)
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 */
 
 function fzerleg($fs) {
-/*	Flurstueckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
+/*	FlurstÃŒckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
 	Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert 
    ....*....1....*....2
@@ -37,7 +41,5 @@
 		$arr = explode(",",$stri);
 		foreach($arr AS $val){
-			echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".selbstverlinkung()."?gkz=".$gkz."&amp;fskennz=".$val;
-			if ($showkey)   {echo "&amp;showkey=j";}
-			echo "'>".fzerleg($val)."</a><br>";
+			echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".selbstverlinkung()."?gkz=".$gkz."&amp;fskennz=".$val.LnkStf()."'>".fzerleg($val)."</a><br>";
 		}
 	}
@@ -90,7 +92,5 @@
 		$gmlv=$rowv["gml_id"];
 		$vfsk=$rowv["flurstueckskennzeichen"];
-		echo "Flurst&uuml;ck <a title='Historie des Vorg&auml;ngerflurst&uuml;cks' href='".selbstverlinkung()."?gkz=".$gkz."&amp;fskennz=".$vfsk."&amp;gmlid=".$gmlv;
-			if ($showkey) {echo "&amp;showkey=j";}
-		echo "'>".fzerleg($vfsk)."</a><br>";
+		echo "Flurst&uuml;ck <a title='Historie des Vorg&auml;ngerflurst&uuml;cks' href='".selbstverlinkung()."?gkz=".$gkz."&amp;fskennz=".$vfsk."&amp;gmlid=".$gmlv.LnkStf()."'>".fzerleg($vfsk)."</a><br>";
 		$zv++;
 	}
@@ -102,5 +102,4 @@
 
 // Start
-
 ini_set("session.cookie_httponly", 1);
 session_start();
@@ -147,8 +146,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -251,7 +247,5 @@
 	."\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>" // innere Tabelle Kennzeichen
 		."\n\t\t<td class='head'>Gemarkung</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<tr>\n\t\t<td title='Gemarkung'>".DsKy($gmkgnr, 'Gemarkungsnummer').$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>"
@@ -263,9 +257,6 @@
 if ($ftyp === "a") { // Aktuell -> Historie
 	echo "\n<p class='nwlink noprint'>weitere Auskunft: "
-		."<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 "
-			."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
-		."</a>";
+	."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf()."&amp;eig=n' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
+	."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>";
 }
 echo "\n<hr>"
@@ -277,5 +268,5 @@
 	</tr>"; // Head
 	
-	// Spalte 1: F l u r s t ÃŒ c k
+	// Sp.1: FlurstÃŒck
 	echo "\n<tr>\n\t<td>"
 		."<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert
@@ -283,5 +274,5 @@
 	."</td>";
 
-	// Spalte 2: V o r g Ã€ n g e r
+	// Sp.2: VorgÃ€nger
 	echo "\n\t<td>";
 	switch ($ftyp) { // Diff. Hist./Akt.
@@ -298,5 +289,5 @@
 	echo"</td>";
 
-	// Spalte 3: N a c h f o l g e r
+	// Sp.3: Nachfolger
 	echo "\n\t<td>";
 		vornach($nach);
Index: /trunk/info/info/alkisn/alkishaus.php
===================================================================
--- /trunk/info/info/alkisn/alkishaus.php	(revision 426)
+++ /trunk/info/info/alkisn/alkishaus.php	(revision 427)
@@ -1,5 +1,9 @@
 <?php
-/*	alkishaus.php - viele Daten zu EINEM ALKIS-GebÃ€ude-Objekt
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+/*	alkishaus.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	Daten zu EINEM ALKIS-GebÃ€ude-Objekt
 
 	Version:
@@ -11,6 +15,8 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Gemeinde in Adresse
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 
 ToDo:
+	- per Relation dazugehÃ¶rige Bauwerke (z.B. Ãberdachung) suchen, ax_sonstigesbauwerkodersonstigeeinrichtung.gehoertzu
 	- Template im WMS auf Ebene GebÃ€ude hierhin verknÃŒpfen.
 */
@@ -55,8 +61,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -64,5 +67,5 @@
 if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
 
-// G e b a e u d e
+// G e b Ã€ u d e
 // ... g.qualitaetsangaben, 
 $sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, g.anzahlderunterirdischengeschosse AS aug, 
@@ -97,15 +100,14 @@
 
 // Balken
-echo "\n<p class='balken geb'>ALKIS Haus ".$gmlid."&nbsp;</p>";
-echo "\n<h2><img src='ico/Haus.png' width='16' height='16' alt=''> Haus (Geb&auml;ude)</h2>\n<hr>";
-
-echo "<p class='nwlink noprint'>"; // Umschalter: auch leere Felder
-echo "Umschalten: <a class='nwlink' href='".selbstverlinkung()."?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 "\n<p class='balken geb'>ALKIS Haus ".$gmlid."&nbsp;</p>"
+."\n<h2><img src='ico/Haus.png' width='16' height='16' alt=''> Haus (Geb&auml;ude)</h2>\n<hr>";
+
+echo "<p class='nwlink noprint'>" // Umschalter: auch leere Felder
+."Umschalten: <a class='nwlink' href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf();
+if ($allefelder) {
+	echo "&amp;allfld=n'>nur Felder mit Inhalt";
+} else {
+	echo "&amp;allfld=j'>auch leere Felder";
+}
 echo "</a></p>";
 
@@ -128,5 +130,5 @@
 $aug=$rowg["aug"];
 $hoh=$rowg["hochhaus"];
-$nam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array.
+$nam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array.
 // Mehrfachbelegung theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum.
 $kfunk=$rowg["gebaeudefunktion"];
@@ -215,9 +217,6 @@
 			."\n\t<td class='fett'>";
 	}
-	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;
-		if ($showkey) {echo "&amp;showkey=j";}
-		echo "'>".$snam."&nbsp;".$hsnr;
+	echo "\n\t\t<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''>&nbsp;".DsKy($skey, 'Stra&szlig;en-*');		
+	echo "\n\t\t<a title='Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp.LnkStf()."'>".$snam."&nbsp;".$hsnr;
 		if ($ltyp === "p") {echo ", lfd.Nr ".$hlfd;}
 	echo "</a>, ".$gemeinde."<br>";
@@ -229,7 +228,5 @@
 echo "\n<tr>"
 	."\n\t<td class='li'>Geb&auml;udefunktion</td>"
-	."\n\t<td class='fett'>";
-	if ($showkey and $kfunk != '') {echo "<span class='key'>(".$kfunk.")</span>&nbsp;";}
-	echo $bfunk."</td>"
+	."\n\t<td class='fett'>".DsKy($kfunk, 'Geb&auml;udefunktion-*').$bfunk."</td>"
 	."\n\t<td>"
 		."\n\t\t<p class='erklk'>'Geb&auml;udefunktion' ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'</p>"
@@ -241,13 +238,10 @@
 if ($baw != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Bauweise</td>"
-		."\n\t<td class='fett'>";
-		if ($showkey and $baw != '') {echo "<span class='key'>(".$baw.")</span>&nbsp;";}
-		echo $bbauw."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Bauweise' ist die Beschreibung der Art der Bauweise.</p>"
-			."\n\t\t<p class='erkli'>".$dbauw."</p>"
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Bauweise</td>"
+	."\n\t<td class='fett'>".DsKy($baw, 'Bauweise-*').$bbauw."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Bauweise' ist die Beschreibung der Art der Bauweise.</p>"
+		."\n\t\t<p class='erkli'>".$dbauw."</p>"
+	."\n\t</td>\n</tr>";
 }
 
@@ -255,10 +249,9 @@
 if ($aog != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Geschosse</td>"
-		."\n\t<td class='fett'>".$aog."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>Anzahl oberirdischer Geschosse.</p>"
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Geschosse</td>"
+	."\n\t<td class='fett'>".$aog."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>Anzahl oberirdischer Geschosse.</p>"
+	."\n\t</td>\n</tr>";
 }
 
@@ -266,10 +259,9 @@
 if ($aug != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>U-Geschosse</td>"
-		. "\n\t<td class='fett'>".$aug."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>Anzahl unterirdischer Geschosse.</p>"
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>U-Geschosse</td>"
+	. "\n\t<td class='fett'>".$aug."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>Anzahl unterirdischer Geschosse.</p>"
+	."\n\t</td>\n</tr>";
 }
 
@@ -277,10 +269,9 @@
 if ($hoh != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Hochhaus</td>"
-		."\n\t<td class='fett'>".$hoh."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'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."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Hochhaus</td>"
+	."\n\t<td class='fett'>".$hoh."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'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."
+	."\n\t</td>\n</tr>";
 }
 
@@ -288,13 +279,10 @@
 if ($ofl != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Lage zur Erdoberfl&auml;che</td>"
-		."\n\t<td class='fett'>";
-		if ($showkey and $ofl != '') {echo "<span class='key'>(".$ofl.")</span>&nbsp;";}
-		echo $oflv."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'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.<br>"
-			."\n\t\t<p class='erkli'>".$ofld."</p>"
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Lage zur Erdoberfl&auml;che</td>"
+	."\n\t<td class='fett'>".DsKy($ofl, '* f&uuml;r Lage zur Erdoberfl&auml;che').$oflv."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'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.<br>"
+		."\n\t\t<p class='erkli'>".$ofld."</p>"
+	."\n\t</td>\n</tr>";
 }
 
@@ -302,12 +290,9 @@
 if ($dga != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Dachgeschossausbau</td>"
-		."\n\t<td class='fett'>";
-		if ($showkey and $dga != '') {echo "<span class='key'>(".$dga.")</span>&nbsp;";}
-		echo $dgav."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Dachgeschossausbau' ist ein Hinweis auf den Ausbau bzw. die Ausbauf&auml;higkeit des Dachgeschosses."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Dachgeschossausbau</td>"
+	."\n\t<td class='fett'>".DsKy($dga, '* Dachgeschossausbau').$dgav."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Dachgeschossausbau' ist ein Hinweis auf den Ausbau bzw. die Ausbauf&auml;higkeit des Dachgeschosses."
+	."\n\t</td>\n</tr>";
 }
 
@@ -315,44 +300,39 @@
 if ($zus != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Zustand</td>"
-		."\n\t<td class='fett'>";
-		if ($showkey and $zus != '') {echo "<span class='key'>(".$zus.")</span>&nbsp;";}
-		echo $zusv."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'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.</p>"
-			."\n\t\t<p class='erkli'>".$zusd."</p>"
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Zustand</td>"
+	."\n\t<td class='fett'>";
+	echo DsKy($zus, 'Zustand-*').$zusv."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'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.</p>"
+		."\n\t\t<p class='erkli'>".$zusd."</p>"
+	."\n\t</td>\n</tr>";
 }
 
 // Weitere GebÃ€udefunktionen
-// Suche Testfall: SELECT gml_id, gebaeudefunktion, weiteregebaeudefunktion FROM ax_gebaeude WHERE (NOT weiteregebaeudefunktion IS NULL) AND cardinality(weiteregebaeudefunktion) > 1 liMIT 10;
 if ($wgf != "" OR $allefelder) { // ... ist ein Array
 	echo "\n<tr>"
-		."\n\t<td class='li'>Weitere Geb&auml;udefunktionen</td>"
-		."\n\t<td>";
-		if ($wgf != "") { // Kommagetrennte Liste aus Array
-			$sqlw="SELECT wert, beschreibung, dokumentation FROM ax_gebaeudefunktion WHERE wert IN ( $1 ) ORDER BY wert;";
-			$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>";
-				if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlw."<br>$1 = Werteliste = '".$wgf."'</p>";}
-			}
-			$zw=0;
-			while($roww = pg_fetch_assoc($resw)) { // LOOP Funktion
-				if ($zw > 0) {echo "<br>";}
-				if ($showkey and $roww["wert"] != '') {echo "<span class='key'>(".$roww["wert"].")</span>&nbsp;";}
-				echo "<span title='".$roww["dokumentation"]."'>".$roww["beschreibung"]."</span>";
-				$zw++;
-		   }
-		   pg_free_result($resw);
+	."\n\t<td class='li'>Weitere Geb&auml;udefunktionen</td>"
+	."\n\t<td>";
+	if ($wgf != "") { // Kommagetrennte Liste aus Array
+		$sqlw="SELECT wert, beschreibung, dokumentation FROM ax_gebaeudefunktion WHERE wert IN ( $1 ) ORDER BY wert;";
+		$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>";
+			if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlw."<br>$1 = Werteliste = '".$wgf."'</p>";}
 		}
-		echo "</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Weitere Geb&auml;udefunktion' ist die Funktion, die ein Geb&auml;ude neben der dominierenden Geb&auml;udefunktion hat."
-		."\n\t</td>"
-	."\n</tr>";
+		$zw=0;
+		while($roww = pg_fetch_assoc($resw)) { // LOOP Funktion
+			if ($zw > 0) {echo "<br>";}
+			echo DsKy($roww["wert"], 'Geb&auml;udefunktionen-*')."<span title='".$roww["dokumentation"]."'>".$roww["beschreibung"]."</span>";
+			$zw++;
+	   }
+	   pg_free_result($resw);
+	}
+	echo "</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Weitere Geb&auml;udefunktion' ist die Funktion, die ein Geb&auml;ude neben der dominierenden Geb&auml;udefunktion hat."
+	."\n\t</td>\n</tr>";
 }
 
@@ -360,12 +340,9 @@
 if ($daf != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Dachform</td>"
-		."\n\t<td class='fett'>";
-		if ($showkey and $daf != '') {echo "<span class='key'>(".$daf.")</span>&nbsp;";}
-		echo $dach."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Dachform' beschreibt die charakteristische Form des Daches."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Dachform</td>"
+	."\n\t<td class='fett'>".DsKy($daf, 'Dachform-*').$dach."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Dachform' beschreibt die charakteristische Form des Daches."
+	."\n\t</td>\n</tr>";
 }
 
@@ -373,10 +350,9 @@
 if ($hho != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Objekth&ouml;he</td>"
-		."\n\t<td class='fett'>".$hho."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'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."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Objekth&ouml;he</td>"
+	."\n\t<td class='fett'>".$hho."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'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."
+	."\n\t</td>\n</tr>";
 }
 
@@ -384,12 +360,11 @@
 if ($gfl != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Geschossfl&auml;che</td>"
-		."\n\t<td class='fett'>";
-		if ($gfl != "") {echo $gfl." m&#178;";}
-		echo "</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Geschossfl&auml;che' ist die Geb&auml;udegeschossfl&auml;che in [qm]."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Geschossfl&auml;che</td>"
+	."\n\t<td class='fett'>";
+	if ($gfl != "") {echo $gfl." m&#178;";}
+	echo "</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Geschossfl&auml;che' ist die Geb&auml;udegeschossfl&auml;che in [qm]."
+	."\n\t</td>\n</tr>";
 }
 
@@ -397,11 +372,10 @@
 if ($grf != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Grundfl&auml;che</td>"
-		."\n\t<td class='fett'>";
-		if ($grf != "") {echo $grf." m&#178;";}
-		echo "\n\t<td>"
-			."\n\t\t<p class='erklk'>'Grundfl&auml;che' ist die Geb&auml;udegrundfl&auml;che in [qm]."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Grundfl&auml;che</td>"
+	."\n\t<td class='fett'>";
+	if ($grf != "") {echo $grf." m&#178;";}
+	echo "\n\t<td>"
+		."\n\t\t<p class='erklk'>'Grundfl&auml;che' ist die Geb&auml;udegrundfl&auml;che in [qm]."
+	."\n\t</td>\n</tr>";
 }
 
@@ -409,10 +383,9 @@
 if ($ura != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Umbauter Raum</td>"
-		."\n\t<td class='fett'>".$ura."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Umbauter Raum' ist der umbaute Raum [Kubikmeter] des Geb&auml;udes."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Umbauter Raum</td>"
+	."\n\t<td class='fett'>".$ura."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Umbauter Raum' ist der umbaute Raum [Kubikmeter] des Geb&auml;udes."
+	."\n\t</td>\n</tr>";
 }
 
@@ -420,10 +393,9 @@
 if ($bja != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Baujahr</td>"
-		."\n\t<td class='fett'>".$bja."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Baujahr' ist das Jahr der Fertigstellung oder der baulichen Ver&auml;nderung des Geb&auml;udes."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Baujahr</td>"
+	."\n\t<td class='fett'>".$bja."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Baujahr' ist das Jahr der Fertigstellung oder der baulichen Ver&auml;nderung des Geb&auml;udes."
+	."\n\t</td>\n</tr>";
 }
 
@@ -431,10 +403,9 @@
 if ($daa != "" OR $allefelder) {
 	echo "\n<tr>"
-		."\n\t<td class='li'>Dachart</td>"
-		."\n\t<td class='fett'>".$daa."</td>"
-		."\n\t<td>"
-			."\n\t\t<p class='erklk'>'Dachart' gibt die Art der Dacheindeckung (z.B. Reetdach) an."
-		."\n\t</td>"
-	."\n</tr>";
+	."\n\t<td class='li'>Dachart</td>"
+	."\n\t<td class='fett'>".$daa."</td>"
+	."\n\t<td>"
+		."\n\t\t<p class='erklk'>'Dachart' gibt die Art der Dacheindeckung (z.B. Reetdach) an."
+	."\n\t</td>\n</tr>";
 }
 
@@ -461,13 +432,10 @@
 	if ($erheb != "" OR $allefelder) {
 		echo "\n<tr>"
-			."\n\t<td class='li'>Datenerhebung</td>"
-			."\n\t<td class='fett'>";
-			if ($showkey) {echo "<span class='key'>(".$erheb.")</span>&nbsp;";}
-			echo $berheb."</td>"
-			."\n\t<td>"
-				."\n\t\t<p class='erklk'>'Datenerhebung' beschreibt Qualit&auml;tsangaben, Herkunft.</p>"
-				."\n\t\t<p class='erkli'>".$derheb."</p>"
-			."</td>"
-		."\n</tr>";
+		."\n\t<td class='li'>Datenerhebung</td>"
+		."\n\t<td class='fett'>".DsKy($erheb, 'Datenerhebung-*').$berheb."</td>"
+		."\n\t<td>"
+			."\n\t\t<p class='erklk'>'Datenerhebung' beschreibt Qualit&auml;tsangaben, Herkunft.</p>"
+			."\n\t\t<p class='erkli'>".$derheb."</p>"
+		."</td>\n</tr>";
 	}
 }
@@ -515,5 +483,5 @@
 
 	// 3 FÃ€lle:
-	if ($drin === "t") { // GebÃ€ude liegt komplett in FlurstÃŒck
+	if ($drin === "t") { // Geb. komplett in FS
 		$gstyle="gin"; // siehe .css	
 		$f1=number_format($schni,2,",",".") . " m&#178;";
@@ -524,5 +492,5 @@
 			$f1="&nbsp;";
 			$f2="angrenzend";
-		} else { // Teile des GebÃ€udes stehen auf dem FlurstÃŒck
+		} else { // Teile des Geb. auf dem FS
 			$gstyle="gtl";
 			$f1=number_format($schni,2,",",".") . " m&#178;";
@@ -532,15 +500,12 @@
 	echo "\n<tr>"
 		."\n\t<td class='fla'>".$f1."</td>"
-		."\n\t<td class='".$gstyle."'>".$f2."</td>";
-	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='".$gstyle."'>".$f2."</td>"
+		."\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer').$rowf["bezeichnung"]."</td>"
+		."\n\t<td>".$flur."</td>"
+		."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>";
 
 	echo "\n\t<td class='nwlink noprint'>" // Link FS
-		."\n\t\t<a title='Flurst&uuml;ck' href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fgml;
-		if ($showkey) {echo "&amp;showkey=j";}
-		echo "'>Flurst&uuml;ck&nbsp;<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
+		."\n\t\t<a title='Flurst&uuml;ck' href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fgml.LnkStf()
+		."'>Flurst&uuml;ck&nbsp;<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
 		."\n\t</td>"
 	."\n</tr>";
@@ -549,5 +514,5 @@
 $gfla=number_format($gfla,2,",",".") . " m&#178;";
 echo "\n<tr>\n\t<td class='fla sum'>".$gfla."</td>\n\t<td>Geb&auml;udefl&auml;che</td>\n\t<td></td>\n</tr>";
-echo "\n</table>"; // Ende FlurstÃŒcke
+echo "\n</table>";
 
 echo "<div class='buttonbereich noprint'>\n<hr>"
Index: /trunk/info/info/alkisn/alkisinlayausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlayausk.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisinlayausk.php	(revision 427)
@@ -2,13 +2,15 @@
 /*	alkisinlayausk.php
 
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	Dies Programm wird in einen iFrame im Mapserver-Template (FeatureInfo) geladen.
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	Dies Programm wird in einen iFrame im Mapserver-Template der FeatureInfo geladen.
 	Parameter: &gkz, &gml_id
-	Dies Programm gibt einen kurzen Ueberblick zum Flurstueck, z.B. Eigentuemer ohne Adresse.
+	Dies Programm gibt einen kurzen Ãberblick zum FlurstÃŒck, z.B. EigentÃŒmer 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.
+	Dies ist eine Variante von alkisausk.php welches als vollstÃ€ndige Seite aufgerufen wird.
 
 	Version:
-	2016-02-24 Version fuer norGIS-ALKIS-Import
+	2016-02-24 Version fÃŒr norGIS-ALKIS-Import
 	....
 	2020-02-03 Fenster-Weite
@@ -59,5 +61,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
+$dbg=$debug;
 
 // Body des Inlay muss in Mapbender-Feature-Info-PopUp passen. Kleiner als 750 aus css.
@@ -65,5 +67,5 @@
 if (!$con) {echo "<br>Fehler beim Verbinden der DB.\n<br>";}
 
-// *** F L U R S T U E C K ***
+// F L U R S T Ã C K
 $sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung, f.gemeindezugehoerigkeit_regierungsbezirk, f.gemeindezugehoerigkeit_kreis, f.gemeindezugehoerigkeit_gemeinde, f.istgebucht
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g")
@@ -208,6 +210,5 @@
 while($row = pg_fetch_assoc($res)) {
 	$sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
-
-	if (substr($sname, strlen($sname) -3, 3) === 'weg') { // Versuch fuer korrekten Satzbau
+	if (substr($sname, strlen($sname) -3, 3) === 'weg') { // Versuch fÃŒr korrekten Satzbau
 		$slink=" am ".$sname;
 	} else {
@@ -255,5 +256,5 @@
 if ($gml_buchungsstelle == '') {echo "\n<p class='err'>Keine Buchungstelle zum Flurst&uuml;ck gefunden.</p>";}
 echo "\n\n<table class='outer'>";
-	$gezeigt=buchung_anzg($gml_buchungsstelle, 'j', true, "", 1); // direkte Buchung anzeigen wenn nicht fiktiv, Eigent. ja, mit JS "imFenster"
+	$gezeigt=buchung_anzg($gml_buchungsstelle, 'j', true, "", 1); // direkte Buchung anzeigen
 	$anzber=ber_bs_zaehl($gml_buchungsstelle); // Ber. Buchg., nur Anzahl
 	if ($anzber > 0 ) {
Index: /trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisbestnw.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisbestnw.php	(revision 427)
@@ -1,7 +1,9 @@
 <?php
-/*	Modul: alkisbestnw.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	Bestandsnachweis fÃŒr ein Grundbuch aus ALKIS PostNAS
+/*	alkisbestnw.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	Bestandsnachweis fÃŒr ein Grundbuch (-Blatt) aus ALKIS PostNAS
 
 	Version:
@@ -14,5 +16,189 @@
 			   Tabellenstruktur verbessert und Title bei "Recht an".
 	2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
+	2022-01-13 Functions aus alkisfkt.php in dies Modul verschoben, wenn nur hier verwendet. Neue Functions LnkStf(), DsKy()
 */
+
+function bnw_bsdaten($gml_h, $ebene) {
+/*	Bestandsnachweis - Buchungsstellen-Daten
+	"dienende" Buchungsstellen suchen. Miteigentumsanteil, Erbbaurecht usw. 
+	Return: gml_id der dienenden Buchungsstelle wenn gefunden? Sonst Leerstring */
+	global $dbg, $bartkey, $bart, $bartstory, $anteil;
+
+//	dann "dienende" Buchungsstellen
+//  sh=herrschend          sd=dienend
+//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes) 
+//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
+//	- "zu" kommt in der Praxis (NRW) nicht vor, wird hier nicht berÃŒcksichtigt
+
+	if ($ebene > 5) {echo "\n<p class='err'>UngewÃ¶hnlich tiefe Schachtelung ".$ebene." der Buchungs-Stellen.</p>";}
+
+	$sql ="SELECT sd.gml_id, sd.buchungsart, sd.zaehler, sd.nenner, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, "
+	."sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, "
+	."wb.beschreibung AS bart, wb.dokumentation, "
+	."b.gml_id as gbgml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, "
+	."bb.beschreibung AS blattartv, z.bezeichnung AS beznam "
+	."FROM ax_buchungsstelle sh "
+	."JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
+	."JOIN ax_buchungsblatt b ON b.gml_id=sd.istbestandteilvon "	
+	."LEFT JOIN ax_buchungsart_buchungsstelle wb ON sd.buchungsart = wb.wert "
+	."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk ".UnqKatAmt("b","z")
+	."LEFT JOIN ax_blattart_buchungsblatt bb ON b.blattart = bb.wert "
+	."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL "
+	."ORDER BY sd.laufendenummer;";
+	$v=array($gml_h); // gml_id "herrschende" B-Stelle
+	$resan=pg_prepare("", $sql);
+	$resan=pg_execute("", $v);
+	if (!$resan) {
+		echo "\n<p class='err'>Fehler bei 'dienende Buchungsstelle'.</p>";
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
+	}
+	$zeianz=pg_num_rows($resan); // Zeilen-Anzahl = Returnwert
+	$und = false; // mehrfaches "Recht an" auf gleicher Ebene
+	while($row= pg_fetch_assoc($resan)) {
+		$gml_bsan=$row["gml_id"];	// id der dien. BS
+		$blatt=ltrim($row["blatt"], "0");		
+
+		// als Global-Var zur Sub-Function:
+		$bartkey=$row["buchungsart"];	
+		$bart=$row["bart"]; // Buchungsart, entschlÃŒsselt
+		$bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8");
+		if ($row["zaehler"] == "") {$anteil = "";} 
+		else {$anteil = $row["zaehler"]."/".$row["nenner"];}
+
+		// Zeile ausgeben Buchungsstelle dienend 
+		bnw_bszeile_d($row["bezirk"], $row["beznam"], $blatt, $row["blattart"], $row["blattartv"], $row["lfd"], $row["gbgml"], $gml_bsan, $ebene, $und);
+		$und = true;
+		if ($row["nrap"] != "") { // Nr im Auft.Plan
+			echo "\n<tr>\n\t<td colspan=3></td><td class='nrap' colspan=4>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td><td></td>\n</tr>";
+		}
+		if ($row["sond"] != "") { // Sondereigentumsbeschreibung
+			echo "\n<tr>\n\t<td></td><td class='sond' colspan=6 title='Sondereigentums-Beschreibung'>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td><td></td>\n</tr>";
+		}
+
+		// Rekursiver Aufruf der gleichen Function, weitere Ebene dienend?
+		$tiefer = bnw_bsdaten($gml_bsan, ($ebene + 1));
+		If ($tiefer == 0) {  // Wenn nicht, dann kann es FlurstÃŒcke dazu geben
+			$fscnt= bnw_fsdaten($gml_bsan, false); // FlurstÃŒcksdaten
+		}
+	}
+	pg_free_result($resan);
+	return $zeianz;
+}
+
+function bnw_fsdaten($gml_bs, $mit_buchung_link) {
+/*	Bestandsnachweis - FlurstÃŒcksdaten
+	Die Tabellenzeilen mit den FlurstÃŒcksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
+	Die Funktion wird entweder aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall)
+	oder bei Erbbaurecht fÃŒr die mit "an" verknÃŒpften Buchungsstellen der untersten Ebene (dienende Buchung).
+	Der Tabellenkopf wird im aufrufenden Programm ausgegeben. 
+	Return: Anzahl der ausgegebenen FlurstÃŒcke */
+	global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil;
+
+	$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 ".UnqKatAmt("f","g")
+	."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
+	if ($filtgem === '') { // ungefiltert
+		$v=array($gml_bs);
+	} else {
+		$sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÃ€ndiges Gebiet
+		$v=array($gml_bs, $filtkreis, $filtgem);
+	}
+	$sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+	$resf = pg_prepare("", $sql);
+	$resf = pg_execute("", $v);
+	if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
+	$zeianz=pg_num_rows($resf);
+	while($rowf = pg_fetch_assoc($resf)) {
+		$fskenn=$rowf["zaehler"];
+		if ($rowf["nenner"] != "") { // Bruch
+			$fskenn.="/".$rowf["nenner"];
+		}
+		$flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
+
+		echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
+		
+		// Sp. 1-3 der Tab. Daten aus Buchungsstelle, nicht aus FS
+		if($lfdnr === $altlfdnr) { // gleiches GrundstÃŒck, leer lassen
+			echo "\n\t<td>&nbsp;</td>"
+			."\n\t<td>&nbsp;</td>"
+			."\n\t<td>&nbsp;</td>";
+		} else { // Sprungmarke, BVNR
+			$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
+			echo "\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span>\n\t</td>"
+			."\n\t<td title ='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
+			."\n\t<td>&nbsp;</td>";
+			$altlfdnr=$lfdnr;
+		}
+
+		// Sp. 4-7 aus FlurstÃŒck
+		echo "\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer').$rowf["bezeichnung"]."</td>"
+		."\n\t<td>".$rowf["flurnummer"]."</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'>";
+
+		// Buchung BVNR
+		If ($mit_buchung_link == true) { // nur bei GrundstÃŒck
+			echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs.LnkStf()
+			."' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>&nbsp;";			
+			$mit_buchung_link = false; // nur in erster Zeile
+		}
+		// Flurstk.
+		echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n".LnkStf()."' 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>";
+	}
+	pg_free_result($resf);
+	return $zeianz;
+}
+
+function bnw_bszeile_h() {
+/*	Bestandsnachweis - Buchungs-Stellen-Zeile ausgeben - herrschend.
+	Die GB-Daten hierzu stehen bereits im Kopf und bleiben in der Tab. leer */
+	global $dbg, $gkz, $trclass, $lfdnr, $bartkey, $bart, $bartstory, $anteil;
+
+	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
+	echo "\n<tr class='".$trclass."'>"
+	."\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span></td>" // Sprungmarke=BVNR auf dem GB-Blatt
+	."\n\t<td class='dien' title='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
+	."\n\t<td class='dien'>".$anteil."</td>"
+	."\n\t<td colspan=5>&nbsp;</td>\n</tr>";
+}
+
+function bnw_bszeile_d($bezkey, $beznam, $blatt, $blattartkey, $blattart, $lfdnran, $gbgml, $gml_bsan, $ebene, $und) {
+/*	Bestandsnachweis - Buchungsstellen-Zeile ausgeben - dienend
+	Eine Folge-Zeile fÃŒr eine dienende Buchung ausgeben. */
+	global $gkz, $trclass, $bartkey, $bart, $bartstory, $anteil;
+
+	$bvnr=str_pad($lfdnran, 4, "0", STR_PAD_LEFT);
+	$filler=str_repeat("&nbsp;", $ebene - 2); // 3 und 4 EinrÃŒcken
+	if ($und){$filler.="und ";}; // Unterscheidung Hierarchie (Ebene wechselt) von Liste (gleiche Ebene)
+	echo "\n<tr class='".$trclass."'>"
+	."\n\t<td title='Ebene ".$ebene."'>".$filler."an</td>"
+	."\n\t<td class='dien' title='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
+	."\n\t<td class='dien'>".$anteil."</td>";
+
+	// Sp.4 GB-Bezirk
+	echo "\n\t<td class='dien' title='Grundbuch-Bezirk'>".DsKy($bezkey, 'Grundbuch-Bezirk-*').htmlentities($beznam, ENT_QUOTES, "UTF-8")."</td>"
+	."\n\t<td class='dien' title='".$blattart."'>".$blatt."</td>"
+	."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".$bvnr."</td>"
+	."\n\t<td class='dien'></td>"; 
+
+	echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+
+	// Link Bestand Blatt
+	echo "\n\t\t\t".DsKy($blattartkey, 'Blatt-Art-*')."<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml.LnkStf()
+	."#bvnr".$lfdnran."' title='Zum Grundbuchnachweis des dienenden Blattes'>".$blattart
+	." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
+
+	if ($bartkey < 2000){
+		// Link Buchung BVNR nur fÃŒr GrundstÃŒck usw.
+		echo "<br>\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bsan.LnkStf()
+		."' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>";	
+	}
+	echo "\n\t\t</p>"
+	."\n\t</td>\n</tr>";
+}
+
+// Start
 ini_set("session.cookie_httponly", 1);
 session_start();
@@ -57,7 +243,5 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Entwicklungsumgebung (in Conf definiert) ausschalten.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
@@ -112,18 +296,10 @@
 			}
 			echo "\n\t\t\t<tr>"
-				."\n\t\t\t<td class='head'>";
-				if ($showkey) {echo "<span class='key'>".$row["stellenart"]."&nbsp;</span>";}
-				echo $row["stellev"]."</td>";
-				echo "\n\t\t\t<td class='head'>Bezirk</td>"
-				."\n\t\t\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\t\t\t<td class='head'>".DsKy($row["stellenart"], 'Stellenart-*').$row["stellev"]."</td>"
+				."\n\t\t\t\t<td class='head'>Bezirk</td>"
+				."\n\t\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>".DsKy($blattkey, 'Blattart-*').$blattart."</td>"
 			."\n\t\t\t</tr>\n\t\t\t<tr>"
-				."\n\t\t\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\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\t\t<td title='Amtsgerichtsbezirk'>".DsKy($row["stelle"], 'Stelle-*').htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>"
+				."\n\t\t\t\t<td title='Grundbuchbezirk'>".DsKy($row["bezirk"], 'Grundbuchbezirk-*').htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>"
 				."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
 			."\n\t\t\t</tr>"
@@ -136,5 +312,5 @@
 	echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>";
 } else { // E I G E N T Ã M E R
-	$n = eigentuemer($gmlid, true, ""); // MIT Adressen.
+	$n = eigentuemer($gmlid, true, false); // MIT Adressen.
 	if ($n === 0) { // keine NamensNr, kein Eigentuemer
 		echo "\n<p class='err'>Keine Namensnummer gefunden.</p>"
@@ -240,5 +416,8 @@
 
 		$zeianz = bnw_fsdaten($gml_bs, true); // FlurstÃŒcksdaten zur direkten Buchungsstelle
-		if ($zeianz === 0) {echo "\n<tr class='".$trclass."'>\n\t<td></td>\n\t<td colspan='7'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n\t<td></td>\n</tr>";}
+		if ($zeianz === 0) {
+			echo "\n<tr class='".$trclass."'>\n\t<td><span class='wichtig'>".$lfdnr."</span></td>"
+			."\n\t<td colspan='7'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n\t<td></td>\n</tr>";
+		}
 
 	} else { // herrschende Buchung
@@ -291,16 +470,14 @@
 $zpaar=false;
 while($rowb = pg_fetch_assoc($resb)) {
-	if ($b === 0) { // Ueberschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
+	if ($b === 0) { // Ãberschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
 		echo "\n\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>"
-		."\n<table class='outer'>"
-		."\n<tr>"
-			."\n\t<td class='heads' title='lfd. Nr. auf diesem Blatt, wie im Teil Flurst&uuml;cke'><span class='wichtig'>an BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
-			."\n\t<td class='head'>Dienststelle</td>"
-			."\n\t<td class='heads'>Bezirk</td>"
-			."\n\t<td class='heads'><span class='wichtig'>Blatt</span></td>"
-			."\n\t<td class='heads'>BVNR</td>"
-			."\n\t<td class='head'>Buchungsart</td>"
-			."\n\t<td class='head nwlink noprint'>Weitere Auskunft</td>"
-		."\n</tr>";
+		."\n<table class='outer'>\n<tr>"
+		."\n\t<td class='heads' title='lfd. Nr. auf diesem Blatt, wie im Teil Flurst&uuml;cke'><span class='wichtig'>an BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
+		."\n\t<td class='head'>Dienststelle</td>"
+		."\n\t<td class='heads'>Bezirk</td>"
+		."\n\t<td class='heads'><span class='wichtig'>Blatt</span></td>"
+		."\n\t<td class='heads'>BVNR</td>"
+		."\n\t<td class='head'>Buchungsart</td>"
+		."\n\t<td class='head nwlink noprint'>Weitere Auskunft</td>\n</tr>";
 	}
 
@@ -324,27 +501,17 @@
 		."\n\t<td>"; // Amtsgericht,Grundbuchamt
 			echo htmlentities($rowb["stellev"], ENT_QUOTES, "UTF-8")." ";
-			if ($showkey) {echo "<span class='key'>".$rowb["stelle"]."</span> ";}
-			echo htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8")
+			echo DsKy($rowb["stelle"], 'Stelle-*').htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8")
 		."</td>"
-		."\n\t<td>";
-			if ($showkey) {echo "<span class='key'>".$rowb["bezirk"]."</span> ";}
-			echo htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")
-		."</td>"
+		."\n\t<td>".DsKy($rowb["bezirk"], 'Grundbuch-Bezirk-*').htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")."</td>"
 		."\n\t<td><span class='wichtig'>".$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 title='".htmlentities($rowb["bartd"], ENT_QUOTES, "UTF-8")."'>".DsKy($buch, 'Buchungsart-*').$bart."</td>"
 		."\n\t<td>"
 			."\n\t\t<p class='nwlink noprint'>";
-
 			// Bestand
-			if ($showkey) {echo "<span class='key'>".$blart."</span> ";}
-			echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b;
-				if ($showkey) {echo "&amp;showkey=j";}
-				echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"];
-				echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
-			echo "\n\t\t</p>"
+			echo "\n\t\t\t".DsKy($blart, 'Blattart-*')."<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b.LnkStf()
+			."#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]
+			." \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
+			."\n\t\t</p>"
 		."</td>"
 	."\n</tr>";
Index: /trunk/info/info/alkisn/alkisausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisausk.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisausk.php	(revision 427)
@@ -2,5 +2,7 @@
 /*	alkisausk.php
 
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
 	Dies Programm wird aus dem Mapserver-Template (FeatureInfo) aufgerufen.
 	Parameter: &gkz, &gml_id (optional &id)
@@ -14,8 +16,9 @@
 	2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
 	2020-12-15 Input-Validation und Strict Comparisation (===)
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 
 H i n w e i s :  Dies Modul wird beim Entwickler nicht mehr produktiv eingesetzt.
 		Statt dessen wird "alkisinlayausk.php" verwendet um von einer WMS-FeatureInfo in ein Fenster ÃŒberzuleiten.
-		Mangels Praxis bleiben Fehler mÃ¶glicherweise unerkannt.
+		Mangels Praxiseinsatz bleiben Fehler mÃ¶glicherweise unerkannt.
 */
 ini_set("session.cookie_httponly", 1);
@@ -45,10 +48,9 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
+$dbg=$debug;
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisausk.php'");
 if (!$con) {echo "<br>Fehler beim Verbinden der DB.\n<br>";}
 
-// *** F L U R S T U E C K ***
+// F L U R S T Ã C K 
 $sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung, f.gemeindezugehoerigkeit_regierungsbezirk, f.gemeindezugehoerigkeit_kreis, f.gemeindezugehoerigkeit_gemeinde
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
@@ -87,6 +89,6 @@
 	// Einer der gesetzten Filter passt nicht
 	if ($dbg > 2) {
-		echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>";
-		echo "\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
+		echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
+		."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
 	}
 	echo "\n<br><p class='stop1'>Zugriff nicht erlaubt</p>
@@ -96,20 +98,16 @@
 }
 
-echo "\n<table class='outer'>\n<tr><td>";
-	// linke Seite
-	echo "\n<h1>ALKIS-Auskunft</h1>"
+echo "\n<table class='outer'>\n<tr><td>"
+	."\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=''>"
+echo "</td><td align='right'>"
+	."<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 class='head'>Gemarkung</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'>".DsKy($gmkgnr, 'Gemarkungsnummer').$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>"
@@ -117,29 +115,25 @@
 ."\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 "
+// FlurstÃŒcksnachweis (o. Eigent.)
+echo "\n\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n".LnkStf()
+	."' 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 "
+echo "\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=j".LnkStf()
+	."' 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 "
+echo "\n\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf()
+	."' 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 "
+// GebÃ€ude-NW
+echo "\n\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf()
+	."' title='Geb&auml;udenachweis'>Geb&auml;ude "
 	."<img src='ico/Haus.png' width='16' height='16' alt=''>"
 ."</a>"
@@ -175,8 +169,8 @@
 echo "\n</tr>\n</table>";
 
-// Flurstuecksflaeche
+// FlurstÃŒcksflÃ€che
 echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".$flae."</b></p>";
 
-// *** G R U N D B U C H ***
+// 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.
@@ -218,13 +212,8 @@
 			."\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='Grundbuchbezirk'>".DsKy($rowg["bezirk"], 'Grundbuch-Bezirk-*').$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\t<td title='Buchungsart'>".DsKy($rowg["buchungsart"], 'Buchungsart-*').$rowg["bart"]."</td>"
 			."\n\t</tr>"
 		."\n\t</table>";
@@ -235,12 +224,10 @@
 		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\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$rowg[0].LnkStf()
+			."' 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
+	// E I G E N T Ã M E R
 	if ($blattkey === 5000) { // SchlÃŒssel Blatt-Art
 		echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt</p>\n"
@@ -248,5 +235,5 @@
 	} else { // kein Eigent. bei fiktiv. Blatt
 		// Ausgabe Name in Function
-		$n = eigentuemer($rowg["gml_id"], false, "imFenster"); // ohne Adressen
+		$n = eigentuemer($rowg["gml_id"], false, true); // ohne Adressen
 
 		if ($n === 0) { // keine NamNum, kein Eigent.
Index: /trunk/info/info/alkisn/alkisnamstruk.php
===================================================================
--- /trunk/info/info/alkisn/alkisnamstruk.php	(revision 426)
+++ /trunk/info/info/alkisn/alkisnamstruk.php	(revision 427)
@@ -1,7 +1,9 @@
 <?php
-/*	Modul: alkisnamstruk.php
-
-	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
-	Namens- und Adressdaten fuer einen Eigentuemer aus ALKIS PostNAS
+/*	alkisnamstruk.php
+
+	ALKIS-Auskunft
+	Author: Frank JÃ€ger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
+
+	Namens- und Adressdaten fÃŒr einen EigentÃŒmer aus ALKIS PostNAS
 
 	Version:
@@ -12,4 +14,5 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Gruppenwechsel Bezirk.
+	2022-01-13 Neue Functions LnkStf(), DsKy()
 */
 ini_set("session.cookie_httponly", 1);
@@ -54,11 +57,8 @@
 <?php
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-$dbg=$debug; // CONF in Arbeits-Variable
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+$dbg=$debug;
 if ($nodebug === "j") {$dbg=0;} 
 
-echo "<p class='balken nakennz'>ALKIS Name id=".$gmlid."&nbsp;</p>\n" // Balken
+echo "<p class='balken nakennz'>ALKIS Name id=".$gmlid."&nbsp;</p>\n"
 ."\n<h2><img src='ico/Eigentuemer.png' width='16' height='16' alt=''> Person</h2>";
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisnamstruk.php'");
@@ -94,7 +94,5 @@
 
 	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'>Anrede:</td><td class='nam'>".DsKy($anrk, '* der Anrede-Kennung').$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>"
@@ -143,7 +141,5 @@
  					}
 					echo "\t<tr><td class='nhd'>Datum:</td><td class='nam'>".$datum."</td></tr>\n"
-					."\t<tr><td class='nhd'>Anlass:</td><td class='nam'>";
-					if ($showkey) {echo "<span class='key'>".$anlass."</span> ";}
-					echo $anltxt."</td></tr>\n";
+					."\t<tr><td class='nhd'>Anlass:</td><td class='nam'>".DsKy($anlass, 'Anlass-*').$anltxt."</td></tr>\n";
 				}
 				echo "\t<tr><td class='nhd'>PLZ:</td><td class='nam'>".$plz."</td></tr>\n"
@@ -154,5 +150,5 @@
 			."\n</table>\n<br>";
 
-			// Name und Adresse Kompakt (im Rahmen) - Alles was man fuer ein Anschreiben braucht
+			// Name und Adresse Kompakt (im Rahmen) - Alles was man fÃŒr ein Anschreiben braucht
 			echo "\n<img src='ico/Namen.png' width='16' height='16' alt='Brief' title='Anschrift'>"
 			."\n<div class='adr' title='Anschrift'>\n\t".$anr." ".$aka." ".$vor." ".$nbest." ".$nam."<br>"
@@ -166,6 +162,5 @@
 	} elseif ($j > 1) {
 		echo "\n\t\t<p class='nwlink noprint'>"
-		."\n\t\t\t<a href='".selbstverlinkung(). "?gkz=".$gkz."&amp;gmlid=".$gmlid;
-		if ($showkey) {echo "&amp;showkey=j";}
+		."\n\t\t\t<a href='".selbstverlinkung(). "?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf();
 		if ($multiadress === "j") {
 			echo "&amp;multiadress=n' title='mehrfache Adressen unterdr&uuml;cken'>erste Adresse ";
@@ -177,5 +172,5 @@
 	}
 
-	// *** G R U N D B U C H ***
+	// 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>";
 	// person <benennt< namensnummer >istBestandteilVon>                Buchungsblatt
@@ -224,45 +219,36 @@
 		$zpaar=!$zpaar;
 		echo "\n<tr class='".$trclass."'>"
-			."\n\t<td>"; // GB-Bezirk <td class='gbl'>
-				if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span> ";}
-				if ($gwbeznam != $beznam){
-					echo "<b>".$beznam."</b>";
-					$gwbeznam=$beznam;
-				} else {
-					echo $beznam;
-				}
+			."\n\t<td>".DsKy($rowg["bezirk"], 'Grundbuch-Bezirks-*');
+			if ($gwbeznam != $beznam){
+				echo "<b>".$beznam."</b>";
+				$gwbeznam=$beznam;
+			} else {
+				echo $beznam;
+			}
 			echo "</td>";
 
-			echo "\n\t<td>"; // Blattart
-				if ($showkey) {echo "<span class='key'>".$blattkey."</span> ";}
-				echo $blattart
-			."</td>";
-
-			echo "\n\t<td>"; // Blatt
-				echo "<span class='wichtig'>".$rowg["nr"]."</span>"
-			."</td>";
+			echo "\n\t<td>".DsKy($blattkey, 'Blattart-*').$blattart."</td>";
+			echo "\n\t<td><span class='wichtig'>".$rowg["nr"]."</span></td>";// Blatt
 
 			echo "\n\t<td>"; // Namensnummer
-				if ($namnum == "") {
-					echo "&nbsp;";
-				} else {
-					echo $namnum;
-				}
+			if ($namnum == "") {
+				echo "&nbsp;";
+			} else {
+				echo $namnum;
+			}
 			echo "</td>";
 
 			echo "\n\t<td>"; // Anteil
-				if ($zae == '') {
-					echo "&nbsp;";
-				} else {
-					echo $zae."/".$rowg["nenner"]." Anteil";
-				} 
+			if ($zae == '') {
+				echo "&nbsp;";
+			} else {
+				echo $zae."/".$rowg["nenner"]." Anteil";
+			} 
 			echo "</td>"
 			."\n\t<td>"
-				."\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\t<p class='nwlink noprint'>"
+				."\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg.LnkStf()."' 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>";
