Index: trunk/var/www/info/alkis/alkisfshist.php
===================================================================
--- trunk/var/www/info/alkis/alkisfshist.php	(revision 123)
+++ trunk/var/www/info/alkis/alkisfshist.php	(revision 128)
@@ -6,5 +6,6 @@
 
 	Version:
-	03.11.2011  Entwurf Prototyp
+	2011-11-03  Entwurf Prototyp
+	2011-11-16  Zum aktuellen FS die VorgÃ€nger suchen
 
 	Sinnvoller Einstieg als Erweiterung der Navigation (Suche in Flur, (auch) nach Hist-FS).
@@ -20,5 +21,5 @@
 	+++ Eine Geometrische VorgÃ€nger-Suche dazu realisieren? Oder besser Hist-Layer in Mapfile als Einstieg.
 	
-	+++ ZusÃ€tzlicher Parameter x/y (aus WMS-Feature-Info) als Geometriescher Einstieg fÃŒr historische FS MIT Raumbezug
+	+++ ZusÃ€tzlicher Parameter x/y (aus WMS-Feature-Info) als Geometrischer Einstieg fÃŒr historische FS MIT Raumbezug
 */
 
@@ -31,19 +32,21 @@
 */
 	$fst=rtrim($fs,"_");	
-	$zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-".ltrim(substr($fst, 9, 5),"0");
+	$zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
 	$nenn=ltrim(substr($fst, 14), "0");
 	if ($nenn != "") {$zer.="/".$nenn;}
+	$zer.="</b>";
 	return $zer; 
 }
 
-function vornach($dbarr, $gkz, $idanzeige, $showkey) {
+function vornach($dbarr) {
 // Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
+	global $gkz, $idanzeige, $showkey;
 	if ($dbarr == "") {
-		echo "&nbsp;";
+		echo "(keine)";
 	} else {
 		$stri=trim($dbarr, "{}");
 		$arr = split(",",$stri);
 		foreach($arr AS $val){
-		   echo "<a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
+		   echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
 		   	if ($idanzeige) {echo "&amp;id=j";}
 				if ($showkey)   {echo "&amp;showkey=j";}
@@ -52,4 +55,66 @@
 	}
 	return 0;
+}
+
+function gemkg_name($gkey) {
+// SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
+	global $con;
+	$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
+	$v=array($gkey);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
+	$zgmk=0;
+	while($row = pg_fetch_array($res)) { // eigentlich nur EINE
+		$gmkg=$row["bezeichnung"];
+		$zgmk++;
+	}
+	if ($zgmk == 0) {
+		echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
+		return;
+	}
+	return $gmkg;
+}
+
+function such_vor_arr($fsk) {
+// Suchen der VorgÃ€nger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
+// Akt. FS hat keine Verweise auf VorgÃ€nger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
+// Problem: Dies sind Arrays, die nicht performant durchsucht werden kÃ¶nnen.
+	global $gkz, $con, $debug;
+
+	$wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
+
+	// Bei kleinere Datenbanken keine spÃŒrbare VerzÃ¶gerung bei Suche mit " = ANY(Array)"
+	// FÃŒr grosse BestÃ€nde zusÃ€tzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
+	// Dazu die nÃ€chsten 2 Zeilen aktivieren.	
+//	$wherecl.="AND gemarkungsnummer=".substr($fsk, 2, 4)." ";
+//	$wherecl.="AND flurnummer=".ltrim(substr($fsk, 6, 3), "0")." ";
+	// Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
+
+	$sqlv.="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl;
+	$sqlv.="UNION ";
+	$sqlv.="SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl;
+	$sqlv.="ORDER BY flurstueckskennzeichen";
+
+	$v=array($fsk);
+	$resv = pg_prepare("", $sqlv);
+	$resv = pg_execute("", $v);
+	if (!$resv) {
+		echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
+	}
+	$zv=0;
+	while($rowv = pg_fetch_array($resv)) {
+		$ftyp=$rowv["ftyp"];
+		$gmlv=$rowv["gml_id"];
+		$vfsk=$rowv["flurstueckskennzeichen"];
+		echo "Flurst&uuml;ck <a title='Historie des Vorg&auml;ngerflurst&uuml;cks' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$vfsk."&amp;gmlid=".$gmlv;
+	   	if ($idanzeige) {echo "&amp;id=j";}
+			if ($showkey)   {echo "&amp;showkey=j";}
+		echo "'>".fzerleg($vfsk)."</a><br>";
+		$zv++;
+	}
+	if ($zv == 0) {echo "(keine)";}
+	return;
 }
 
@@ -102,17 +167,19 @@
 		$parmtyp="";
 		echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
-		// ++ Formular ausgeben um das FlurstÃŒckskennzeichen einzugeben? 
 	}
 }
 
 if ($parmtyp != "") { // einer der beiden erlaubten FÃ€lle
-	// UNION-Abfrage auf 3 Ã€hnliche Tabellen, darin aber immr nur 1 Treffer.
-	$sqlu ="SELECT 'a' AS ftyp, gml_id, flurnummer, zaehler, nenner, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, null AS nach, null AS vor ";
+	// UNION-Abfrage auf 3 Ã€hnliche Tabellen, darin aber immer nur 1 Treffer.
+
+	$felder="gml_id, flurnummer, zaehler, nenner, flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
+
+	$sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" ";
 	$sqlu.="FROM ax_flurstueck f ".$whereclause;
 	$sqlu.="UNION ";
-	$sqlu.="SELECT 'h' AS ftyp, gml_id, flurnummer, zaehler, nenner, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor ";
+	$sqlu.="SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
 	$sqlu.="FROM ax_historischesflurstueck h ".$whereclause;
 	$sqlu.="UNION ";
-	$sqlu.="SELECT 'o' AS ftyp, gml_id, flurnummer, zaehler, nenner, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor ";
+	$sqlu.="SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
 	$sqlu.="FROM ax_historischesflurstueckohneraumbezug o ".$whereclause;
 	
@@ -127,10 +194,13 @@
 		$gmkgnr=$rowu["gemarkungsnummer"];
 		$flurnummer=$rowu["flurnummer"];
-		$flstnummer=$rowu["zaehler"];
+		$zaehler=$rowu["zaehler"];
 		$nenner=$rowu["nenner"];
+		$flstnummer=$zaehler;
 		if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
+		$fskenn=$rowu["flurstueckskennzeichen"];
 		$flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
-	//	$name=$rowu["name"];
-		$gemkname=$gmkgnr; // +++ JOIN auf Schluesseltabelle fehlt noch
+		$name=$rowu["name"]; // in DB ein Array
+		$arrn = split(",", trim($name, "{}") ); // PHP-Array
+		$gemkname= gemkg_name($gmkgnr);
 		$entsteh=$rowu["zeitpunktderentstehung"];
 		$vor=$rowu["vor"];
@@ -139,5 +209,5 @@
 	} else {
 		if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
-		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
 	}
 }
@@ -151,10 +221,10 @@
 	case 'h': 
 		$wert = "historisch<br>(mit Raumbezug)";
-		$ico= "Flurstueck_Historisch.ico"; // ++ anderes Icon, wenn Geomtrie vorhanden?
+		$ico= "Flurstueck_Historisch.ico"; //
 		$cls= "kennzfsh";
 	break;
 	case 'o': 
 		$wert = "historisch<br>ohne Raumbezug";
-		$ico= "Flurstueck_Historisch.ico";
+		$ico= "Flurstueck_Historisch_oR.ico";
 		$cls= "kennzfsh";
 	break;
@@ -184,16 +254,30 @@
 	echo "\n\t<table class='fsd'>";
 		echo "\n\t<tr>\n\t\t<td>Entstehung</td>";
-		echo "\n\t\t<td>".$entsteh."</td>\n\t</tr>";
-	//	echo "\n\t<tr>\n\t\t<td>letz. Fortf</td>";
-	//	echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>".$name."</td>";
-		echo "\n\t\t<td>&nbsp;</td><td>&nbsp;</td>"; // Leer-Zeile statt FF-Nr
+			echo "\n\t\t<td>".$entsteh."</td>";
+		echo "\n\t</tr>";
+		echo "\n\t<tr>";
+			echo "\n\t\t<td>letz. Fortf</td>";
+			echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
+				foreach($arrn AS $val) { // Zeile f. jedes Element
+					echo trim($val, '"')."<br>";
+				}
+			echo "</td>";
 		echo "\n\t</tr>";
 	echo "\n\t</table>";
 	if ($idanzeige) {linkgml($gkz, $gmlid, "Flurst&uuml;ck"); }
 echo "\n\t</td>\n</tr>\n</table>";
+
+if ($debug > 2) {echo "<p class='dbg'>FF= ".$name."</p>";}
+
+if ($ftyp == "a") { // Aktuell -> Historie
+	echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
+		echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
+			if ($idanzeige) {echo "&amp;id=j";}
+			if ($showkey)   {echo "&amp;showkey=j";}
+			echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
+			echo "<img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''>";
+		echo "</a>";
+}
 echo "\n<hr>";
-//echo "\n<p class='nwlink noprint'>weitere Auskunft:</p>"; // oben rechts von der Tabelle
-
-// if ($debug > 1) {echo "<p class='err'>VOR ".$vor." NACH ".$nach."</p>";}
 
 echo "<table class='outer'>";
@@ -203,36 +287,41 @@
 		<td class='head'>Nachfolger</td>
 	</tr>"; // Head
+	
+	// Spalte 1: F l u r s t ÃŒ c k
 	echo "\n<tr>\n\t<td>";
-	echo "<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert;
-	echo "<br>Fl&auml;che <span class='flae'>".$flae."</span>";
-	if ($ftyp == "a") { //Aktuell
-		echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
-			echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
-				if ($idanzeige) {echo "&amp;id=j";}
-				if ($showkey)   {echo "&amp;showkey=j";}
-				echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
-				echo "<img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''>";
-			echo "</a>";
-	}
+		echo "<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert;
+		echo "<br>Fl&auml;che <span class='flae'>".$flae."</span>";
 	echo "</td>";
+
+	// Spalte 2: V o r g Ã€ n g e r
 	echo "\n\t<td>";
-	// In ax_historischesflurstueck ist vorgaenger immer leer!
-	// Man muss wohl geometrisch suchen !?
-	if ($ftyp == "h" and $vor == "") {
-		echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
-	} else {
-		vornach($vor, $gkz, $idanzeige, $showkey);
-	}
-	echo"</td>\n\t<td>";
-	vornach($nach, $gkz, $idanzeige, $showkey);
+	switch ($ftyp) { // Unterschiede Historisch/Aktuell
+		case 'a':
+			such_vor_arr($fskenn);
+		break;
+		case 'h':
+			if ($vor == "") {
+				echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
+			} else {
+				vornach($vor);
+			}
+		break;
+		case 'o':
+			vornach($vor);
+		break;
+	}
+	echo"</td>";
+
+	// Spalte 3: N a c h f o l g e r
+	echo "\n\t<td>";
+		vornach($nach);
 	echo "</td>\n</tr>";
 echo "\n</table>";
 
-// TEST
 if ($debug > 1) {
 	$z=1;
 	while($rowu = pg_fetch_array($resu)) {
 		$ftyp=$rowu["ftyp"];
-		echo "<p class='err'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
+		echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
 		$z++;
 	}
