source: trunk/mapbender/http/nav/alkisnav_eig.php @ 374

Revision 374, 25.7 KB checked in by frank.jaeger, 7 years ago (diff)

kleine Anpassung bei Adressen-Darstellung

Line 
1<?php
2/*      Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil EigentÃŒmer-Suche
3        Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
4
5 Version vom
6        2016-02-11      Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
7        2016-03-02  $gemeinde auf feste LÀnge korrigieren
8        2016-07-18      Personendaten: Zeilen getauscht. Wie Brief-Anschrift.
9*/
10
11// Variable initialisieren
12$gbkennz="";
13$blattgml="";
14$person ="";
15
16$cntget = extract($_GET);
17$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÀr ..
18include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
19include("alkisnav_fkt.php"); // Funktionen
20$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password;
21$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$gkz);
22
23echo <<<END
24<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
25<html>
26<head>
27        <meta http-equiv="cache-control" content="no-cache">
28        <meta http-equiv="pragma" content="no-cache">
29        <meta http-equiv="expires" content="0">
30        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
31        <title>ALKIS-Suche Eigent&uuml;mer</title>
32        <link rel="stylesheet" type="text/css" href="alkisnav.css">
33        <script type="text/javascript">
34                function imFenster(dieURL) {
35                        var link = encodeURI(dieURL);
36                        window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
37                }
38                function transtitle(trans) {
39                        document.getElementById('transaktiontitle').innerHTML = trans;
40                }
41        </script>
42</head>
43<body>
44<a href='javascript:history.back()'>
45        <img src="ico/zurueck.png" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
46</a>&nbsp;
47<span title='zuletzt ausgef&uuml;hrte Aktion'>
48        <dfn class='title' id='transaktiontitle'></dfn>
49</span>
50
51END;
52
53function familiensuche() {
54        // Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen (Nachnamen) zu suchen.
55        // Bei versehendlich falschem Vornamen muss nicht von vorn begonnen werden.
56        global $gkz, $gemeinde, $epsg, $name;
57        if(isset($name)) { // Familiensuche
58                echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
59                        echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer_2.png' width='16' height='16' alt='FAM' title='Andere Personen mit diesem Nachnamen'> ";
60                        echo "\n<a class='back' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;name=".$name."'>\"".$name."\"</a>";
61                echo "\n</div>\n<br>"; 
62        }
63        return;
64}
65
66function personendaten() {
67        // Adresse und Geburtsdatum der aktuellen Person ausgeben
68        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
69
70        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil,
71        a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer
72        FROM ax_person p LEFT JOIN ax_anschrift a ON a.gml_id=ANY(p.hat)
73        WHERE p.gml_id= $1 AND p.endet IS NULL AND a.endet IS NULL LIMIT 1;";   
74        // Es wird nur EINE Zeile ausgewertet
75
76        $v=array($person);
77        $res=pg_prepare("", $sql);
78        $res=pg_execute("", $v);
79        if (!$res) {echo "\n<p class='err'>Fehler bei Name</p>\n";}
80        $row = pg_fetch_array($res);
81
82        $zeil1=$row["nachnameoderfirma"].", ".$row["vorname"];
83        $gebdat=$row["geburtsdatum"];
84        if ($gebdat != "") {$zeil1.= ", geb. ".$gebdat;}
85        $best=$row["namensbestandteil"];
86        if ($best != "") {$zeil1.= ", ".$best;}
87        $zeil1=htmlentities($zeil1, ENT_QUOTES, "UTF-8");
88
89        // 2016-07-18: Zeile 2 mit 3 getauscht. Wie Brief-Anschrift
90        $zeil2= trim($row["strasse"]." ".$row["hausnummer"]);
91        if ($zeil2 != "") {
92                $zeil2= "\n\t<br>".htmlentities($zeil2, ENT_QUOTES, "UTF-8");
93        }
94
95        $zeil3=trim($row["plz"]." ".$row["ort_post"]);
96        if ($zeil3 != "") {
97                $zeil3="\n\t<br>".htmlentities($zeil3, ENT_QUOTES, "UTF-8");
98        }
99
100// Tabelle: Sp.1=Icon, Link zur Auskunft Person, Sp.2=Rahmen
101        echo "
102<div class='pe aktuell'>
103<table>
104<tr>
105        <td valign='top'>
106                <a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$person."\")'>
107                        <img class='nwlink' src='ico/Eigentuemer.png' width='16' height='16' alt='EIG' title='Nachweis'>
108                </a>
109        </td>
110        <td>
111                <p class='nam'>".$zeil1.$zeil2.$zeil3."</p>
112        </td>
113</tr>
114</table>
115</div>";
116        return;
117}
118
119function getEigByName() {
120        // 1 // Eigentuemer nach Name(-nsanfang)
121        global $gkz, $debug, $gemeinde, $epsg, $name, $person, $gfilter;
122        $linelimit=150;
123        $arr = explode(",", $name);
124        $name0 = trim($arr[0]); // Nachname
125        if (count($arr) > 1) {
126                $name1=trim($arr[1]);   // Vorname
127        } else {
128                $name1="";
129        }
130        if(preg_match("/\*/",$name0)){
131                $match = trim(preg_replace("/\*/i","%", strtoupper($name0)));
132        } else {
133                $match = trim($name0)."%";
134        }       
135        if(preg_match("/\*/",$name1)){
136                $match1 = trim(preg_replace("/\*/i","%", strtoupper($name1)));
137        } else {
138                $match1 = trim($name1)."%";
139        }
140       
141        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.gml_id FROM ax_person p ";
142
143// Der Filter auf "Gemeinde" bleibt hier zunÀchst unberÌcksichtigt, bis im NorGIS-ALKIS-Importer ein Ersatz
144// geschaffen wurde fÃŒr die Tabelle "gemeinde_person" aus dem Post-Processing der "klassischen" Datenstruktur.
145// Es können somit Personen gefunden werden, die kein GrundstÌck im berechtigten Bereich haben.
146// Wenn eine Gemeinde-DB aus eigenem NBA geladen wurde, ist das unkritisch.
147// Wenn eine Gemeinde aus einer kreisweiten DB beauskunftet wird, ist das so noch nicht einsetzbar.
148
149/*      if ($gfilter > 0) {
150                $sql.="JOIN gemeinde_person g ON p.gml_id=g.person WHERE p.endet IS NULL AND ";
151                switch ($gfilter) {
152                        case 1: // Einzel
153                                $sql.="g.gemeinde='".$gemeinde."' AND "; break;
154                        case 2: // Liste
155                                $sql.="g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') AND "; break;
156                }
157        } else { */
158                $sql.="WHERE p.endet IS NULL AND ";
159//      }
160
161        if($match1 != '%'){
162                $sql.="nachnameoderfirma ILIKE $1 AND p.vorname ILIKE $2 ";             
163                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $3 ;";
164                $v=array($match, $match1, $linelimit);
165        }else{
166                $sql.="nachnameoderfirma ILIKE $1 ";           
167                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $2 ;";
168                $v=array($match, $linelimit);
169        }
170        $res=pg_prepare("", $sql);
171        $res=pg_execute("", $v);
172        if (!$res) {
173                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
174                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1='".$match."'</p>";}
175                return;
176        }
177        $cnt = 0;
178        while($row = pg_fetch_array($res)) {
179                $nachname=$row["nachnameoderfirma"];
180                $vorname=$row["vorname"];
181                $persongml=$row["gml_id"];
182                zeile_person($persongml, $nachname, $vorname);
183                $cnt++;
184        }
185        if($cnt == 0){
186                echo "\n<p class='anz'>Kein Eigent&uuml;mer gefunden.</p>";
187        } elseif($cnt >= $linelimit) { // das Limit war zu knapp
188                echo "\n<p class='anz' title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
189        } elseif($cnt == 1){ // Eindeutig!
190                $person = $persongml;
191        } else {
192                echo "\n<p class='anz'>".$cnt." Eigent&uuml;mer mit '".$name."'</p>";   // im Limit
193        }
194        return;
195}
196
197function getGBbyPerson() {
198        // 2 // GrundbÃŒcher zur gewÀhlten Person
199// Es wird in dieser Function nicht geprÃŒft, ob die gefundenen GrundbÃŒcher auch FlurstÃŒcke
200// haben, die im gefilterten Bereich (Gemeinde) liegen. Es können daher "Sackgassen" entstehen,
201// also GrundbÌcher, die in der nÀchsten Stufe bei Filterung nicht zu Treffern fÌhren.
202// Das Joinen bis zum FS unter BerÌcksichtigung von speziellen Buchungen ist aber zu aufwÀndig.
203// Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
204// Alternativ wÌrde eine Hilfstabelle benötigt, in der im PostProcessing
205// das GB-zu-Gemeinde-VerhÀltnis vorbereitet wird.
206        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $debug, $bltbez, $bltblatt, $bltseite, $kennztyp, $zgbbez;
207        $linelimit=150;
208
209        // Head
210        familiensuche();
211        personendaten();
212
213        // Body
214        // Suche nach GrundbÃŒchern der Person
215        $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam
216        FROM ax_namensnummer n JOIN ax_buchungsblatt gb ON n.istbestandteilvon=gb.gml_id
217        JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk
218        WHERE n.bennennt = $1 AND n.endet IS NULL AND gb.endet IS NULL AND b.endet IS NULL;";
219
220        // Parameter $gbkennz, z.B. nach Klick auf Zeile "Bezirk"
221        if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
222                #if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";}
223                $sql.="AND b.bezirk='".$zgbbez."' ";
224                $bezirkaktuell = true;
225        } else {
226                $bezirkaktuell = false;
227        }
228
229        if ($bltbez.$bltblatt != "") { // BlÀttern, Fortsetzen bei ...
230                $sql.="AND ((b.bezeichnung > '".$bltbez."') ";
231                $sql.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."')) ";
232        }
233
234        $sql.="ORDER BY b.bezeichnung, gb.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
235
236        if ($bltseite == "") { // Seite 1
237                $bltseite = 1;
238        } else { // Folgeseite
239                echo "\n<p class='ein'>Teil ".$bltseite;
240        }
241        $v=array($person, $linelimit);
242        $res=pg_prepare("", $sql);
243        $res=pg_execute("", $v);
244        if (!$res) {
245                echo "\n<p class='err'>Fehler bei Grundbuch</p>";
246                return;
247        }
248        $cnt = 0;
249        $gwbez="";
250        while($row = pg_fetch_array($res)) {
251                $beznr=$row["bezirk"];
252                if ($gwbez != $beznr) { // Gruppenwechsel Bezirk
253                        $beznam=$row["beznam"];
254                        $gwbez=$beznr;
255                        zeile_gbbez ($beznam, $beznr, $bezirkaktuell);
256                }
257                $gml=$row["gml_g"];
258                $blatt=$row["blatt"];
259                zeile_blatt($zgbbez, "", $gml, $blatt, false, $person, false);
260                $cnt++;
261        }
262/*      if ($cnt == 0) { // Nur Entwicklg.
263                if ($debug > 1) {echo "\n<p class='err'>keine Buchung</p>";}
264                if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."',<br>$1 = '".$person."'<p>";}
265        } */
266
267        // Foot
268        if($cnt == 0) {
269                echo "\n<p class='anz'>Kein Grundbuch zum Eigent&uuml;mer</p>";
270        } elseif($cnt >= $linelimit) {
271                echo "\n<p class='blt'>".$cnt." Grundb. zum Eigent.";
272
273                // BlÀttern
274                $nxtbltbez=urlencode($beznam);
275                $nxtbltblatt=urlencode($blatt);
276                $nxtbltseite=$bltseite + 1;
277                echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltseite=".$nxtbltseite."' ";
278                echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt."'>weitere</a>";
279                echo "</p>";
280        } elseif($cnt == 1) { // Eindeutig!
281                $blattgml=$gml; // dann Stufe 3 gleich nachschieben
282        } else {
283                echo "\n<p class='anz'>".$cnt." Grundb&uuml;cher zum Eigent&uuml;mer</p>";
284        }
285        return;
286}
287
288function getFSbyGB($backlink) {
289        // 3 // FlurstÃŒcke zum Grundbuch
290// Zu einem Grundbuch (gml_id als Parameter) werden alle darauf gebuchten FlurstÃŒcke gesucht.
291// Im ersten Schritt sind das direkt gebuchten FlurstÃŒcke.
292// Im zweiten Schritt wird gesucht nach Rechten einer Buchungstelle des durchsuchten Blattes an anderen
293// Buchungstellen.
294        global $gkz, $gemeinde, $name, $person, $blattgml, $epsg, $gfilter, $debug;
295        if($backlink) { // Erneuter Ansatz bei Person oder GB möglich.
296
297                // Namen ermitteln
298                $sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 AND endet IS NULL;";
299                $v=array($person);
300                $res=pg_prepare("", $sql);
301                $res=pg_execute("", $v);
302                if (!$res) {echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";}
303                $row = pg_fetch_array($res); // nur eine Zeile
304                zeile_person($person, $row["nachnameoderfirma"], $row["vorname"]);
305
306                // Grundbuch-Daten ermitteln
307                $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam ";
308                $sql.="FROM ax_buchungsblatt gb JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk ";
309                $sql.="WHERE gb.gml_id= $1 AND gb.endet IS NULL and b.endet IS NULL LIMIT 1 ;";
310                $v=array($blattgml);
311                $res=pg_prepare("", $sql);
312                $res=pg_execute("", $v);
313                if (!$res) {echo "\n<p class='err'>Fehler bei Grundbuch</p>";}
314                $row = pg_fetch_array($res); // eine Zeile
315                $gml=$row["gml_g"];
316                $bezirk=$row["bezirk"];
317                $beznam=$row["beznam"];
318                $blatt=$row["blatt"];
319                zeile_gbbez ($beznam, $bezirk, false);
320                zeile_blatt($bezirk, "", $blattgml, $blatt, false, $person, true);     
321        }
322        GB_Buchung_FS(250, ""); // Blatt > Grundst. > FS, max. 250, ohne Link "Buchung"
323        return;
324}
325
326function getGBuFSbyPerson() {
327        // 2 + 3 // GrundbÃŒcher UND FlurstÃŒcke zur gewÀhlten Person
328// Dies ist die Kombination von Stufe 2 (GrundbÃŒcher zur Person) und 3 (FlurstÃŒcke zum Grundbuch)
329// in einem einzelnen Schritt. Wenn auf Gemeinde gefiltert wird, dann können in Stufe 2 (noch ohne Filter)
330// auch GrundbÃŒcher gefunden werden, die dann auf Stufe 3 (mit Filter) keine FS liefern ("Sackgasse"!).
331// Wenn aber per JOIN "GB -> FS -> Gemarkung -> Gemeinde" geprÌft wird, dann können
332// die Daten ja auch gleich ausgegeben werden.
333// FÌr FÀlle in denen nicht nach Gemeinde gefiltert wird (z.B. ganzer Kreis) kann weiter
334// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher,
335// weil "ungefiltert" in "2+3" zu lange Listen entstehen wÌrden, die durchblÀttert werden mÌssen.
336
337        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht, $kennztyp, $zgbbez;
338        $linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen
339        // darf nun etwas knapper sein, weil man jetzt blÀttern kann
340        familiensuche();
341        personendaten();
342
343        // Wenn das Limit ÃŒberschritten wurde: zusÀtzliche Parameter "blt"=BlÀttern:
344        // - $bltbez   = Bezirk-Name 
345        // - $bltblatt = BlattMitBuchstabe
346        // - $bltbvnr  = lfd.Nr der Buchungsstelle
347        // - $bltseite = fortlaufende Seiten-Nr
348        // - $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
349
350        // SQL-Bausteine vorbereiten
351        //  Direkte Buchungen suchen mit:  $sql1 + $sqla1 + $sql2
352        //  SonderfÀlle suchen mit:        $sql1 + $sqla2 + $sql2
353
354        // Baustein 1: SQL-Anfang fuer beide Varianten
355        $sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam,
356        s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemashl, trim(trailing from ot.gemarkung) AS gemarkungsname, ";
357        if($epsg == "25832") { // Transform nicht notwendig
358                $sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
359                $sql1.="st_y(st_centroid(f.wkb_geometry)) AS y ";
360        } else { 
361                $sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
362                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";                     
363        }
364
365        // NamenNummer >istbestandteilvon> buchungsblatt <istbestandteilvon< buchungsstelle-1
366        $sql1.="FROM ax_namensnummer nn
367        JOIN ax_buchungsblatt gb ON gb.gml_id=nn.istbestandteilvon
368        JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk
369        JOIN ax_buchungsstelle s1 ON gb.gml_id=s1.istbestandteilvon ";
370
371        // Baustein A: Auswahl 1 oder 2
372        // buchungsstelle-1 <istGebucht< FS
373        $sqla1 ="JOIN ax_flurstueck f ON s1.gml_id=f.istgebucht ";
374
375        // buchungsStelle1 (herr.) >an> buchungsStelle2 (dien.) <istGebucht< FS
376        $sqla2 ="JOIN ax_buchungsstelle s2 ON s2.gml_id=ANY(s1.an) ";
377        $sqla2.="JOIN ax_flurstueck f ON s2.gml_id=f.istgebucht ";
378
379        // Baustein 2: SQL-Ende fuer beide Varianten
380        $sql2 ="JOIN gema_shl ot ON f.land || f.gemarkungsnummer = ot.gemashl  "; // Ortsteil
381        $sql2.="WHERE nn.benennt = $1 AND nn.endet IS NULL AND gb.endet IS NULL AND s1.endet IS NULL AND f.endet IS NULL ";
382        $sqlw2="AND s2.endet IS NULL ";
383
384        // Parameter $gbkennz nach Klick auf Zeile "Bezirk"
385        if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
386                #if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";}
387                $sql2.="AND b.bezirk = '".$zgbbez."' ";
388                $bezirkaktuell = true;
389        } else {
390                $bezirkaktuell = false;
391        }
392
393        switch ($gfilter) { // Gemeinde-Filter
394                case 1: // Einzelwert
395                        $sql2.="AND substring(ot.gemshl from 6 for 3)='".$gemeinde."' "; break;
396                case 2: // Liste
397                        $sql2.="AND substring(ot.gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; break;
398        }
399
400        $sql3 ="ORDER BY b.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
401        // Sortier-Problem: laufendenummer in varchar linksbÃŒndig
402
403        // Die Bausteine in 2 Varianten kombinieren
404
405        // BlÀttern mit folgenden Parametern: $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht
406        if ($bltbez.$bltblatt.$bltbvnr == "") {
407                $bltwhere ="";
408        } else { // BlÀttern, Fortsetzen bei ...
409                $bltwhere ="AND ((b.bezeichnung > '".$bltbez."') ";
410                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."') ";
411                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung = '".$bltblatt."' AND cast(s1.laufendenummer AS integer) >= ".$bltbvnr." )) ";
412        } // FlurstÃŒcke in der angeblÀtterten BVNR werden ggf. wiederholt
413
414        if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
415                $bltseite = 1;
416        } else { // Folgegeseite: nur Teil 1 *oder* 2
417                echo "\n<p class='ein'>Teil ".$bltseite." - ";
418                switch ($bltrecht) {
419                        case "nur":
420                                echo "nur Rechte an .. Buchungen</p>"; break;
421                        case "ohne":
422                                echo "nur direkte Buchungen</p>"; break;
423                        default:
424                                echo "</p>"; break;
425                }
426        }
427
428        // FÀlle ohne "Rechte an"
429        if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
430                // Blatt <istBestandteilVon<  Buchungsstelle <istGebucht< Flurstck.
431                $sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
432
433                $v=array($person, $linelimit);
434                $res=pg_prepare("", $sql);
435                $res=pg_execute("", $v);
436                if (!$res) {
437                        echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
438                        if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."', $1 = '".$person."'<p>";}
439                        return;
440                }
441
442                $zfs1=0;
443                $gwbez="";
444                while($row = pg_fetch_array($res)) {
445                        $bezirk=$row["bezirk"];
446                        if ($gwbez != $bezirk) { // Gruppierung Bezirk
447                                $gwbez=$bezirk;
448                                $beznam=$row["beznam"];
449                                $gwgb="";
450                                zeile_gbbez($beznam, $gwbez, $bezirkaktuell);
451                        }
452                        $gb_gml=$row["gml_g"];
453                        if ($gwgb != $gb_gml) { // Gruppierung Blatt (Grundbuch)
454                                $blatt=$row["blatt"];
455                        //      zeile_blatt($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
456                                zeile_blatt($bezirk, "", $gb_gml, $blatt, false, $person, false);
457                                $gwgb = $gb_gml;        // Steuerg GW GB
458                                $gwbv = "";             // Steuerg GW BVNR
459                        }
460                        $bvnr=$row["lfd"];
461                        if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR)
462                                $gwbv = $bvnr;
463                                $bsgml=$row["bsgml"];
464                                zeile_buchung($bsgml, $bvnr, "", false, false); //ohne Link
465                        }
466                        $fs_gml=$row["gml_id"];
467                        $gmkg=$row["gemarkungsname"];
468                        $flur=$row["flurnummer"];
469                        $fskenn=$row["zaehler"];
470                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
471                        zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false);
472                        $zfs1++;
473                }
474
475                if($zfs1 == 0) {
476                        if ($bltrecht == "ohne") {echo "\n<p class='anz'>Keine direkte Buchung gefunden.</p>";}
477                        /* nur Entw.
478                        if ($debug > 1) {
479                                echo "\n<p class='dbg'>Keine direkte Buchung gefunden.</p>";
480                                if ($debug > 2) {echo "<p class='err'>SQL = '".$sql."', $1 = '".$person."'<p>";}
481                        } */
482                } elseif($zfs1 >= $linelimit) { // das Limit war zu knapp
483                        echo "\n<p class='blt'>";
484                        if ($bltseite > 1) {echo "weitere ";}
485                        echo $zfs1." Flurst&uuml;cke";
486
487                        // B l À t t e r n  (eine Folgeseite anbieten)
488                        $nxtbltbez=urlencode($beznam);
489                        $nxtbltblatt=urlencode($blatt);
490                        $nxtbltseite=$bltseite + 1;
491                        echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person;
492                        echo "&amp;gbkennz=".$zgbbez; // Filter Bezirk
493                        echo "&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=ohne' ";
494                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
495                        echo "</p>";
496                } elseif($zfs1 > 1) { // Meldung (Plural) ab 2, im Limit
497                        echo "\n<p class='anz'>";
498                        if ($bltseite > 1) {echo "weitere ";}
499                        echo $zfs1;
500                        if ($kennztyp > 1) {
501                                echo " Flurst. zum Eigent. im GB-Bezirk</p>";
502                        } else {
503                                echo " Flurst&uuml;cke zum Eigent&uuml;mer</p>";
504                        }
505                }
506        }
507
508        if ($bltrecht == "" and $zfs1 > 0) { // beides
509                echo "<hr>"; // dann Trenner
510        }
511
512        // FÀlle mit "Rechte an"
513        if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
514                // Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
515                // buchungsStelle2 <an< buchungsStelle1
516                $sql=$sql1.$sqla2.$sql2.$bltwhere.$sqlw2.$sql3; // Rechte an
517                $v=array($person, $linelimit);
518                $res=pg_prepare("", $sql);
519                $res=pg_execute("", $v);
520                if (!$res) {
521                        echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
522                        return;
523                }
524                $zfs2=0;
525                $gwbez="";
526                while($row = pg_fetch_array($res)) {   
527                        $bezirk=$row["bezirk"];
528                        if ($gwbez != $bezirk) { // Gruppierung Bezirk
529                                $gwbez=$bezirk;
530                                $beznam=$row["beznam"];
531                                $gwgb="";
532                                zeile_gbbez($beznam, $gwbez, $bezirkaktuell);
533                        }
534                        $gb_gml=$row["gml_g"];
535                        if ($gwgb != $gb_gml) {  // Gruppierung Blatt (Grundbuch)
536                                $beznam=$row["beznam"];
537                                $blatt=$row["blatt"];
538                                zeile_blatt ($bezirk, "", $gb_gml, $blatt, false, $person, false);
539                                $gwgb = $gb_gml;        // Steuerg GW GB
540                                $gwbv = "";             // Steuerg GW BVNR
541                        }
542                        $bvnr=$row["lfd"];
543                        if ($gwbv != $bvnr) { // Gruppierung Buchungs (BVNR)
544                                $gwbv = $bvnr;
545                                $bsgml=$row["bsgml"];
546                                zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ... // ohne Link!
547                        }
548                        $fs_gml=$row["gml_id"];
549                        $gmkg=$row["gemarkungsname"];
550                        $flur=$row["flurnummer"];
551                        $fskenn=$row["zaehler"];
552                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
553                        $x=$row["x"];
554                        $y=$row["y"];
555                        zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur, false);
556                        $zfs2++;
557                }
558                if($zfs2 == 0) {
559                        if ($zfs1 == 0 or $bltrecht == "nur") { // keine Meldung wenn schon in Teil 1 eine Ausgabe
560                                echo "\n<p class='anz'>Keine Rechte an Buchungen.</p>";
561                        }
562                } elseif($zfs2 >= $linelimit) { // das Limit war zu knapp, das  B l À t t e r n  anbieten
563                        echo "\n<p class='blt'>";
564                        if ($bltseite > 1) {echo "weitere ";}
565                        echo $zfs2." Rechte an Flurst.";
566                        $nxtbltbez=urlencode($beznam);
567                        $nxtbltblatt=urlencode($blatt);
568                        $nxtbltseite=$bltseite + 1;
569                        echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person;
570                        echo "&amp;gbkennz=".$zgbbez; // Filter Bezirk
571                        echo "&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=nur' ";
572                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
573                        echo "</p>";
574                } elseif($zfs2 > 1) { // ab 2
575                        echo "\n<p class='anz'>";
576                        if ($bltseite > 1) {echo "weitere ";}
577                        echo $zfs2." Rechte an Flurst.</p>"; // im Limit               
578                }
579        } // ENDE FÀlle mit "Rechte an"
580        return;
581}
582
583// ===========
584// Start hier!
585// ===========
586// Parameter: 
587// 1. name   = Suche nach Namensanfang oder -bestandteil.
588// 2. person = gml_id der Person      -> Suche nach GrundbÃŒchern
589// 3. gb     = gml_id des Grundbuches -> Suche nach FlurstÃŒcken
590
591if(isset($epsg)) {
592        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
593} else {
594        $epsg=$gui_epsg; // aus Conf
595}
596if ($gemeinde == "") {
597        $gfilter = 0; // Gemeinde ungefiltert
598} elseif(strpos($gemeinde, ",") === false) {
599        $gfilter = 1; // Gemeinde Einzelwert
600} else {
601        $gfilter = 2; // Gemeinde Filter-Liste
602}
603
604$kennztyp=ZerlegungGBKennz($gbkennz); // Grundbuch-Kennzeichen aus Parameter zerlegen: $z__
605// 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
606
607// Quo Vadis?
608if($blattgml != "") { // FlurstÃŒcke zum Grundbuch
609
610        // Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
611        // Wenn Parameter mitgegeben wurden, können diese fÃŒr einen "Link zurÃŒck" verwendet werden.
612        $trans="Flurst&uuml;cke zum Grundbuch";
613        getFSbyGB(true); // mit BackLink
614
615} elseif($person != "") { // GrundbÃŒcher zur Person
616        // Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
617        //if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
618
619        // Die Filtereinstellung beeinflusst die Such-Strategie:
620        if ($gfilter == 0) { // Keine Filterung auf "Gemeinde": große Datenmenge
621                if ($kennztyp > 1) {
622                        $trans = "Grundb&uuml;cher in ".$zgbbez." von .."; // Filter GB-Bez
623                } else {
624                        $trans = "Grundb&uuml;cher von .."; // Name steht darunter
625                }
626                getGBbyPerson();
627                // Also schrittweise erst mal Stufe 2 = GrundbÃŒcher zur Person suchen.
628                if(isset($blattgml) ) { // Es wurde nur EIN Grundbuch zu der Person gefunden.
629                        $trans = "1 Blatt zum Eigent&uuml;mer";
630                        getFSbyGB(false);       // Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
631                }
632        } else { // mit Filter auf Gemeinde: weniger Daten?
633                if ($kennztyp > 1) {
634                        $trans="Grdb. und Flst. von .. in .."; // Filter GB-Bez,
635                        // darunter sind dann Name und Bezirk farblich markiert
636                } else {
637                        $trans="Grundb. und Flurst. von .."; // der EigentÃŒmer steht darunter
638                }
639                getGBuFSbyPerson(); // Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
640        }
641
642} elseif(isset($name)) { // Suchbegriff aus Form: Suche nach Name
643
644        $trans="Namensuche \"".$name."\"";
645        getEigByName(); // Suchen nach Namensanfang
646
647        if($person != "") { // genau EIN Treffer zum Namen
648                if ($gfilter == 0) {
649                        $trans="Grundb&uuml;cher zum Namen";
650                        getGBbyPerson(); // Dann gleich das Grundbuch hinterher
651                } else {
652                        $trans="Grdb. und Flst. zum Namen";
653                        getGBuFSbyPerson();     // .. oder auch GB + FS
654                }
655        }
656
657} elseif ($debug >= 1) {
658        $trans="falscher Aufruf";
659        echo "\n<p class='dbg'>Parameter?</p>"; // sollte nicht vorkommen
660}
661
662// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion
663//  im Kopf des Ergebnisrahmens anzeigen.
664// Dazu die im HTML-Header definierte Javascript-Function benutzen.
665// Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
666echo "
667<script type='text/javascript'>
668        transtitle('".$trans."');
669</script>";
670
671?>
672
673</body>
674</html>
Note: See TracBrowser for help on using the repository browser.