Index: trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.php	(revision 413)
+++ trunk/mapbender/http/nav/alkisnav_adr.php	(revision 425)
@@ -8,4 +8,7 @@
 	2018-02-15 Strikte Input-Validation der Parameter
 	2018-11-12 Full-Schema
+	2021-11-24 Neue Var. $katamtmix  (Kataster-Amt-Mix).
+	           SchlÃŒsseltabellen sind mehrfach belegt. Dadurch doppelte Treffer bei der Suche.
+
 ToDo:
 	-	Gruppierung (mit Zeile) der StraÃenliste nach Gemeinde
@@ -47,5 +50,4 @@
 	$gfilter = 0;
 }
-// // http://skrzmaptest01.asp.krzwan.de/mapbender/nav/alkisnav_adr.php?gkz=210&gemeinde=004&epsg=25832&str_schl=0575800401798
 if (isset($str_schl) ) {
 	if (!preg_match('#^[0-9]{4,13}$#', $str_schl)) {die("Eingabefehler Stra&zlig;enschl&uuml;ssel");}
@@ -90,9 +92,9 @@
 function suchStrName() {
 	// Strassen nach Name(-nsanfang)
-	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
+	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath, $katamtmix;
 	//if ($debug > 1) {echo "<p class='dbg'>function suchStrName()<p>";} // Ablauf-Verfolgung
 
 	$linelimit=120;  // -> in Conf?
-	$str_schl=""; // Loeschen vorh. Ergebnis
+	$str_schl=""; // LÃ¶schen 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]."'";
@@ -108,6 +110,7 @@
 	$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 ";
+	."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	if ($katamtmix){$sql.="AND substr(k.gml_id,1,6) = substr(g.gml_id,1,6) ";}
+	$sql.="WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";
 
 	switch ($gfilter) {
@@ -143,5 +146,5 @@
 			$gwgem=$gemname;
 		}
-		$gkey=$row["schluesselgesamt"]; // Land-RegBez-Kreis-Gem-Strasse - fÃŒr weitere Suche
+		$gkey=$row["schluesselgesamt"]; // Land-RegBez-Kreis-Gem-StraÃe - fÃŒr weitere Suche
 		$skey=$row["lage"]; // Nur Str.-schl. daraus
 		$kgml=$row["gml_id"]; // ID von Katalog
@@ -164,6 +167,6 @@
 }
 
-function suchStrKey() { // Strassen nach num. Schluessel
-	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
+function suchStrKey() { // StraÃen nach num. SchlÃŒssel
+	global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath, $katamtmix;
 	//if ($debug > 1) {echo "<p class='dbg'>function suchStrKey()<p>";} // Ablauf-Verfolgung
 	$linelimit=60;
@@ -174,8 +177,10 @@
 		$match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten 
 	}
+
 	$sql ="SELECT g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage "
 	."FROM ax_lagebezeichnungkatalogeintrag as 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.lage LIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";
+	."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	if ($katamtmix){$sql.="AND substr(k.gml_id,1,6) = substr(g.gml_id,1,6) ";}
+	$sql.="WHERE k.lage LIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
@@ -217,16 +222,17 @@
 }
 
-function suchHausZurStr($showParent) { // Haeuser zu einer Strasse
-	global $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug, $auskpath;
+function suchHausZurStr($showParent) { // HÃ€user zu einer StraÃe
+	global $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug, $auskpath, $katamtmix;
 	//if ($debug > 1) {echo "<p class='dbg'>function suchHausZurStr()<p>";} // Ablauf-Verfolgung
 
 	// Head
-	// Strasse zum Strassenschluessel
+	// StraÃe zum StrassenschlÃŒssel
 	$sql ="SELECT g.bezeichnung AS gemname, k.gml_id AS kgml, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage "
 	."FROM ax_lagebezeichnungkatalogeintrag as 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.schluesselgesamt = $1 AND k.endet IS NULL AND g.endet IS NULL LIMIT 1"; 
-
-  	$v=array($str_schl);	// Schluessel-Gesamt ..
+	."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	if ($katamtmix){$sql.="AND substr(k.gml_id,1,6) = substr(g.gml_id,1,6) ";}
+	$sql.="WHERE k.schluesselgesamt = $1 AND k.endet IS NULL AND g.endet IS NULL LIMIT 1"; 
+
+  	$v=array($str_schl);	// SchlÃŒssel-Gesamt ..
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
@@ -238,5 +244,5 @@
 
 	if($row = pg_fetch_array($res)) { // .. gefunden
-		$kgml=$row["kgml"]; // ID aus Katalog
+		$kgml=$row["kgml"]; 	// ID aus Katalog
 		$sname=$row["bezeichnung"];
 		$land =$row["land"];	// Einzel-Felder fÃŒr JOIN _lagebezeichnung_
@@ -247,5 +253,5 @@
 		$gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
 		if ($showParent) {
-			// EINE Koordinate zur Strasse besorgen
+			// EINE Koordinate zur StraÃe besorgen
 			// ax_Flurstueck >zeigtAuf> ax_LagebezeichnungOhneHausnummer
 			$sqlko ="SELECT ";
@@ -300,5 +306,5 @@
 
 		// Body
-		// Haeuser zum Strassenschluessel
+		// HÃ€user zum StraÃenschlÃŒssel
 		$sql="SELECT min(replace(h.hausnummer,' ','')) AS hsnr, ";
 		if($epsg == "25832") { // Transform nicht notwendig
@@ -348,5 +354,5 @@
 			$cnt++;
 			$count++;
-			if($count == 7) { // Max. Hausnummern je Zeile (Test: 3stellige HsNr mit Zusatz)
+			if($count == 7) { // Max. HausNr je Zeile (Test: 3stellige HsNr mit Zusatz)
 				echo "\n</tr>";
 				$count = 0;
@@ -363,10 +369,9 @@
 	return;
 }
-// ===========
+
 // Start hier!
-// ===========
 
 // Validation: Eingabefeld aus Formular.
-// Suchbegriff (StraÃenname) oder StraÃenschlÃŒssel.
+// Suchbegriff StraÃenname oder StraÃenschlÃŒssel.
 // Hier formatierte Meldung und html-Foot.
 if (isset($street) and $street != "" ) {
@@ -398,6 +403,5 @@
 }
 
-// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion 
-//  im Kopf des Ergebnisrahmens anzeigen.
+// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion 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.
