Index: trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.php	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav_eig.php	(revision 376)
@@ -4,7 +4,8 @@
 
  Version vom
-	2016-02-11	Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
-	2016-03-02  $gemeinde auf feste LÃ€nge korrigieren
-	2016-07-18	Personendaten: Zeilen getauscht. Wie Brief-Anschrift.
+	2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-03-02 $gemeinde auf feste LÃ€nge korrigieren
+	2016-07-18 Personendaten: Zeilen getauscht. Wie Brief-Anschrift.
+	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 */
 
@@ -18,15 +19,14 @@
 include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
 include("alkisnav_fkt.php"); // Funktionen
-$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password;
-$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$gkz);
+$con = pg_connect ($dbconn) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbpre.$dbgkz);
 
 echo <<<END
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
+<!doctype html>
+<html lang="de">
 <head>
 	<meta http-equiv="cache-control" content="no-cache">
 	<meta http-equiv="pragma" content="no-cache">
 	<meta http-equiv="expires" content="0">
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta charset="utf-8">
 	<title>ALKIS-Suche Eigent&uuml;mer</title>
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
Index: trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.php	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav_adr.php	(revision 376)
@@ -1,15 +1,10 @@
 <?php
-/* Version vom 
-	2013-04-26	"import_request_variables" entfÃ€llt in PHP 5.4.
-				ZurÃŒck-Link, Titel der Transaktion anzeigen
-	2013-04-29	Test mit IE
-	2013-05-07	Strukturierung des Programms
-	2013-05-14	Feinkorrekturen
-	2013-05-15	Gruppierung nach Gemeinde, mehrfache HsNr (ap_pto.advstandardmodell) unterdrÃŒcken, Icon f. StraÃe
-	2014-01-23	Link zum Auskunft-Modul fÃŒr StraÃe
-	2014-09-03	PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
-	2014-09-15	Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL"
-	2014-09-30	RÃŒckbau substring(gml_id)
-	2015-12-10	Umstellen .ico auf .png, Vermeidung nicht initialisierter Variable
+/*	Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil Adressen-Suche 
+	Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
+
+Version vom 
+	2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-03-02 $gemeinde auf feste LÃ€nge korrigieren
+	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 
 	ToDo:
@@ -27,18 +22,17 @@
 
 $cntget = extract($_GET);
+$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÃ€r
 include("../../conf/alkisnav_conf.php");
 include("alkisnav_fkt.php"); // Funktionen
-$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
-$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$$dbname.$dbvers.$gkz);
+$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz);
 
 echo <<<END
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
+<!doctype html>
+<html lang="de">
 <head>
 	<meta http-equiv="cache-control" content="no-cache">
 	<meta http-equiv="pragma" content="no-cache">
 	<meta http-equiv="expires" content="0">
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta charset="utf-8">
 	<title>ALKIS-Suche Adressen</title>
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
@@ -63,11 +57,16 @@
 END;
 
-function suchStrName() { // Strassen nach Name(-nsanfang)
+function suchStrName() {
+	// Strassen nach Name(-nsanfang)
 	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
-	$linelimit=120;  // -> in die Conf?
-	$str_schl=""; // Loeschen vorheriges Ergebnis
-	preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3];
+	//if ($debug > 1) {echo "<p class='dbg'>function suchStrName()<p>";} // Ablauf-Verfolgung
+
+	$linelimit=120;  // -> in Conf?
+	$str_schl=""; // Loeschen vorh. Ergebnis
+	preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz 
+	//echo "match: 1='".$matches[1]."', 2='".$matches[2]."', 3='".$matches[3]."'";
 	$matches[1] = preg_replace("/strasse/i","str", $matches[1]);
 	$matches[1] = preg_replace("/str\./i","str", $matches[1]); 
+
 	if(preg_match("/\*/",$matches[1])){
 		$match=trim(preg_replace("/\*/i","%", strtoupper($matches[1])));
@@ -75,8 +74,10 @@
 		$match=trim($matches[1])."%";
 	}
+
 	$sql ="SELECT g.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage 
 	FROM ax_lagebezeichnungkatalogeintrag k 
 	JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde 
 	WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";
+
 	switch ($gfilter) {
 		case 1: // Einzelwert
@@ -114,24 +115,16 @@
 		$skey=$row["lage"]; // Nur Str.-schl. daraus
 		$kgml=$row["gml_id"]; // ID von Katalog
-
-// +++ in function_zeile_strasse()
-		$sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");	
-		echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
-		// Icon -> Buchnachweis
-		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Lage_mit_Haus.png' width='16' height='16' alt='STR' title='Stra&szlig;e'>";
-		echo "\n\t</a>";
-		echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."'>".$sname."</a>";
-		echo "</div>";
-// +++ function ende
+		$sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		zeile_strasse ($gkey, $skey, $sname, $kgml, $gemname);
 		$cnt++;
 	}
 
 	if($cnt == 0) {
-		echo "<pclass='anz'>Keine Stra&szlig;e</p>";
+		echo "\n<p class='anz'>Keine Stra&szlig;e</p>";
+		//if ($debug > 2) {echo "<p class='err'>SQL = '".$sql."'<br>$1 = '".$match."'<p>";}
 	} elseif($cnt == 1) { // Eindeutig
 		$str_schl=$gkey; // dann gleich weiter
 	} elseif($cnt >= $linelimit) {
-		echo "<p class='anz'>".$cnt." Stra&szlig;en ... und weitere</p>";			
+		echo "\n<p class='anz'>".$cnt." Stra&szlig;en ... und weitere</p>";			
 	} elseif ($cnt > 1) {
 		echo "\n<p class='anz'>".$cnt." Stra&szlig;en</p>";	
@@ -142,4 +135,5 @@
 function suchStrKey() { // Strassen nach num. Schluessel
 	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
+	//if ($debug > 1) {echo "<p class='dbg'>function suchStrKey()<p>";} // Ablauf-Verfolgung
 	$linelimit=60;
 	if(preg_match("/\*/",$street)) {
@@ -177,26 +171,5 @@
 		$skey=$row["lage"];
 		$kgml=$row["gml_id"]; // ID von Katalog	
-		
-// +++ in function_zeile_strasse()
-		echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
-
-			// Icon -> Buchnachweis
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/Lage_mit_Haus.png' width='16' height='16' alt='STR' title='Stra&szlig;e'>";
-			echo "\n\t</a>";
-		
-			echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='".$gemname."'>".$sname;
-			echo "</a>";
-			switch ($gfilter) {
-				case 0: // Kein Filter
-					echo " in ".$gemname;
-					break;
-				case 2: // Liste
-					echo " in ".$gemname;
-					break;
-			}
-		echo "</div>";
-// function ende
-
+		zeile_strasse ($gkey, $skey, $sname, $kgml, $gemname);
 		$cnt++;
 	}
@@ -215,4 +188,5 @@
 function suchHausZurStr($showParent) { // Haeuser zu einer Strasse
 	global $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
+	//if ($debug > 1) {echo "<p class='dbg'>function suchHausZurStr()<p>";} // Ablauf-Verfolgung
 
 	// Head
@@ -256,4 +230,5 @@
 			$sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";	
 			$sqlko.="LIMIT 1;"; // die erstbeste Koordinate
+
 			$v=array($land,$regb,$kreis,$gemnd,$nr);
 			$resko=pg_prepare("", $sqlko);
@@ -267,4 +242,5 @@
 			}
 
+			// "function zeile_strasse()" hier nicht verwendbar. ZusÃ€tzlicher Map-Link mit Koordinate 
 			// Icon -> Buchnachweis
 			echo "\n\t<br><a href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>";
@@ -371,4 +347,6 @@
 	$epsg=$gui_epsg; // aus Conf
 }
+
+// Filter auf Zustaendigkeit z.B. ein Stadtgebiet
 if ($gemeinde == "") {
 	$gfilter = 0; // ungefiltert
@@ -378,16 +356,19 @@
 	$gfilter = 2; // Liste
 }
-
-// +++	Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage":
-//		Numerisch: Gem-Str-Haus-lfd
-
-if ($str_schl != "") { // aus Link
+// ax_lagebezeichnungkatalogeintrag.gemeinde: z.B. Classic='40' / NorBit  = '040'
+// Im Mapbender mit fuehrenden Nullen eingeben: gazetteer_alkis.SRC
+// alkisnav.htm?..&gemeinde=040&..
+
+// +++Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage": Numerisch: Gem-Str-Haus-lfd
+
+if ($str_schl != "") { // Wert kommt aus aus Link
 	$trans="Hausnummern zur Stra&szlig;e";
 	suchHausZurStr(true);
-} elseif($street != "") { // Eingabe in Form
-	if (trim($street, "*,0..9") == "") { // Zahl, ggf. mit Wildcard
+// Wert aus Eingabe in Formular
+} elseif($street != "") { 
+	if (trim($street, "*,0..9, ") == "") { // Zahl, ggf. mit Wildcard
 		$trans="Suche Stra&szlig;enschl&uuml;ssel \"".$street."\"";
 		suchStrKey();
-	} else {
+	} else { // Name suchen
 		$trans="Suche Stra&szlig;enname \"".$street."*\"";
 		suchStrName();
@@ -402,5 +383,5 @@
 
 // Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion 
-// im Kopf des Ergebnisrahmens anzeigen.
+//  im Kopf des Ergebnisrahmens anzeigen.
 // Dazu die im HTML-Header definierte Javascript-Function benutzen.
 // Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
Index: trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.php	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav_grd.php	(revision 376)
@@ -1,17 +1,10 @@
 <?php
-/* Version vom
-	2013-04-16	"import_request_variables" entfÃ€llt in PHP 5.4
-	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
-				Code aus _eig nach_fkt ausgelegert, hier mit nutzen. 
-				Dazu Var-Namen harmonisieren: $gblatt wird $blattgml
-				ZurÃŒck-Link, Titel der Transaktion anzeigen.
-	2013-04-29	Test mit IE
-	2013-05-07	Strukturierung des Programms, redundanten Code in Functions zusammen fassen
-	2013-05-14	Hervorhebung aktuelles Objekt. Title "Nachweis" auch auf Icon.
-	2013-12-12	Limit in EinBlatt von 200 weit hoch gesetzt (bis BlÃ€ttern mÃ¶glich wird)
-	2014-09-03	PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
-	2014-09-15	Bei Relationen den Timestamp abschneiden
-	2014-09-30	RÃŒckbau substring(gml_id)
-	2015-12-10	Umstellen .ico auf .png, Vermeidung nicht initialisierter Variable
+/*	Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil Grundbuch-Suche 
+	Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
+
+Version vom
+	2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-03-02 $gemeinde auf feste LÃ€nge korrigieren
+	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 */
 
@@ -23,18 +16,17 @@
 
 $cntget = extract($_GET);
+$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÃ€r ..
 include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
 include("alkisnav_fkt.php"); // Funktionen
-
-$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
-$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
+$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz);
 
 echo <<<END
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
+<!doctype html>
+<html lang="de">
 <head>
 	<meta http-equiv="cache-control" content="no-cache">
 	<meta http-equiv="pragma" content="no-cache">
 	<meta http-equiv="expires" content="0">
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta charset="utf-8">
 	<title>ALKIS-Suche Grundbuch</title>
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
@@ -63,5 +55,5 @@
 
 function ListAG($liste_ag, $aktuell) {
-	// Amtsgerichte (Grundbuch) auflisten, dazu als Filter eine AG-Liste
+	// Amtsgerichte (Grundbuchamt) auflisten, dazu als Filter die AG-Liste aus Conf-Datei verwenden.
 	global $debug;
 	$linelimit=40;
@@ -97,6 +89,6 @@
 function ListGBBez($agkey) {
 	// Grundbuch-Bezirke zu einem Amtsgericht auflisten.
-	// Auch wenn BlÃ€tter da sind, kann es eine Sackgasse sein. 
-	// Manchmal haben die BlÃ€tter keine FlurstÃŒcke im Filter-Bereich
+	// Auch wenn BlÃ€tter vorhanden sind, kann es eine "Sackgasse" sein.
+	// Manchmal haben die BlÃ€tter keine FlurstÃŒcke im Filter-Bereich (Gemeinde).
 	global $debug;
 	$linelimit=100; // Bezirke/AG
@@ -140,5 +132,5 @@
 
 function ag_bez_head($gbbez, $bezaktuell) {
-	// Zu einem Grundbuchbezirks-SchlÃŒssel die Zeilen AG und Bezirk ausgeben
+	// Zu einem Grundbuchbezirks-SchlÃŒssel die Zeilen "AG" und "Bezirk" ausgeben
 	// Parameter = SchlÃŒssel des Bezirks
 	#global $debug;
@@ -304,5 +296,5 @@
 	if ($showParent) {
 		ag_bez_head($zgbbez, false); // AG + BEZ
-		zeile_blatt ($zgbbez, $gbbeznam, $blattgml, $zblatt, false, "", true);
+		zeile_blatt ($zgbbez, "", $blattgml, $zblatt, false, "", true);
 	}
 	// Body
@@ -381,5 +373,5 @@
 	// Body
 	// Anfang (Select-Liste) gleich 
-	$sqlanf ="SELECT g.gemeinde, g.gemarkungsname, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
+	$sqlanf ="SELECT g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
 	if($epsg == "25832") { // Transform nicht notwendig
 		$sqlanf.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
@@ -393,11 +385,11 @@
 	switch ($gfilter) { // Filter Gemeinde
 		case 1: // Einzel
-			$sqlfitler="AND g.gemeinde='".$gemeinde."' "; break;
+			$sqlfitler="AND f.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sqlfilter="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
+			$sqlfilter="AND f.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
 	}
 
 	// Direkte Buchungen (Flurst.)
-	$sql =$sqlanf."FROM ax_flurstueck f JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	$sql =$sqlanf."FROM ax_flurstueck f JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
 	$sql.="WHERE f.istgebucht = $1 AND f.endet IS NULL ".$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
 
@@ -414,6 +406,5 @@
 	while($row = pg_fetch_array($res)) {	
 		$fs_gml=$row["gml_id"];
-		$gemei=$row["gemeinde"];
-		$gmkg=$row["gemarkungsname"];
+		$gmkg=$row["bezeichnung"];
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
@@ -424,5 +415,5 @@
 	// Zwischen-Foot
 	if($zfs1 == 0) {
-		echo "\n<p class='anz'>Kein Flurst&uuml;ck direkt</p>";
+		echo "\n<p class='anz'>Kein Flurst&uuml;ck zu dieser Buchung</p>";
 	} elseif($zfs1 > 1) {
 		echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke</p>";
@@ -433,4 +424,5 @@
 
 	// Recht "an" (dienende Buchungen und ihre Flurst.)
+
 $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, 
 bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, 
@@ -439,8 +431,9 @@
 JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) 
 JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id 
-JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung 
+JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
 JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id 
 JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk 
 WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL "
+
 .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
 
@@ -457,13 +450,18 @@
 	$gwblatt="";
 	while($row = pg_fetch_array($res)) {
-		$dienstelle=$row["stelle"];	// Stelle (AG) des dienenden GrundstÃŒcks
-		$dienbezgml=$row["dienbezgml"];	// Bezirks des dien. GS: gml, Nr. und Bezeichnung
+		$dienstelle=$row["stelle"];	// Stelle (AG) des dien. Grdst.
+		$dienbezgml=$row["dienbezgml"];	// Bezirk des dien. GS: gml, Nr. und Bezeichnung
 		$diengbbez=$row["diengbbez"];	// Bezeichnung
 		$dienbezirk=$row["bezirk"];	// Key
-		$dienbltgml=$row["dienbltgml"];	// dienendes Blatt, gml und Nr
+		$dienbltgml=$row["dienbltgml"];	// dien. Blatt, gml und Nr
 		$dienblatt=$row["dienblatt"];
-		$diengml=$row["diengml"];	// gml_id des dienenden GrundstÃŒcks
+		$diengml=$row["diengml"];	// gml_id des dien. Grdst.
 		$dienlfd=$row["dienlfd"];	// BVNR (laufendNr) des dien. GS
-		if ($gwblatt != $dienblatt) { // Gruppierung Blatt - dienend
+		if ($gwblatt != $dienblatt) { // Grupp. Blatt - dien.
+			if ($gwblatt == "") { // der erste "dienende": Einleitungs-Zeile
+				$aber="";
+				if($zfs1 == 0) {$aber="Aber ein ";} 
+				echo "\n<p class='anz' title='Die oben genannte Buchung hat ein Recht an den folgenden Buchungen'>".$aber."Recht an ..</p>";
+			}
 			$gwblatt = $dienblatt; // Steuerg GW Blatt
 			zeile_blatt($dienbezirk, $diengbbez, $dienbltgml, $dienblatt, true, "", false);
@@ -475,6 +473,5 @@
 		} // ++ Buchungsart? Welches Recht?
 		$fs_gml=$row["gml_id"];
-		$gemei=$row["gemeinde"];
-		$gmkg=$row["gemarkungsname"];
+		$gmkg=$row["bezeichnung"];
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
@@ -505,4 +502,5 @@
 }
 
+// Filter aus Conf-Datei
 if ($gemeinde == "") {
 	$gfilter = 0; // ungefiltert
@@ -514,9 +512,10 @@
 }
 
-// Auch wenn redundant: Das Kennzeichen fÃŒr Anzeige und weitere Links zerlegen
+// Das eingegebene Kennzeichen fÃŒr "Anzeige" und "weitere Links" zerlegen,
+// auch wenn ÃŒber einen ein Self-Link mit gml_id aufgerufen.
 $kennztyp=ZerlegungGBKennz($gbkennz);
 
 // Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet?
-// Dann hat das Prioritaet, also *nicht* nach $gbkennz suchen.
+// Dann hat DAS PrioritÃ€t, dann also *nicht* nach $gbkennz suchen.
 if ($buchunggml != "") { // gml der Buchungsstelle
 	$trans="Flurst&uuml;cke zur Buchungsstelle"; // Link
@@ -531,7 +530,6 @@
 	ListGBBez($ag);
 
-} else { // Eingabe im Formular
-
-	switch ($kennztyp) {
+} else { // kein Self-Link sondern manuelle Eingabe im Formular
+	switch ($kennztyp) { // wurde oben bereits analysiert und zerlegt
 		case 0: // keine Eingabe
 			$trans="Liste der Amtsgerichte";
@@ -541,21 +539,21 @@
 			$trans="Bezirke suchen \"".$gbkennz."\"";
 			$beznr=SuchGBBezName();
-			if ($beznr > 0) {  // eindeutig
+			if ($beznr > 0) {  // wenn der Suchbegriff eindeutig war, ..
 				$zgbbez=$beznr;
 				$trans="Bezirk gefunden, Bl&auml;tter dazu";
-				EinBezirk(false); // gleich weiter
+				EinBezirk(false); // .. dann gleich weiter
 			};
 			break;
-		case 2: // Eingabe Bezirk-Nummer -> Liste der BlÃ€tter
+		case 2: // Eingabe Bezirk-Nummer -> Liste der BlÃ€tter im Bezirk
 			$trans="Bl&auml;tter im GB-Bezirk";
 			EinBezirk(true);
 			break;
-		case 3: // Eingabe Blatt -> Liste der Buchungen
+		case 3: // Eingabe GB-Blatt -> Liste der Buchungen auf dem Blatt
 			$trans="Buchungen auf GB-Blatt";
 			$blattgml=gml_blatt(); // gml_id zum Blatt suchen
 			if ($blattgml != "") { // gefunden		
-				if (EinBlatt(true) == 1) { // darauf genau eine Buchung
-					$trans="GB-Blatt und 1 Buchung";
-					$buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen
+				if (EinBlatt(true) == 1) { // wenn darauf genau eine Buchung ist
+					$trans="GB-Blatt und 1 Buchung"; // dann gleich tiefer rein
+					$buchunggml=gml_buchungsstelle(); // gml_id der Buchung
 					EinGrundstueck(false);
 				}
@@ -579,5 +577,5 @@
 
 // Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion 
-// im Kopf des Ergebnisrahmens anzeigen.
+//  im Kopf des Ergebnisrahmens anzeigen.
 // Dazu die im HTML-Header definierte Javascript-Function benutzen.
 // Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
Index: trunk/mapbender/http/nav/alkisnav.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav.htm	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav.htm	(revision 376)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
+<!-- Vorsicht mit HTML5: Frame-Hoehe geht verloren -->
 <head>
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta charset="utf-8">
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
 	<script type="text/javascript" language="JavaScript">
Index: trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 376)
@@ -1,12 +1,10 @@
 <?php
-/* Version vom 
-	2013-05-07	Strukturierung des Programms, redundanten Code in Functions zusammen fassen
-	2013-05-14	Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
-	2013-05-15	Function verlegt
-	2014-02-06	Korrektur zeile_person
-	2014-09-03	PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
-	2014-09-15	Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL"
-	2014-09-30	RÃŒckbau substring(gml_id)
-	2015-12-10	Umstellen .ico auf .png, Vermeidung nicht initialisierter Variable
+/*	Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil "Funktionen"
+	(Wird nicht direkt aufgerufen sonden in den anderen Modulen eingebunden).
+	Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
+
+Version vom 
+	2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 */
 
@@ -87,5 +85,6 @@
 // Hierin die Encodierung fÃŒr url und HTML.
 
-function zeile_ag ($ag, $anr, $aktuell) {	// Zeile  A m t s g e r i c h t
+function zeile_ag ($ag, $anr, $aktuell) {
+	// Zeile  A m t s g e r i c h t
 	global $gkz, $gemeinde, $epsg, $auskpath;
 	if ($ag == "") {
@@ -103,5 +102,6 @@
 }
 
-function zeile_gbbez ($gnam, $zgbbez, $aktuell) {	// Zeile Grundbuch - B e z i r k
+function zeile_gbbez ($gnam, $zgbbez, $aktuell) {
+	// Zeile Grundbuch - B e z i r k
 	// Parameter: aktuell = Bool fÃŒr farbliche Markierung der Zeile als aktuell angeklicktes Obj.
 	global $gkz, $gemeinde, $epsg, $person;
@@ -124,6 +124,10 @@
 
 function zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, $dienend, $person, $aktuell) {
+	// Zeile Grundbuch - B l a t t
+	// Aufruf aus Teil "Grundbuch" und Teil "EigentÃŒmer"
+	// Parameter $beznam = Name des GB-Bezirks. Sollte nur gefÃŒllt sein, bei dienendem Blatt ("Recht an").
+	//		sonst steht der Bezirk als Header-Zeile darÃŒber.
 	global $gkz, $gemeinde, $epsg, $auskpath;
-	// Zeile Grundbuch - B l a t t
+
 	$blattd=ltrim($blatt, "0"); // Display-Version ohne fÃŒhrende Nullen
 	if ($dienend) {$dientxt="dienendes ";} else {$dientxt="";}
@@ -136,5 +140,5 @@
 	// Icon / Nachweis
 	if ($blattgml == "") { // Link zum Nachweis nur wenn GML bekannt
-		echo "\n\t<img class='nwlink' src='ico/GBBlatt_link.png' width='16' height='16' alt='Blatt' title='".$dientxt."GB-Blatt'>";
+		echo "\n\t<img class='nwlink' src='ico/GBBlatt.png' width='16' height='16' alt='Blatt' title='".$dientxt."GB-Blatt'>";
 	} else {
 		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$blattgml."\")'>";
@@ -156,7 +160,9 @@
 function zeile_buchung($buchunggml, $bvnr, $blattkennz, $dienend, $aktuell) {
 	// Zeile  B u c h u n g s s t e l l e  -  GrundstÃŒck ausgeben
-	global $gkz, $gemeinde, $epsg, $auskpath;
-	if ($bvnr == 0) {
-		$bvnra = "-";
+	global $gkz, $gemeinde, $epsg, $auskpath, $debug;
+	//if ($debug > 1) {echo "<p class='dbg'>function zeile_buchung()<p>";} // Ablauf-Verfolgung
+
+	if ($bvnr == 0) { // Keine echten BVNR vergeben (z.B. Lippe)
+		$bvnra = "-"; // Fehlanzeige
 	} else {
 		$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
@@ -184,5 +190,5 @@
 
 function zeile_gemeinde ($gmdnr, $gmdname, $aktuell) {
-	// Eine Zeile zu Gemeinde ausgeben, SchlÃŒssel und Name wird ÃŒbergeben
+	// Eine Kopf-Zeile zu Gemeinde ausgeben
 	global $gkz, $gemeinde, $epsg;
 	$stadt=htmlentities($gmdname, ENT_QUOTES, "UTF-8");
@@ -192,5 +198,31 @@
 		echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.png' width='16' height='16' alt='Stadt'>";
 		echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gmdnr."&amp;bez=".$bez."'>";		
-		echo  " ".$stadt."</a> (".$gmdnr.")";
+		echo  " ".$stadt."</a> (".substr($gmdnr, 5).")";
+	echo "\n</div>";
+	return;
+}
+
+function zeile_gemarkung($gkgnr, $gkgname, $aktuell) {
+	// Eine Kopf-Zeile zur Gemarkung ausgeben
+	global $con, $gkz, $gemeinde, $epsg, $gfilter;
+
+	if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
+		$sql ="SELECT bezeichnung FROM ax_gemarkung WHERE gemarkungsnummer = $1 LIMIT 1;";
+		$v=array($gnr);
+		$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkungsname.</p>";}
+		$row = pg_fetch_array($res);
+		$gkgname=$row["bezeichnung"];
+	}
+
+	if ($gkgname == "") {$gkgname = "(unbekannt)";}
+	$gnam=htmlentities($gkgname, ENT_QUOTES, "UTF-8");
+	if ($aktuell) {$cls=" aktuell";} else {$cls="";}
+
+	echo "\n<div class='gk".$cls."' title='Gemarkung'>";
+	echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.png' width='16' height='16' alt='GKG' title='Gemarkung'>";
+	echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."'>";		
+	echo  " ".$gnam."</a> (".substr($gkgnr, 2).")";
 	echo "\n</div>";
 	return;
@@ -226,6 +258,7 @@
 
 function zeile_person ($persongml, $nachname, $vorname) {
+	// Zeile  P e r s o n (oder Firma)
 	global $gkz, $gemeinde, $epsg, $auskpath;
-	// Zeile  P e r s o n (oder Firma)
+
 	$nnam=htmlentities($nachname, ENT_QUOTES, "UTF-8");
 	$namlnk=urlencode($nachname);
@@ -240,4 +273,31 @@
 </div>";
 return;
+}
+
+function zeile_strasse ($gkey, $skey, $sname, $kgml, $gemname) {
+	// Listen-Zeile (nicht Kopfzeile) fÃŒr eine gefundenen StraÃe ausgeben.
+	// Die Kopfzeile ÃŒber den Hausnummern hat einen zusÃ€tzlichen Koordinaten-Map-Link, das ist in der Liste zu aufwÃ€ndig?
+	global $gkz, $gemeinde, $epsg, $auskpath, $gfilter, $debug;
+	//if ($debug > 1) {echo "<p class='dbg'>function zeile_strasse()<p>";} // Ablauf-Verfolgung
+
+	echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
+
+	// Icon -> Buchnachweis
+	echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Lage_mit_Haus.png' width='16' height='16' alt='STR' title='Auskunft Stra&szlig;e'>";
+	echo "\n\t</a>";
+	// Zeile -> Suche HsNr
+	echo " <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='in ".$gemname."'>".$sname;
+	echo "</a> (".$skey.")";
+
+	// Die Gemeinde dahinter falls mehrere mÃ¶glich
+	switch ($gfilter) {
+		case 0: // Kein Filter
+			echo " in ".$gemname; break;
+		case 2: // Liste
+			echo " in ".$gemname; break;
+	}
+	echo "</div>";
+	return;
 }
 
@@ -257,5 +317,5 @@
 		$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";			
 	}
-	$sql1.="g.gemarkung, g.gemarkungsname FROM ax_buchungsstelle s1 "; 
+	$sql1.="g.bezeichnung FROM ax_buchungsstelle s1 "; 
 
 	// zwischen, Variante 1.
@@ -267,11 +327,12 @@
 
 	// hinten gleich
-	$sql2="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung 
+	$sql2="JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
 	WHERE s1.istbestandteilvon = $1 AND f.endet IS NULL AND s1.endet IS NULL ";
+
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql2.="AND g.gemeinde='".$gemeinde."' "; break;
+			$sql2.="AND f.gemeinde='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql2.="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
+			$sql2.="AND f.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
 	}
 
@@ -301,5 +362,5 @@
 		}
 		$fs_gml=$row["gml_id"];
-		$gmkg=$row["gemarkungsname"];
+		$gmkg=$row["bezeichnung"];
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
@@ -339,5 +400,5 @@
 		}
 		$fs_gml=$row["gml_id"];
-		$gmkg=$row["gemarkungsname"];
+		$gmkg=$row["bezeichnung"];
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
Index: trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.php	(revision 374)
+++ trunk/mapbender/http/nav/alkisnav_fls.php	(revision 376)
@@ -1,21 +1,12 @@
 <?php
-/* Version vom
-	2013-04-16	"import_request_variables" entfÃ€llt in PHP 5.4, 
-				Fehlerkorrektur Komma in SQL bei FS-Suche.
-	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
-				ZurÃŒck-Link, Titel der Transaktion anzeigen
-	2013-04-29	Test mit IE
-	2013-05-07	Strukturierung des Programms, redundanten Code in Functions zusammen fassen
-	2013-05-14	Variablen-Namen geordnet, Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
-	2013-10-15	missing Parameter
-	2014-09-03	PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
-	2014-09-15	Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL"
-	2014-12-11	Fehlerbehandlung bei Eingabe ungÃŒltiger Gemarkungsnummer. Tabellen pp_gemarkung und pp_flur verwenden.
-	2015-06-11	EineFlur, Limit fÃŒr Flurstuecke von 600 auf 900 erhoeht
-	2015-12-10	Umstellen .ico auf .png,
-				Vermeidung nicht initialisierter Variable. Somit ausfÃŒhrbar mit php.ini-Einstellungen:
-				- error_reporting = E_ALL | E_STRICT
-				- display_errors = on
-				.. ohne stÃ¶rende Meldungen.
+/*	Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil FlurstÃŒck-Suche 
+	Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
+
+Hinweis: In der Mapbender-Konfiguration muss die Gemeindenummer nun 3stellig mit fÃŒhrenden 0 angegeben sein. 
+
+Version vom
+	2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-03-02 $gemeinde auf feste LÃ€nge korrigieren
+	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 */
 
@@ -25,17 +16,17 @@
 
 $cntget = extract($_GET);
+$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÃ€r bei Umstellung auf norGIS, besser im Mapbender 3stellig konfigurieren.
 include("../../conf/alkisnav_conf.php");
 include("alkisnav_fkt.php"); // Funktionen
-$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
-$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
+$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz);
 
 echo <<<END
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
+<!doctype html>
+<html lang="de">
 <head>
 	<meta http-equiv="cache-control" content="no-cache">
 	<meta http-equiv="pragma" content="no-cache">
 	<meta http-equiv="expires" content="0">
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<meta charset="utf-8">
 	<title>ALKIS-Suche Flurst&uuml;ck</title>
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
@@ -62,5 +53,5 @@
 function h_hinten($zahl) {
 	// Testen: Wurde an eine Zahl ein "h" angehÃ€ngt?
-	// Wenn ja, dann Schalter setzen und nur numerischen Teil zurÃŒck geben.
+	// Wenn ja, dann Schalter setzen und nur den numerischen Teil zurÃŒck geben.
 	global $phist, $debug;
 	$zahl=trim($zahl);
@@ -80,9 +71,16 @@
 
 function ZerlegungFsKennz($fskennz) {
-	// Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn
-	// Teile der Zerlegung in global-Vars "$z..."
-	global $debug, $zgemkg, $zflur, $zzaehler, $znenner;	
+	// Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird (ll)gggg-fff-zzzz/nnn
+	// Die Teile der *Z*erlegung werden ÃŒber die Global-Variablen "$z..." allen Functions bereit gestellt.
+	// Der Returncode dieser Function steuert die weitere Verarbeitung.
+	global $debug, $land, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner;	
 	$arr = explode("-", $fskennz, 4); // an den Trenn-Strichen aufteilen
-	$zgemkg=trim($arr[0]);
+
+	// Gemarkung mit oder ohne Land davor? In der Eingabe soll beides zulÃ€ssig sein.
+	// Bei den SQL-Abfragen in der norGIS-ALKIS-Importer Datenbankstruktur werden abwechselnd beide
+	// Formate benÃ¶tigt: z.B. ax_gemarkungsteilflur.gemarkung -> 4stellig, gema_shl.gemashl -> 6stellig
+	// Also gleich beide Formate vorhalten.
+	$gemkg=trim($arr[0]);
+
 	if (count($arr) > 1) {
 		$zflur=h_hinten($arr[1]);
@@ -96,18 +94,37 @@
 		$zfsnr="";
 	}
-	if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$zgemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";}
-	if ($zgemkg == "") {
+	if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$gemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";}
+
+	if ($gemkg == "") {
 		return 0; // Gemeinden oder Gemarkungen listen
-	} elseif ( ! is_ne_zahl($zgemkg)) {
+	} elseif ( ! is_ne_zahl($gemkg)) {
 		return 1; // Such Name
-	} elseif ($zflur == "") {
-		return 2; // G-Nr
+	}
+
+	// Gemarkungs-NUMMER wurde eingegeben. Mit oder ohne Land davor?
+	if (strlen($gemkg) == 4 ) { // Eingabe ohne Land
+		$zgemkg4=$gemkg;		// 4stellige Version ohne Land
+		$zgemkg6=$land.$gemkg;	// 6stellige Version mit  Land
+	} elseif (strlen($gemkg) == 6 ) { // Eingabe mit Land
+		$zgemkg4=substr($gemkg, 2);
+		$zgemkg6=$gemkg;
+		if (substr($gemkg, 0, 2) != $land) { // Passt Eingabe zu Conf?
+			echo "<p class='err'>Die 6-stellige Gemarkungsnummer '".$zgemkg6."' sollte mit Land '".$land."' beginnen.</p>";
+		}
+	} else { // weder noch
+		$zgemkg4=$gemkg; // kann eigentlich nicht funktionieren
+		$zgemkg6=$gemkg; // Nullen davor setzen?
+		echo "<p class='err'>Die Gemarkungsnummer kann 4- oder 6-stellig (mit Land '".$land."') eingegeben werden.</p>";
+	}
+
+	if ($zflur == "") { // keine Eingabe Flur-Nummer
+		return 2; // also nur Gemarkungs-Nr eingegeben
 	} elseif ( ! is_ne_zahl($zflur)) {
 		echo "<p class='err'>Die Flurnummer '".$zflur."' ist nicht numerisch</p>";
 		return 9;
-	} elseif ($zfsnr == "") {
+	} elseif ($zfsnr == "") { // Flur eingegeben, aber keine FlurstÃŒcksnummer mehr
 		return 3; // Flur				
 	} else {
-		$zn=explode("/", $zfsnr, 2);
+		$zn=explode("/", $zfsnr, 2); // Bruchnummer?
 		$zzaehler=h_hinten(trim($zn[0]));
 		if (count($zn) > 1) {$znenner=h_hinten(trim($zn[1]));} else {$znenner="";}
@@ -149,32 +166,8 @@
 }
 
-function zeile_gemarkung($gkgnr, $gkgname, $aktuell) {
-// Eine Zeile zu Gemarkung ausgeben
-	global $con, $gkz, $gemeinde, $epsg, $gfilter;
-
-	if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
-		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;";
-		$v=array($gnr);
-		$res=pg_prepare("", $sql);
-		$res=pg_execute("", $v);
-		if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkungsname.</p>";}
-		$row = pg_fetch_array($res);
-		$gkgname=$row["gemarkungsname"];
-	}
-
-	if ($gkgname == "") {$gkgname = "(unbekannt)";}
-	$gnam=htmlentities($gkgname, ENT_QUOTES, "UTF-8");
-	if ($aktuell) {$cls=" aktuell";} else {$cls="";}
-
-	echo "\n<div class='gk".$cls."' title='Gemarkung'>";
-	echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.png' width='16' height='16' alt='GKG' title='Gemarkung'>";
-	echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."'>";		
-	echo  " ".$gnam."</a> (".$gkgnr.")";
-	echo "\n</div>";
-	return;
-}
-
-function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) { // Eine Zeile zur Flur ausgeben
+function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) { 
+	// Eine Kopf-Zeile zur Flur ausgeben
 	global $gkz, $gemeinde, $epsg;
+
 	if ($aktuell) {$cls=" aktuell";} else {$cls="";}
 	echo "\n<div class='fl".$cls."' title='Flur'>";
@@ -182,4 +175,5 @@
 	$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."-".$flurnr;
 	echo "<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'>Flur ".$flurnr." </a>"; 
+
 	if ($histlnk) { // Link zur Historie-Suche anbieten
 		echo " <a class='hislnk' title='Historische Flurst&uuml;cke der Flur suchen' href='".$url."&amp;hist=j'>Hist.</a>";
@@ -217,6 +211,7 @@
 
 function zeile_nachf_fs($gml, $gknr, $flur, $fskenn, $ftyp) {
-	// Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben 
+	// Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben
 	global $gkz, $gemeinde, $epsg, $auskpath;
+
 	$fs=$gknr."-".$flur."-".$fskenn;
 	switch ($ftyp) {
@@ -250,28 +245,28 @@
 
 function ListGemeinden() {
-	// Bei Leereingabe im Formular die Gemeinden auflisten
+	// Bei Leereingabe im Formular die berechtigte(n) Gemeinde(n) auflisten
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
 	$linelimit=60;
 
-	$sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde ";
+	$sql ="SELECT trim(trailing from gemshl) as gemshl, gemname FROM gem_shl ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="WHERE gemeinde='".$gemeinde."' "; break;
+			$sql.="WHERE substring(gemshl from 6 for 3) = '".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql.="WHERE gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
+			$sql.="WHERE substring(gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; break;
 		default: break;
 	}
-	$sql.=" AND endet IS NULL ORDER BY gemeindename LIMIT $1 ;";
+	$sql.=" AND endet IS NULL ORDER BY gemname LIMIT $1 ;";
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", array($linelimit));
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Gemeinde</p>";
-		#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";} // ++Nur Entw.
 		return 0;
 	}
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
-		$gnr=$row["gemeinde"];
-		$gemeindename=$row["gemeindename"];
+		$gnr=$row["gemshl"];
+		$gemeindename=$row["gemname"];
 		zeile_gemeinde($gnr, $gemeindename);
 		$cnt++;
@@ -299,5 +294,5 @@
 
 	// Body
-	$sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;";
+	$sql ="SELECT gemashl, trim(trailing from gemarkung) AS gemarkung FROM gema_shl WHERE substring(gemshl from 1 for 8) = $1 ORDER BY gemarkung LIMIT $2 ;";
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", array($gkey, $linelimit));
@@ -308,6 +303,6 @@
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
-		$gnr=$row["gemarkung"];
-		$gnam=$row["gemarkungsname"];
+		$gnr=$row["gemashl"]; // 6stellig
+		$gnam=$row["gemarkung"];
 		zeile_gemarkung($gnr, $gnam, false);
 		$cnt++;
@@ -334,14 +329,19 @@
 	} else {
 		$match = trim($fskennz)."%";
-	}	
-	$sql ="SELECT g.gemeinde, g.gemarkung, g.gemarkungsname, s.gemeindename 
-	FROM pp_gemarkung g JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde WHERE g.gemarkungsname ILIKE $1 ";
+	}
+
+	// Pass auf! GemeindeschlÃŒssel ist in den beiden SchlÃŒsseltabellen linksbÃŒndig gefÃŒllt,
+	// aber unterschiedlich lang hinten mit Leerstellen aufgefÃŒllt.
+	$sql ="SELECT substring(g.gemshl from 1 for 8) AS gemshl, g.gemashl, trim(trailing from g.gemarkung) AS gemarkung, trim(trailing from s.gemname) AS gemname 
+	FROM gema_shl g JOIN gem_shl s ON substring(g.gemshl from 1 for 8) = substring(s.gemshl from 1 for 8) WHERE g.gemarkung ILIKE $1 ";
+
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="AND g.gemeinde='".$gemeinde."'"; break;
+			$sql.="AND substring(g.gemshl from 6 for 3)='".$gemeinde."'"; break;
 		case 2: // Liste
-			$sql.="AND g.gemeinde in ("."'".str_replace(",", "','", $gemeinde)."'".") "; break;
-	}
-	$sql.=" ORDER BY s.gemeindename, g.gemarkungsname LIMIT $2 ;";
+			$sql.="AND substring(g.gemshl from 6 for 3) in ("."'".str_replace(",", "','", $gemeinde)."'".") "; break;
+	}
+	$sql.=" ORDER BY s.gemname, g.gemarkung LIMIT $2 ;";
+
 	$v=array($match, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -354,12 +354,12 @@
 	$gwgem="";
 	while($row = pg_fetch_array($res)) {
-		$gemeindename=$row["gemeindename"];
+		$gemeindename=$row["gemname"];
 		if ($gwgem != $gemeindename) { // Gruppierung Gemeinde
 			$gwgem = $gemeindename;
-			$skey=$row["gemeinde"];
+			$skey=$row["gemshl"];
 			zeile_gemeinde($skey, $gemeindename, false);
 		}
-		$gnam=$row["gemarkungsname"];
-		$gnr=$row["gemarkung"];
+		$gnam=$row["gemarkung"];
+		$gnr=$row["gemashl"]; // 6stellig
 		zeile_gemarkung($gnr, $gnam, false); // wenn am Ende nur ein Treffer, dann aktuell=true
 		$cnt++;
@@ -368,8 +368,17 @@
 	if($cnt == 0){ 
 		echo "\n<p class='anz'>Keine Gemarkung.</p>";
+		if ($debug > 1) {
+/*
+			// Nach Umstellung auf NorGIS-Struktur muss im Mapbender die Gemeinde 3stellig konfiguriert werden
+			if (strlen($gemeinde) < 3) {
+				echo "<p class='err'>URL-Parameter &gemeinde=nnn im Mapbender gazetteer_alkis.SRC muss 3stellig sein!<br>Ist aber '".$gemeinde."'.</p>";
+			}
+*/
+			if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = ".$match."</p>";}
+		}
 	} elseif($cnt >= $linelimit) {
 		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>";
 	} elseif($cnt == 1) { // Eindeutig!
-		return $gnr; 
+		return $gnr; // 6stellige Gemarkungsnummer!
 	} else {
 		echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
@@ -378,13 +387,13 @@
 }
 
-function gg_head($gkgnr, $gkgaktuell) {
-	// Kopf-Zeilen Gemeinde und Gemarkung ausgeben
-	// Parameter: Gemarkungsnummer, aktuell hervorzuhebende Zeile
+function gg_head($gkgnr6, $gkgaktuell) {
+	// Gemeinde und Gemarkung (G+G) Kopf-Zeilen ausgeben
+	// Parameter: Gemarkungsnummer (6stellig), aktuell hervorzuhebende Zeile
 	// Return: true/false ob gefunden 
 
-	$sqlh ="SELECT g.gemarkungsname, s.gemeinde, s.gemeindename FROM pp_gemarkung g 
-	JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde AND g.land=s.land WHERE g.gemarkung = $1 ;";
-
-	$v=array($gkgnr);
+	$sqlh ="SELECT g.gemarkung, substring(s.gemshl from 1 for 8) AS gemshl, trim(trailing from s.gemname) AS gemname 
+	FROM gema_shl g JOIN gem_shl s ON g.gemshl=s.gemshl WHERE g.gemashl = $1 ;";
+
+	$v=array($gkgnr6);
 	$resh=pg_prepare("", $sqlh);
 	$resh=pg_execute("", $v);
@@ -393,14 +402,14 @@
 
 	if ($rowh = pg_fetch_array($resh)) {
-		$gmkg=$rowh["gemarkungsname"];
-		$skey=$rowh["gemeinde"];
-		$snam=$rowh["gemeindename"];
+		$gmkg=$rowh["gemarkung"];
+		$skey=$rowh["gemshl"];
+		$snam=$rowh["gemname"];
 		zeile_gemeinde($skey, $snam, false);
-		zeile_gemarkung($gkgnr, $gmkg, $gkgaktuell);
+		zeile_gemarkung($gkgnr6, $gmkg, $gkgaktuell);
 		return true;
     } else {
 		echo "\n<div class='gk' title='Gemarkung'>";
 		echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.png' width='16' height='16' alt='GKG' title='Gemarkung'>";
-		echo " Gemarkung ".$gkgnr." nicht gefunden!\n</div>";
+		echo " Gemarkung ".$gkgnr6." nicht gefunden!\n</div>";
 		return false;
 	}
@@ -409,10 +418,10 @@
 function EineGemarkung($AuchGemkZeile) {
 	// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
-	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
+	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg4, $zgemkg6;
 	$linelimit=120; // max.Fluren/Gemkg
 
 	// Head
 	if ($AuchGemkZeile) { // Kopf davor ausgeben
-		if (! gg_head($zgemkg, true)) {
+		if (! gg_head($zgemkg6, true)) {
 			if ($debug >= 1) {echo "\n<p class='dbg'>Gem.-Gemkg.-Kopf abgebrochen</p>";}	
 			return false;
@@ -421,7 +430,6 @@
 
 	// Body
-	// Tabelle pp_flur verwenden um nur Fluren aufzulisten, die tatsÃ€chlich FlurstÃŒcke enthalten
-	$sql ="SELECT flurnummer AS flur FROM pp_flur f WHERE gemarkung= $1 ORDER BY flurnummer LIMIT $2 ;";
-	$v=array($zgemkg, $linelimit);
+	$sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;";
+	$v=array($zgemkg4, $linelimit);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
@@ -431,5 +439,5 @@
 	while($row = pg_fetch_array($res)) {	
 		$zflur=$row["flur"];
-		zeile_flur($zgemkg, $zflur, false, false);
+		zeile_flur($zgemkg4, $zflur, false, false);
 		$zfl++;
 	}
@@ -448,10 +456,10 @@
 function EineFlur() {
 	// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
-	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg, $zflur;
+	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg4, $zgemkg6, $zflur;
 	$linelimit=900; // Wie groÃ kann eine Flur sein?
 
 	// Head
-	if (gg_head($zgemkg, false)) {
-		zeile_flur($zgemkg, $zflur, true, true);
+	if (gg_head($zgemkg6, false)) {
+		zeile_flur($zgemkg4, $zflur, true, true);
 	} else {
 		return false;
@@ -467,7 +475,8 @@
 		$sql.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
 	}
+
 	$sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND endet IS NULL 
 	ORDER BY f.zaehler, f.nenner LIMIT $3 ;";
-	$v=array($zgemkg, $zflur, $linelimit);
+	$v=array($zgemkg4, $zflur, $linelimit);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
@@ -495,12 +504,12 @@
 
 function HistFlur() {
-	// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben.
+	// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, "h" dahinter.
 	// Die Flur nach historischen FlurstÃŒcken durchsuchen
-	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur;
+	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg4, $zgemkg6, $zflur;
 	$linelimit=500;
 
 	// Head	
-	if (gg_head($zgemkg, false)) {
-		zeile_flur($zgemkg, $zflur, true, true);
+	if (gg_head($zgemkg6, false)) {
+		zeile_flur($zgemkg4, $zflur, true, true);
 	} else {
 		return false;
@@ -509,8 +518,13 @@
 	// Body
 	$whcl="WHERE flurstueckskennzeichen like $1 AND endet IS NULL ";
-	$sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
-	$sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
+
+	$sql ="SELECT 'h' AS ftyp, gml_id, cast(zaehler AS integer) AS zaehler, cast(nenner AS integer) AS nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
+	$sql.="UNION SELECT 'o' AS ftyp, gml_id, cast(zaehler AS integer) AS zaehler, cast(nenner AS integer) AS nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
 	$sql.="ORDER BY zaehler, nenner LIMIT $2 ;"; 
-	$fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", STR_PAD_LEFT)."%";
+	// "zaehler" und "nenner" sind in der Classic-Datenbank Integer-Werte aber in der Struktur 
+	// des norGIS-ALKIS-Importers sind das Character-Strings, die linksbÃŒndig ohne fÃŒhrende Nullen gefÃŒllt sind.
+	// Der Anwender erwartet aber eine "numerische" Sortierung.
+
+	$fskzwhere=$zgemkg6.str_pad($zflur, 3, "0", STR_PAD_LEFT)."%";
 	$v=array($fskzwhere, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -523,5 +537,5 @@
 		$fskenn=$row["zaehler"];
 		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
-		zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg, $zflur, false);
+		zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg4, $zflur, false);
 		$zfs++;
 	}
@@ -542,9 +556,9 @@
 	// FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler (oder Nenner) eingegeben
 	// Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler suchen wenn kein Nenner eingegeben wurde.
-	global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
+	global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner;
 
 	// Head
-	if (gg_head($zgemkg, false)) {
-		zeile_flur($zgemkg, $zflur, true, false);
+	if (gg_head($zgemkg6, false)) { // Kopfzeilen: Gemeinde, Gemerkung, ..
+		zeile_flur($zgemkg4, $zflur, true, false); // .., Flur
 	} else {
 		return false;
@@ -561,10 +575,24 @@
 	}
 	$sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
-	If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
-	$sql.="AND endet IS NULL ORDER BY f.zaehler, f.nenner;";
-	$v=array($zgemkg, $zflur, $zzaehler);
+
+//	If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";}
+
+	// norGIS: "zaehler" ist integer in der DB, aber "nenner" ist character, linksbÃŒndig ohne fÃŒhrende '0'
+	If ($znenner != "") {
+		$suchnenn = ltrim($znenner, '0');
+		If ($suchnenn != "") {
+			$sql.="AND f.nenner='".$suchnenn."' ";
+		}
+	}
+	$sql.="AND endet IS NULL ORDER BY f.zaehler, cast(f.nenner AS integer);";
+	$v=array($zgemkg4, $zflur, $zzaehler);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
-	if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";}
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<br>Parameter $1='".$zgemkg4."' $2='".$zflur."' $3='".$zzaehler."'<p>";}
+	}
+
+
 	$zfs=0;
 	while($row = pg_fetch_array($res)) {	
@@ -582,5 +610,5 @@
 			echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.png' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;";
 			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>";
-			echo $zgemkg."-".$zflur."-".$zzaehler;
+			echo $zgemkg4."-".$zflur."-".$zzaehler;
 			if ($znenner != "") {echo "/".$znenner;}
 			echo " h - suchen</a>";
@@ -592,9 +620,9 @@
 function HistFlurstueck() {
 	// Die Nachfolger-FS-Kennzeichen zu einem Historischen FS sollen recherchiert werden.
-	global $debug, $land, $zgemkg, $zflur, $zzaehler, $znenner;
+	global $debug, $land, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner;
 
 	// Head
-	if (gg_head($zgemkg, false)) {
-		zeile_flur($zgemkg, $zflur, true, false);
+	if (gg_head($zgemkg6, false)) {
+		zeile_flur($zgemkg4, $zflur, true, false);
 	} else {
 		return false;
@@ -604,5 +632,5 @@
 	// Body
 	// Suche ueber das Flurstueckskennzeichen, gml unbekannt
-	$fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where
+	$fskzwhere=$zgemkg6; // Flurst-Kennz. f. Where
 	$fskzwhere.=str_pad($zflur, 3, "0", STR_PAD_LEFT);
 	$fskzwhere.=str_pad($zzaehler, 5, "0", STR_PAD_LEFT);
@@ -639,5 +667,5 @@
 		$ftyp=$row["ftyp"];
 		$fs_gml=$row["gml_id"];
-		$gknr=$row["gemarkungsnummer"];
+		$gknr=$land.$row["gemarkungsnummer"]; // Land davor
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
@@ -646,4 +674,5 @@
 
 		zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, true);
+
 		if ($nachf == "") {
 			echo "\n<p class='anz'>keine Nachfolger</p>";	
@@ -659,5 +688,6 @@
 			$nawhcl="WHERE flurstueckskennzeichen IN ( ".$stri." ) AND endet IS NULL ";
 
-			$nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$nawhcl;
+			// Pass auf! Spalte zaehler hat unterschiedliches Format in den 3 Tabellen
+			$nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, cast(zaehler AS character varying), nenner FROM ax_flurstueck ".$nawhcl;
 			$nasql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$nawhcl;
 			$nasql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$nawhcl;
@@ -677,5 +707,5 @@
 				$naftyp=$narow["ftyp"];
 				$nagml=$narow["gml_id"];
-				$nagknr=$narow["gemarkungsnummer"];
+				$nagknr=$land.$narow["gemarkungsnummer"]; // Land davor, 4 auf 6 Stellen
 				$naflur=$narow["flurnummer"];
 				$nafskenn=$narow["zaehler"];
@@ -692,5 +722,4 @@
 			echo "\n<hr>";
 		}
-		#} // aktuell ...
 		$zfs++;
 	}
@@ -712,4 +741,6 @@
 	$epsg=$gui_epsg; // Conf
 }
+
+// Filter aus Mapbender-GUI-Einbindung
 if ($gemeinde == "") {
 	$gfilter = 0;
@@ -725,5 +756,6 @@
 	$gnr=ListGmkgInGemeinde($gm, $bez);
 	if ($gnr > 0) {
-		$zgemkg=$gnr;
+		$zgemkg4=$gnr;
+		$zgemkg6=$land.$zgemkg4;
 		EineGemarkung(false);
 	}
@@ -731,5 +763,5 @@
 	$retzer=ZerlegungFsKennz($fskennz);
 	if ($debug >= 1) {echo "\n<p class='dbg'>Return Zerlegung: ".$retzer."</p>";}	
-	switch ($retzer) { // Return der Zerlegung
+	switch ($retzer) { // Returnwert der Zerlegung des FS-Kennz.
 	case 0: // leere Eingabe
 		if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert
@@ -746,5 +778,6 @@
 		if ($gnr > 0) {
 			$trans="1 Gemarkung, Fluren dazu";
-			$zgemkg=$gnr;
+			$zgemkg6=$gnr;
+			$zgemkg4=substr($zgemkg6, 2);
 			EineGemarkung(false);
 		}
