Gemkg: '".$gemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'
";} if ($gemkg == "") { return 0; // Gemeinden oder Gemarkungen listen } elseif ( ! is_ne_zahl($gemkg)) { return 1; // Such Name } // 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 "Die 6-stellige Gemarkungsnummer '".$zgemkg6."' sollte mit Land '".$land."' beginnen.
"; } } else { // weder noch $zgemkg4=$gemkg; // kann eigentlich nicht funktionieren $zgemkg6=$gemkg; // Nullen davor setzen? echo "Die Gemarkungsnummer kann 4- oder 6-stellig (mit Land '".$land."') eingegeben werden.
"; } if ($zflur == "") { // keine Eingabe Flur-Nummer return 2; // also nur Gemarkungs-Nr eingegeben } elseif ( ! is_ne_zahl($zflur)) { echo "Die Flurnummer '".$zflur."' ist nicht numerisch
"; return 9; } elseif ($zfsnr == "") { // Flur eingegeben, aber keine Flurstücksnummer mehr return 3; // Flur } else { $zn=explode("/", $zfsnr, 2); // Bruchnummer? $zzaehler=h_hinten(trim($zn[0])); if (count($zn) > 1) {$znenner=h_hinten(trim($zn[1]));} else {$znenner="";} if ( ! is_ne_zahl($zzaehler)) { echo "Flurstücksnummer '".$zzaehler."' ist nicht numerisch
"; return 9; } elseif ($znenner == "") { return 4; } elseif (is_ne_zahl($znenner)) { return 5; } else { echo "Flurstücks-Nenner '".$znenner."' ist nicht numerisch
"; return 9; } } } function flurstueckskoordinaten($gml) { // Die Koordinaten zu einem Flurstück aus der Datenbank liefern // Parameter: gml_id des Flurstücke // Return: Array(x,y) global $epsg; $sqlk ="SELECT "; if($epsg == "25832") { // Transform nicht notwendig $sqlk.="st_x(st_Centroid(wkb_geometry)) AS x, "; $sqlk.="st_y(st_Centroid(wkb_geometry)) AS y "; } else { $sqlk.="st_x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, "; $sqlk.="st_y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y "; } $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 AND endet IS NULL;"; $v=array($gml); $resk=pg_prepare("", $sqlk); $resk=pg_execute("", $v); if (!$resk) {echo "\nFehler bei Koordinate.
";} $rowk = pg_fetch_array($resk); $koor=array("x" => $rowk["x"], "y" => $rowk["y"]); return $koor; } function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) { // Eine Kopf-Zeile zur Flur ausgeben global $gkz, $gemeinde, $epsg; if ($aktuell) {$cls=" aktuell";} else {$cls="";} echo "\nFehler bei Gemeinde
"; if ($debug >= 3) {echo "\n".$sql."
";} // ++Nur Entw. return 0; } $cnt = 0; while($row = pg_fetch_array($res)) { $gnr=$row["gemshl"]; $gemeindename=$row["gemname"]; zeile_gemeinde($gnr, $gemeindename, false); $cnt++; } // Foot if($cnt == 0) { echo "\nKeine Gemeinde.
"; } elseif($cnt >= $linelimit) { echo "\n".$cnt." Gemeinden ... und weitere
"; } elseif($cnt == 1) { // Eindeutig! return $gnr; } else { echo "\n".$cnt." Gemeinden
"; } return; } function ListGmkgInGemeinde($gkey, $bez) { // Die Gemarkungen zu einem Gemeinde-Key (aus Link) listen global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter; $linelimit=70; // Head zeile_gemeinde($gkey, $bez, true); // Body $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)); if (!$res) { echo "\nFehler bei Gemarkungen
"; return 1; } $cnt = 0; while($row = pg_fetch_array($res)) { $gnr=$row["gemashl"]; // 6stellig $gnam=$row["gemarkung"]; zeile_gemarkung($gnr, $gnam, false); $cnt++; } // Foot if($cnt == 0){ echo "\nKeine Gemarkung.
"; } elseif($cnt >= $linelimit) { echo "\n".$cnt." Gemarkungen ... und weitere
"; } elseif($cnt == 1) { // Eindeutig! return $gnr; } else { echo "\n".$cnt." Gemarkungen
"; } return; } function SuchGmkgName() { // Gemarkung suchen nach Name(-nsanfang) global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter; $linelimit=120; if(preg_match("/\*/",$fskennz)){ $match = trim(preg_replace("/\*/i","%", strtoupper($fskennz))); // Durchsuchte Namenspalte ist rechts mit Leerstellen aufgefüllt. Darum Wildcard am Ende erzwingen. if (substr($match, strlen($match), 1) != "%") {$match.="%";} } else { $match = trim($fskennz)."%"; } // 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 substring(g.gemshl from 6 for 3)='".$gemeinde."'"; break; case 2: // Liste $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); $res=pg_execute("", $v); if (!$res) { echo "\nFehler bei Gemarkung
"; return; } $cnt = 0; $gwgem=""; while($row = pg_fetch_array($res)) { $gemeindename=$row["gemname"]; if ($gwgem != $gemeindename) { // Gruppierung Gemeinde $gwgem = $gemeindename; $skey=$row["gemshl"]; zeile_gemeinde($skey, $gemeindename, false); } $gnam=$row["gemarkung"]; $gnr=$row["gemashl"]; // 6stellig zeile_gemarkung($gnr, $gnam, false); // wenn am Ende nur ein Treffer, dann aktuell=true $cnt++; } // Foot if($cnt == 0){ echo "\nKeine Gemarkung.
"; if ($debug > 1) { /* // Nach Umstellung auf NorGIS-Struktur muss im Mapbender die Gemeinde 3stellig konfiguriert werden if (strlen($gemeinde) < 3) { echo "URL-Parameter &gemeinde=nnn im Mapbender gazetteer_alkis.SRC muss 3stellig sein!
Ist aber '".$gemeinde."'.
SQL=
".$sql."
$1 = ".$match."
".$cnt." Gemarkungen ... und weitere
"; } elseif($cnt == 1) { // Eindeutig! return $gnr; // 6stellige Gemarkungsnummer! } else { echo "\n".$cnt." Gemarkungen
"; } return; } 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.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); if (!$resh) {echo "\nFehler bei Gemeinde und Gemarkung.
";} if ($rowh = pg_fetch_array($resh)) { $gmkg=$rowh["gemarkung"]; $skey=$rowh["gemshl"]; $snam=$rowh["gemname"]; zeile_gemeinde($skey, $snam, false); zeile_gemarkung($gkgnr6, $gmkg, $gkgaktuell); return true; } else { echo "\nGem.-Gemkg.-Kopf abgebrochen
";} return false; } } // Body $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); if (!$res) {echo "\nFehler bei Flur.
";} $zfl=0; while($row = pg_fetch_array($res)) { $zflur=$row["flur"]; zeile_flur($zgemkg4, $zflur, false, false); $zfl++; } // Foot if($zfl == 0) { echo "\nKeine Flur.
"; } elseif($zfl >= $linelimit) { echo "\n".$zfl." Fluren ... und weitere
"; } elseif($zfl > 1) { echo "\n".$zfl." Fluren
"; } return true; } function EineFlur() { // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle Flurstücke suchen global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg4, $zgemkg6, $zflur; $linelimit=900; // Wie groß kann eine Flur sein? // Head if (gg_head($zgemkg6, false)) { zeile_flur($zgemkg4, $zflur, true, true); } else { return false; } // Body $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, "; if($epsg == "25832") { // Transform nicht notwendig $sql.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; $sql.="st_y(st_Centroid(f.wkb_geometry)) AS y "; } else { $sql.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, "; $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($zgemkg4, $zflur, $linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) {echo "\nFehler bei Flur.
";} $zfs=0; while($row = pg_fetch_array($res)) { $fs_gml=$row["gml_id"]; $flur=$row["flurnummer"]; $fskenn=$row["zaehler"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], "", "", false); $zfs++; } // Flur-Foot if($zfs == 0) { echo "\nKein Flurstück.
"; } elseif($zfs >= $linelimit) { echo "\n".$zfs." Flurstücke... und weitere
"; } elseif($zfs > 1) { echo "\n".$zfs." Flurstücke
"; } return true; } function HistFlur() { // 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, $zgemkg4, $zgemkg6, $zflur; $linelimit=500; // Head if (gg_head($zgemkg6, false)) { zeile_flur($zgemkg4, $zflur, true, true); } else { return false; } // Body $whcl="WHERE flurstueckskennzeichen like $1 AND endet IS NULL "; $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 ;"; // "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); $res=pg_execute("", $v); if (!$res) {echo "\nFehler bei Historie Flur.
";} $zfs=0; while($row = pg_fetch_array($res)) { $ftyp=$row["ftyp"]; $fs_gml=$row["gml_id"]; // fuer Buchausk. $fskenn=$row["zaehler"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg4, $zflur, false); $zfs++; } // Foot if($zfs == 0) { echo "\nKein historisches Flurstück.
"; #if ($debug > 2) {echo "SQL=
".$sql."
$1 = ".$fskzwhere."
".$zfs." historische Flurst. ... und weitere
"; } elseif($zfs > 1) { echo "\n".$zfs." historische Flurstücke
"; } return true; } function EinFlurstueck() { // 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, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner; // Head if (gg_head($zgemkg6, false)) { // Kopfzeilen: Gemeinde, Gemerkung, .. zeile_flur($zgemkg4, $zflur, true, false); // .., Flur } else { return false; } // Body $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, "; if($epsg == "25832") { // Transform nicht notwendig $sql.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; $sql.="st_y(st_Centroid(f.wkb_geometry)) AS y "; } else { $sql.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, "; $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 f.zaehler= $3 "; // 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 "\nFehler bei Flurstück.
"; if ($debug > 2) {echo "SQL = '".$sql."'
Parameter $1='".$zgemkg4."' $2='".$zflur."' $3='".$zzaehler."'
";} } $zfs=0; while($row = pg_fetch_array($res)) { $fs_gml=$row["gml_id"]; $flur=$row["flurnummer"]; $fskenn=$row["zaehler"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], "", "", true); $zfs++; } // Foot if($zfs == 0) { echo "\n
Kein aktuelles Flurstück.
"; echo "\nFehler bei historischem Flurstück.
"; if ($debug > 2) {echo "SQL = '".$sql."'
Parameter: ".$fskzwhere."
";} return true; } $zfs=0; while($row = pg_fetch_array($res)) { // Schleife Hist-FS $ftyp=$row["ftyp"]; $fs_gml=$row["gml_id"]; $gknr=$land.$row["gemarkungsnummer"]; // Land davor $flur=$row["flurnummer"]; $fskenn=$row["zaehler"]; $nachf=$row["nachf"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, true); if ($nachf == "") { echo "\n
keine Nachfolger
"; } else { echo "\nNachfolger-Flurstücke:
"; // Direkte Nachfolger ermitteln. In $nachf steht ein Array von FS-Kennzeichen. // Von den einzelnen Kennz. ist unbekannt, ob diese noch aktuell sind // oder auch schon wieder historisch. // Nachfolger in DB suchen um den Status aktuell/historisch zu ermitteln $stri=trim($nachf, "{}"); $stri="'".str_replace(",", "','", $stri)."'"; $nawhcl="WHERE flurstueckskennzeichen IN ( ".$stri." ) AND endet IS NULL "; // 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; $v=array(); $nares=pg_prepare("", $nasql); $nares=pg_execute("", $v); if (!$nares) { echo "\nFehler bei Nachfolger.
"; if ($debug > 2) {echo "SQL = '".$nasql."'
";} return; } $zfsn=0; // inner Body while($narow = pg_fetch_array($nares)) { $naftyp=$narow["ftyp"]; $nagml=$narow["gml_id"]; $nagknr=$land.$narow["gemarkungsnummer"]; // Land davor, 4 auf 6 Stellen $naflur=$narow["flurnummer"]; $nafskenn=$narow["zaehler"]; if ($narow["nenner"] != "") {$nafskenn.="/".$narow["nenner"];} zeile_nachf_fs ($nagml, $nagknr, $naflur, $nafskenn, $naftyp); $zfsn++; } // inner Footer if ($zfsn == 0) { echo "\n
keine Nachfolger
"; } elseif ($zfsn > 1) { echo "\n".$zfsn." Nachfolger-Flst.
"; } echo "\nKein historisches Flurstück.
"; #if ($debug > 2) {echo "\n SQL= ".$sql."\n
$1 = FS-Kennz = '".$fskzwhere."'
gemeinde='".$gemeinde."'. gfilter='".$gfilter."'
";} // Validation: Eingabefeld aus Formular. // Suchbegriff (Gemarkungsname) oder Flurstücks-Kennzeichen (ll)gggg-fff-zzzz/nnn (11). // Hier formatierte Meldung und html-Foot. if (isset($fskennz) and $fskennz != "" ) { if (!preg_match('#^[0-9a-zA-ZäöüÄÖÜß* -/]{1,25}$#', $fskennz)) { echo "Eingabe unzulässig!
"; $fskennz=""; } } else { $fskennz=""; } if($gm != "") { // Self-Link aus Gemeinde-Liste $trans="Gemarkungen zur Gemeinde"; $gnr=ListGmkgInGemeinde($gm, $bez); if ($gnr > 0) { $zgemkg4=$gnr; $zgemkg6=$land.$zgemkg4; EineGemarkung(false); } } else { // Die Formular-Eingabe interpretieren (kann auch ein Link sein) $retzer=ZerlegungFsKennz($fskennz); if ($debug >= 1) {echo "\nReturn Zerlegung: ".$retzer."
";} switch ($retzer) { // Returnwert der Zerlegung des FS-Kennz. case 0: // leere Eingabe if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert $trans="Liste der Gemarkungen"; SuchGmkgName(); } else { $trans="Liste der Gemeinden"; ListGemeinden(); } break; case 1: $trans="Suche Gemarkungsname"; $gnr=SuchGmkgName(); if ($gnr > 0) { $trans="1 Gemarkung, Fluren dazu"; $zgemkg6=$gnr; $zgemkg4=substr($zgemkg6, 2); EineGemarkung(false); } break; case 2: $trans="Fluren in Gemarkung"; EineGemarkung(true); break; case 3: if ($phist) { $trans="historische Flurst. in Flur"; HistFlur(); } else { $trans="Flurstücke in Flur"; EineFlur(); } break; case 4: if ($phist) { $trans="historisches Flurstück"; HistFlurstueck(); } else { $trans="Flurstück"; EinFlurstueck(); } break; case 5: if ($phist) { $trans="historisches Flurstück"; HistFlurstueck(); } else { $trans="Flurstück"; EinFlurstueck(); } break; case 9: $trans="falsche Eingabe"; echo "\nBitte ein Flurstückskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn
"; break; } } // 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. echo " "; ?>