".ltrim(substr($fst, 9, 5),"0"); $nenn=ltrim(substr($fst, 14), "0"); if ($nenn != "") {$zer.="/".$nenn;} $zer.=""; return $zer; } function vornach($dbarr) { // Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link global $gkz, $showkey; if ($dbarr == "") { echo "(keine)"; } else { $stri=trim($dbarr, "{}"); $arr = explode(",",$stri); foreach($arr AS $val){ echo "Flurstück ".fzerleg($val)."
"; } } return 0; } function gemkg_name($gkey) { // Schluessel wird übergeben, Name dazu in der DB nachschlagen global $con; $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 AND g.endet IS NULL LIMIT 1;"; $v=array($gkey); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) {echo "\n

Fehler bei Gemarkung.

";} $zgmk=0; while($row = pg_fetch_array($res)) { // eigentlich nur EINE $gmkg=$row["bezeichnung"]; $zgmk++; } if ($zgmk == 0) { echo "\n

Gemarkung ".$gkey." ist unbekannt.

"; return; } return $gmkg; } function such_vor_arr($fsk) { // Suchen der Vorgaenger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in . // Akt. FS hat keine Verweise auf Vorgaenger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen. // Problem: Dies sind Arrays, die nicht performant durchsucht werden koennen. global $gkz, $con, $debug, $showkey, $filtkreis, $filtgem; // Bei kleineren 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, h.gml_id, h.flurstueckskennzeichen FROM ax_historischesflurstueck h " ."WHERE $1 = ANY (h.nachfolgerflurstueckskennzeichen) AND NOT h.endet IS NULL " ."UNION SELECT 'o' AS ftyp, o.gml_id, o.flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o " ."WHERE $1 = ANY (o.nachfolgerflurstueckskennzeichen) AND NOT o.endet IS NULL " ."ORDER BY flurstueckskennzeichen"; $v=array($fsk); $resv = pg_prepare("", $sqlv); $resv = pg_execute("", $v); if (!$resv) { echo "\n

Fehler bei Vorgänger-FS.

"; if ($debug > 2) {echo "\n

SQL=
".$sqlv."
$1='".$fsk."'

";} } $zv=0; while($rowv = pg_fetch_array($resv)) { $ftyp=$rowv["ftyp"]; $gmlv=$rowv["gml_id"]; $vfsk=$rowv["flurstueckskennzeichen"]; echo "Flurstück ".fzerleg($vfsk)."
"; $zv++; } if ($zv == 0) { echo "(keine)"; } // else {if ($debug > 2) {echo "\n

Treffer=".$zv."

";} } return; } // START // session_start(); $showkey="n"; // Var. aus Parameter initalisieren $cntget = extract($_GET); // alle Parameter in Variable umwandeln // strikte Validierung aller Parameter if (isset($gmlid)) { if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");} $fskennz=''; } else { // Alternativ $gmlid=''; if (isset($fskennz)) { // llgggg-fff-11111/222 oder z.B.'052647002001910013__' oder '05264700200012______' if (!preg_match('#^[0-9\-_/]{8,20}$#', $fskennz)) {die ("Eingabefehler fskennz");} } else { $fskennz=''; } } if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");} if ($showkey == "j") {$showkey=true;} else {$showkey=false;} // "j"/"n" als boolean umwandeln, ist praktischer abzufragen, wird oft gebraucht require_once("alkis_conf_location.php"); if ($auth == "mapbender") {require_once($mapbender);} include("alkisfkt.php"); ?> ALKIS Flurstücks-Historie Fehler beim Verbinden der DB

"; // Such-Parameter bekommen? Welche? if ($gmlid != "") { // Ja, die GML wurde uebergeben $parmtyp="GML"; $parmval=$gmlid; $whereclause="WHERE gml_id= $1 "; $v = array($gmlid); } elseif ($fskennz != "") { // Alternativ: Flurst.-Kennz. uebergeben $parmtyp="Flurstückskennzeichen"; $parmval=$fskennz; $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen $v = array($fskennz); } else { // Pfui! $parmtyp=""; die("

Parameter 'gmlid' oder 'fskennz' fehlt.

"); // Weitermachen sinnlos } if ($parmtyp != "") { // einer der beiden erlaubten Fälle // UNION-Abfrage auf 3ähnliche Tabellen, darin aber immer nur 1 Treffer. $felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, to_char(cast(zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, gemarkungsnummer, "; if ($filtgem == '') { // Filter Gemeinde ? $wheref=''; $whereh=''; $whereo=''; } else { // Zusätze zur WHERE-Clausel $wheref=" AND f.kreis = '".$filtkreis."' AND f.gemeinde = '".$filtgem."' "; $whereh=" AND h.kreis = '".$filtkreis."' AND h.gemeinde = '".$filtgem."' "; $whereo=" AND o.gemeinde = '".$filtgem."' "; } $sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" FROM ax_flurstueck f ".$whereclause.$wheref." AND f.endet IS NULL " ."UNION SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueck h ".$whereclause.$whereh." AND h.endet IS NULL " ."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueckohneraumbezug o ".$whereclause.$whereo." AND o.endet IS NULL;"; $resu = pg_prepare("", $sqlu); $resu = pg_execute("", $v); if ($rowu = pg_fetch_array($resu)) { $ftyp=$rowu["ftyp"]; $gmkgnr=$rowu["gemarkungsnummer"]; $flurnummer=$rowu["flurnummer"]; $zaehler=$rowu["zaehler"]; $nenner=$rowu["nenner"]; $flstnummer=$zaehler; if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr $fskenn=$rowu["flurstueckskennzeichen"]; $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m²"; $name=$rowu["name"]; // in DB ein Array $arrn=explode(",", trim($name, "{}") ); // PHP-Array $gemkname= gemkg_name($gmkgnr); $entsteh=$rowu["zeitpunktderentstehung"]; $vor=$rowu["vor"]; $nach=$rowu["nach"]; if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fuer selbst-link-Umschalter ueber footer } else { if ($debug > 1) { echo "

Fehler! Kein Treffer für ".$parmtyp." = '".$parmval."'


"; if ($debug > 2) { echo "

SQL=
".$sqlu."
$1=".$parmtyp." = '".$parmval."'

"; } } } } switch ($ftyp) { // Unterschiede Hist./Aktuell case 'a': $wert = "aktuell"; $ico= "Flurstueck.png"; $cls= "kennzfs"; break; case 'h': $wert = "historisch
(mit Raumbezug)"; $ico= "Flurstueck_Historisch.png"; // $cls= "kennzfsh"; break; case 'o': $wert = "historisch
ohne Raumbezug"; $ico= "Flurstueck_Historisch_oR.png"; $cls= "kennzfsh"; break; default: $wert = "nicht gefunden: ".$parmtyp." = '".$parmval."'"; $ico= "Flurstueck_Historisch.png"; $cls= "kennzfsh"; break; } // Balken echo "

ALKIS Flurstück ".$gmkgnr."-".$flurnummer."-".$flstnummer." 

"; echo "\n

Flurstück Historie

"; echo "\n\n\n\t\n\t\n\n
"; // linke Seite // darin Tabelle Kennzeichen echo "\n\t\n\t" ."\n\t\t\n\t\t\n\t\t\n\t" ."\n\t\n\t\t" ."\n\t\t" ."\n\t\t\n\t" ."\n\t
GmkgFlurFlurst-Nr.
"; if ($showkey) {echo "".$gmkgnr."
";} echo $gemkname." 
".$flurnummer."".$flstnummer."
" ."\n\t
"; // rechte Seite // FS-Daten 2 Spalten echo "\n\t" ."\n\t\n\t\t" ."\n\t\t" ."\n\t\n\t" ."\n\t\t" ."\n\t\t" ."\n\t" ."\n\t
Entstehung".$entsteh."
letz. Fortf"; foreach($arrn AS $val) { // Zeile f. jedes Element echo trim($val, '"')."
"; } echo "
" ."\n\t
"; if ($ftyp == "a") { // Aktuell -> Historie echo "\n
" ."" ."\n"; // Head // Spalte 1: F l u r s t ü c k echo "\n\n\t"; // Spalte 2: V o r g ä n g e r echo "\n\t"; // Spalte 3: N a c h f o l g e r echo "\n\t\n" ."\n
Flurstück Vorgänger Nachfolger
" ." ".$wert ."
Fläche ".$flae."" ."
"; switch ($ftyp) { // Unterschiede Historisch/Aktuell case 'a': such_vor_arr($fskenn); break; case 'h': if ($vor == "") { echo "Geometrische Suche
(noch nicht möglich)"; } else { vornach($vor); } break; case 'o': vornach($vor); break; } echo"
"; vornach($nach); echo "
"; if ($debug > 1) { $z=1; while($rowu = pg_fetch_array($resu)) { $ftyp=$rowu["ftyp"]; echo "

Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")

"; $z++; } } ?>

zurück  Drucken