Index: trunk/info/info/alkisn/alkisexport.php
===================================================================
--- trunk/info/info/alkisn/alkisexport.php	(revision 405)
+++ trunk/info/info/alkisn/alkisexport.php	(revision 412)
@@ -12,4 +12,5 @@
 		?gkz=mandant&tabtyp=strasse&haus=m&gmlid=DE...   Filter &haus=m/o = mit oder ohne Hausnummer
 		?gkz=mandant&tabtyp=strasse&haus=o               bei Strasse auch ohne gmlid zulÃ€ssig - nicht verwenden wenn aus NBA unscharf geladen
+		?gkz240,tabtyp=flstliste&gmlliste=DE...,DE....
 	Beispiele fÃŒr Fehler:
 		?gkz=270&tabtyp=gemarkung&gmlid=2662
@@ -29,4 +30,5 @@
 	2017-12-20 Nur eine Adresse zur Person (Siehe Views in "views_exp_csv.sql")
 	2018-05-03 Aufruf aus neuem GrundstÃŒcksnachweis: tabtyp='buchung', angepasster View "exp_csv" notwendig
+	2018-10-16 Neuer Aufruf-Typ aus der rÃ€umlichen Selektion, &tabtyp=flstliste&prefix=DENW15&gmlliste=AL...,AL....
 
 	ToDo:
@@ -73,5 +75,18 @@
 
 // strikte Validierung aller Parameter
-if (!isset($gmlid) or !preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
+if ( isset($gmlid) ) {
+	if ( !preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
+} else {
+	$gmlid="";
+}
+
+// FS-Limit? x (16+1) = 
+if ( isset($gmlliste) ) {
+	if (!preg_match("#^[0-9A-Za-z,]{16,2000}$#", $gmlliste)) {
+	//	echo "\n<p>gmlliste=".$gmlliste."</p>\n";   // NUR TEST
+		die("Eingabefehler gmlliste");
+	}
+}
+
 if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
 if (isset($gemarkung)) {
@@ -118,5 +133,5 @@
 		$filename='alkis_'.$tabtyp.'_'.$gemarkung.'.csv';
 
-/* 	// $gmlid zu strasse noch notwendig solange kein Filter auf "Gemeinde" verwendet wird.
+/* 	// $gmlid zu strasse ist noch notwendig solange kein Filter auf "Gemeinde" verwendet wird.
 	} elseif ($haus == 'm' or $haus == 'o') { // Sonderfall 2 - alle mit/ohne Hausnummer, nur ÃŒber View "exp_csv_str" mÃ¶glich
 		if ($tabtyp != 'strasse') {
@@ -130,4 +145,14 @@
 		}
 */
+	} elseif ($gmlliste != '') { // Sonderfall 3 - FlurstÃŒcke aus rÃ€umlicher Selection
+		if ($tabtyp != 'flstliste') {
+			$err = "Fehler: Falsche Kombination Parameter tabtyp='".$tabtyp."' mit Liste der GML-ID.";
+			echo "\n".$err; exit ($err);
+		}
+		if (!isset($prefix) or !preg_match("#^[A-Z0-9,]{6}$#", $prefix)) {
+			die("Eingabefehler prefix");
+		}
+		$filename='alkis_gebiet.csv'; // RÃ€umliche Selection
+
 	} else {
 		$err="\nFehler: Kein passender Wert fuer die Suche angegeben.";
@@ -151,29 +176,46 @@
 pg_set_client_encoding($con, 'LATIN1'); // FÃŒr Excel kein UTF8
 
-$viewname="exp_csv"; // Standard-View, in der DB gespeichert
+//$viewname="exp_csv"; // Standard-View, in der DB gespeichert
 $v=array($gmlid); // Standard-Filter-Feld
 
 // Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv".
 switch ($tabtyp) { // zulaessige Werte fuer &tabtyp=
+
 	case 'flurstueck': // ax_flurstueck.gml_id
-		$filter = "fsgml";
-		break;
+		$sql="SELECT * FROM exp_csv WHERE fsgml = $1 ";
+		break;
+
 	case 'grundbuch': // ax_buchungsblatt.gml_id
-		$filter = "gbgml";
-		break;
+		$sql="SELECT * FROM exp_csv WHERE gbgml = $1 ";
+		break;
+
 	case 'buchung': // ax_buchungsstelle.gml_id
-		$filter = "gsgml";
-		break;
+		$sql="SELECT * FROM exp_csv WHERE gsgml = $1 ";
+		break;
+
 	case 'person': // ax_person.gml_id
-		$filter = "psgml";
-		break;
+		$sql="SELECT * FROM exp_csv WHERE psgml = $1 ";
+		break;
+
 	case 'strasse': // ax_lagebezeichnungkatalogeintrag.gml_id = StraÃe-GML-ID
-		$filter = "stgml";
-		$viewname="exp_csv_str"; // alternativer View mit "_str", ist in der Datenbank gespeichert  
-		break;
+		// alternativer View mit "_str", ist in der Datenbank gespeichert
+		$sql="SELECT * FROM exp_csv_str WHERE stgml = $1 ";
+		break;
+
 	case 'gemarkung': // SONDERfall als Parameter wird "Gemarkungsnummer" und nicht "gml_id" geliefert
-		$filter = "gemarkungsnummer";
-		$v=array($gemarkung); // anderes Filter-Feld, anderer Parameter
-		break;
+		$sql="SELECT * FROM exp_csv WHERE gemarkungsnummer = $1 ";
+		$v=array($gemarkung);
+		break;
+
+	case 'flstliste':
+	// Ganze IN-Liste als $1 in SQL bringt kein Ergebnis.
+	// GML-ID aufgeteilt: 6 Byte konstant, 10 Byte variabel in Liste
+	//$prefix vor JEDES Element setzen oder mit Substrings suchen?
+	//	$sql="SELECT * FROM exp_csv WHERE fsgml IN ('".str_replace(",", "','", $gmlliste)."')"; // komplette GML-ID in Liste
+		$sql="SELECT * FROM exp_csv WHERE substring(fsgml from 1 for 6) = $1 "
+			." AND substring(fsgml from 7 for 10) IN ('".str_replace(",", "','", $gmlliste)."')";
+		$v=array($prefix);
+		break;
+
 	default:
 		$err="\nFalscher Parameter '".$tabtyp."'";
@@ -182,17 +224,14 @@
 }
 
-// Daten aus gespeichertem View, zusaetzlich Filter: "feld"='wert' mitgeben
-$sql="SELECT * FROM ".$viewname." WHERE ".$filter." = $1 ";
-
 if ($haus == 'm' or $haus == 'o') { // nur FS mit/ohne verschl. Lagebez.
-	if ($gmlid == '') { // m/o-Filter als einziger Filter
-		$sql="SELECT * FROM ".$viewname." WHERE fall='".$haus."' "; // Ersetzen
-		$v=array(); // kein Filter-Feld
-		// ToDo: Filter auf Gemeinde notwendig, wenn nicht auf strasse gefiltert wird.
-		// - Sonst Ausgabe von Rand-FlurstÃŒcken (bei geometrischer Filterung des NBA-Verfahrens)
-		// - Sonst ggf. Ausgabe Kreisgebiet
-	} else { // als zusÃ€tzlicher Filter AND
-		$sql.="AND fall='".$haus."' "; // m/o-Filter AnhÃ€ngen
-	}
+//	if ($gmlid == '') { // m/o-Filter als einziger Filter
+//		$sql="SELECT * FROM ".$viewname." WHERE fall='".$haus."' "; // Ersetzen
+//		$v=array(); // kein Filter-Feld
+//		// ToDo: Filter auf Gemeinde notwendig, wenn nicht auf strasse gefiltert wird.
+//		// - Sonst Ausgabe von Rand-FlurstÃŒcken (bei geometrischer Filterung des NBA-Verfahrens)
+//		// - Sonst ggf. Ausgabe Kreisgebiet
+//	} else { // als zusÃ€tzlicher Filter AND
+		$sql.=" AND fall='".$haus."' "; // m/o-Filter AnhÃ€ngen
+//	}
 }
 
@@ -311,5 +350,10 @@
 pg_free_result($res);
 if ($i == 1) { // nur Kopf
-	$err="\nKein Treffer fuer gml_id='".$gmlid."'";
+	if ( $gmlid == '' ) {
+		$err="\nKein Treffer";
+	//	echo "\n".$sql."\n".$v[0]."\n".$dbconn."\n";
+	} else {
+		$err="\nKein Treffer fuer gml_id='".$gmlid."'";
+	}
 	exit ($err);
 }
