".$dbname.$dbvers.$gkz);
echo <<ALKIS-Suche Eigentümer
END;
// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
function familiensuche() {
global $gkz, $gemeinde, $epsg, $name; // $debug
if(isset($name)) { // Familiensuche
echo "\n
"; // im Limit
}
return;
}
function getGBbyPerson() {
// 2 =================================
// Grundbücher zur gewählten Person
// ===================================
// Es wird in dieser Function nicht geprüft, ob die gefundenen Grundbücher auch Flurstücke
// haben, die im gefilterten Bereich (Gemeinde) liegen. Es können daher Sackgassen entstehen,
// also Grundbücher, die in der nächsten Stufe bei Filterung nicht zu Treffern führen.
// Das Joinen bis zum FS unter Berücksichtigung von speziellen Buchungen ist zu aufwändig.
// Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
// Alternativ würde eine Hilfstabelle benötigt, in der im PostProcessing
// das GB-zu-Gemeinde-Verhältnis vorbereitet wird.
global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath, $debug, $bltbez, $bltblatt, $bltseite;
$linelimit=150;
$linelimit=15; // +++ TEST +++
familiensuche();
personendaten();
#if ($debug > 0) {echo "\n
Nur Grundbücher
"; }
// Suche nach Grundbüchern der Person
$sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam ";
$sql.="FROM alkis_beziehungen bpn ";
$sql.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
$sql.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von ";
$sql.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
$sql.="JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.bezirk = b.bezirk ";
$sql.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
if ($bltbez.$bltblatt != "") { // Blättern, Fortsetzen bei ...
$sql.="AND ((b.bezeichnung > '".$bltbez."') ";
$sql.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."')) ";
}
$sql.="ORDER BY b.bezeichnung, gb.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
if ($bltseite == "") { // Seite 1
$bltseite = 1;
} else { // Folgeseite
echo "\n
Teil ".$bltseite;
}
$v=array($person, $linelimit);
$res=pg_prepare("", $sql);
$res=pg_execute("", $v);
if (!$res) {
echo "\n
";
}
return;
}
function getFSbyGB($backlink) {
// 3 =================================
// Flurstücke zum gewählten Grundbuch
// ===================================
// Zu einem Grundbuch (gml_id als Parameter) werden alle darauf gebuchten Flurstücke gesucht.
// Im ersten Schritt sind das direkt gebuchten Flurstücke.
// Im zweiten Schritt wird gesucht nach Rechten einer Buchungstelle des durchsuchten Blattes an anderen
// Buchungstellen. Es werden dann die Flurstücke darauf gelistet.
global $gkz, $gemeinde, $name, $person, $blattgml, $scalefs, $auskpath, $epsg, $gfilter, $debug;
$linelimit=150;
if($backlink) { // Erneuter Ansatz bei Person oder GB möglich.
// Namen ermitteln
$sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 ";
$v=array($person);
$res=pg_prepare("", $sql);
$res=pg_execute("", $v);
if (!$res) {
echo "\n
Fehler bei Eigentümer
";
}
$row = pg_fetch_array($res); // nur eine Zeile
$nnam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
$vnam=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
echo "\n\t
";
}
GB_Buchung_FS($linelimit); // Externe Function: Blatt > Grundstück > Flurst.
return;
}
function getGBuFSbyPerson() {
// 2 + 3 =========================================
// Grundbücher UND Flurstücke zur gewählten Person
// ===============================================
// Dies ist die Kombination von Stufe 2 (Grundbücher zur Person) und 3 (Flurstücke zum Grundbuch)
// in einem einzelnen Schritt. Wenn auf Gemeinde gefiltert wird, dann können in Stufe 2 (noch ohne Filter)
// auch Grundbücher gefunden werden, die dann auf Stufe 3 (mit Filter) keine FS liefern ("Sackgasse"!).
// Wenn aber per JOIN "GB -> FS -> Gemarkung -> Gemeinde" geprüft wird, dann können
// die Daten ja auch gleich ausgegeben werden.
// Für Fälle in denen nicht nach Gemeinde gefiltert wird (z.B. ganzer Kreis) kann weiter
// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich übersichtlicher,
// weil "ungefiltert" in "2+3" zu lange Listen entstehen würden, die durchblättert werden müssen.
global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath, $scalefs, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht;
$linelimit=80; // als Limit "Anzahl Flurstücke" in den beiden folgenden Abfragen
// darf nun etwas knapper sein, weil man jetzt blättern kann
familiensuche();
personendaten();
// Wenn das Limit überschritten wurde: zusätzliche Parameter "blt"=Blättern
// $bltbez = Bezirk-Name
// $bltblatt = BlattMitBuchstabe
// $bltbvnr = lfd.Nr der Buchungsstelle
// $bltseite = fortlaufende Seiten-Nr
// $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
// SQL-Bausteine vorbereiten
// Direkte Buchungen suchen mit: $sql1 + $sqla1 + $sql2
// Sonderfälle suchen mit: $sql1 + $sqlz + $sqla2 + $sql2
// Baustein: SQL-Anfang fuer beide Varianten
$sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam, ";
$sql1.="s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
if($epsg == "25832") { // Transform nicht notwendig
$sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
$sql1.="st_y(st_centroid(f.wkb_geometry)) AS y ";
} else {
$sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";
}
$sql1.="FROM alkis_beziehungen bpn ";
$sql1.="JOIN ax_namensnummer nn ON bpn.beziehung_von=nn.gml_id ";
$sql1.="JOIN alkis_beziehungen bng ON nn.gml_id=bng.beziehung_von ";
$sql1.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
$sql1.="JOIN alkis_beziehungen vbg ON gb.gml_id=vbg.beziehung_zu ";
$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von=s1.gml_id ";
$sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; // quer-ab
// Baustein: Zwischen-JOIN (nur bei zweiter Abfrage)
$sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von=s1.gml_id ";
$sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu=s2.gml_id ";
// Baustein: Auswahl 1 oder 2
$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id=vfb.beziehung_zu ";
$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id=vfb.beziehung_zu ";
// Baustein: SQL-Ende fuer beide Varianten
$sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von=f.gml_id ";
$sql2.="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
$sql2.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
$sql2.="AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
switch ($gfilter) { // Gemeinde-Filter
case 1: // Einzelwert
$sql2.="AND ot.gemeinde=".$gemeinde." "; break;
case 2: // Liste
$sql2.="AND ot.gemeinde in (".$gemeinde.") "; break;
}
$sql3 ="ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
// Sortier-Problem: laufendenummer in varchar linksbündig
// Die Bausteine in 2 Varianten kombinieren
// Blättern mit folgenden Parametern: $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht
if ($bltbez.$bltblatt.$bltbvnr != "") { // Blättern, Fortsetzen bei ...
$bltwhere ="AND ((b.bezeichnung > '".$bltbez."') ";
$bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."') ";
$bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung = '".$bltblatt."' AND cast(s1.laufendenummer AS integer) >= ".$bltbvnr." )) ";
} // Flurstücke in der BVNR werden ggf. wiederholt
if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
$bltseite = 1;
} else { // Folgegeseite: nur Teil 1 *oder* 2
echo "\n
Teil ".$bltseite." - ";
switch ($bltrecht) {
case "nur":
echo "nur Rechte an .. Buchungen
"; break;
case "ohne":
echo "nur direkte Buchungen"; break;
default:
echo ""; break;
}
}
// Fälle ohne "Rechte an"
if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
// Blatt Fehler bei Buchung und Flurstück.";
if ($debug >= 3) {echo "\n
"; // im Limit
}
}
if ($bltrecht == "" and $zfs1 > 0) { // beides
echo ""; // dann Trenner
}
// Fälle mit "Rechte an"
if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
// buchungsStelle2 < an < buchungsStelle1
$sql=$sql1.$sqlz.$sqla2.$sql2.$bltwhere.$sql3; // Rechte an
$v=array($person, $linelimit);
$res=pg_prepare("", $sql);
$res=pg_execute("", $v);
if (!$res) {
echo "\n
";}
if ($gemeinde == "") {
$gfilter = 0; // Gemeinde ungefiltert
} elseif(strpos($gemeinde, ",") === false) {
$gfilter = 1; // Gemeinde Einzelwert
} else {
$gfilter = 2; // Gemeinde Filter-Liste
}
// Quo Vadis?
if(isset($blattgml)) { // 3. Stufe: Flurstücke zum Grundbuch
// Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem Eigentümer.
// Wenn Parameter mitgegeben wurden, können diese für einen "Link zurück" verwendet werden.
$trans="Flurstücke zum Grundbuch";
getFSbyGB(true); // mit BackLink
} elseif(isset($person)) { // 2. Stufe: Grundbücher zur Person
// Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
if ($debug >= 2) {echo "\n
Gemeinde-Filter-Steuerung = '".$gfilter."'
";}
// Die Filtereinstellung beeinflusst die Such-Strategie:
if ($gfilter == 0) { // Keine Filterung auf "Gemeinde": große Datenmenge
$trans="Grundbücher zum Eigentümer";
getGBbyPerson();
// Also schrittweise erst mal Stufe 2 = Grundbücher zur Person suchen.
// Diese Function hat auch noch keine Gemeinde-Filter-Funktion auf GB-Ebene.
if(isset($blattgml) ) { // Es wurde nur EIN Grundbuch zu der Person gefunden.
$trans="1 Blatt zum Eigentümer";
getFSbyGB(false); // Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
}
} else { // mit Filter auf Gemeinde: weniger Daten?
$trans="Grundb. und Flurst. zum Eigentümer";
getGBuFSbyPerson(); // Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
}
} elseif(isset($name)) { // Suchbegriff aus Form - 1. Stufe: Suche nach Name
$trans="Namensuche \"".$name."\"";
getEigByName(); // Suchen nach Namensanfang
if(isset($person)) { // genau EIN Treffer
$trans="1 Grundbuch zum Namen";
getGBbyPerson(); // Dann gleich das Grundbuch hinterher
}
} elseif ($debug >= 2) {
echo "\n
Parameter?
"; // Programmfehler, soll nicht vorkommen
}
// Titel im Kopf anzeigen
echo "\n";
?>