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

Revision 282, 22.5 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-ALKIS-Navigation korrigiert und verbessert.

RevLine 
[134]1<?php
[278]2/* Version vom
[276]3        2013-04-16 "import_request_variables" entfÀllt in PHP 5.4
[278]4        2013-04-26      Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
5                                        Stufe 2: GB *und* FS mit einem Klick anzeigen.
6                                        BlÀtterfunktion (Folgeseiten) fÃŒr lange Listen.
7                                        Function extern gemeinsam genutzt in _eig und _grd.
8                                        Dazu Var-Namen harmonisieren: $gb wird $blattgml.
9                                        ZurÃŒck-Link, Titel der Transaktion anzeigen.
[282]10        2013-04-29      Darstellung mit IE
11        2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
[134]12*/
[276]13$cntget = extract($_GET);
[278]14include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
15include("alkisnav_fkt.php"); // Funktionen
[134]16$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
17$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$dbvers.$gkz);
[278]18echo <<<END
[134]19<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
20<html>
21<head>
22        <meta http-equiv="cache-control" content="no-cache">
23        <meta http-equiv="pragma" content="no-cache">
24        <meta http-equiv="expires" content="0">
25        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
26        <title>ALKIS-Suche Eigent&uuml;mer</title>
[129]27        <link rel="stylesheet" type="text/css" href="alkisnav.css">
28        <script type="text/javascript">
29                function imFenster(dieURL) {
30                        var link = encodeURI(dieURL);
31                        window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
32                }
[278]33                function transtitle(trans) {
34                        document.getElementById('transaktiontitle').innerHTML = trans;
35                }
[134]36        </script>
37</head>
[66]38<body>
[280]39<a href='javascript:history.back()'>
[282]40        <img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
[278]41</a>
42<dfn class='title' id='transaktiontitle'></dfn>
[66]43
[278]44END;
[134]45
[278]46// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
47function familiensuche() {
[282]48        global $gkz, $gemeinde, $epsg, $name;
[278]49        if(isset($name)) { // Familiensuche
50                echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
51                        echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer_2.ico' width='16' height='16' alt='FAM'> ";
52                        echo "\n<a class='back' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;name=".$name."'>\"".$name."\"</a>";
53                echo "\n</div>\n<br>"; 
54        }
55        return;
56}
57
[282]58function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben
[278]59        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
60        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, ";
61        $sql.="a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer ";
[282]62        $sql.="FROM ax_person p LEFT JOIN alkis_beziehungen b ON p.gml_id=b.beziehung_von ";
63        $sql.="LEFT JOIN ax_anschrift a ON a.gml_id=b.beziehung_zu WHERE p.gml_id= $1 ;";       
[278]64        $v=array($person);
65        $res=pg_prepare("", $sql);
66        $res=pg_execute("", $v);
[282]67        if (!$res) {echo "\n<p class='err'>Fehler bei Name</p>\n";}
[278]68        echo "\n\t<table>\n\t<tr>\n\t\t<td valign='top'>";
69                // Sp. 1: Icon, Link zur Auskunft Person
70                echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$person."\")'>";
71                        echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'>";
72                echo "\n\t</a></td>\n\t\t<td>";
73                echo "\n\t<p class='nam'>"; // Sp. 2: Rahmen
74                if ($row = pg_fetch_array($res)) {
75                        $namzeil=$row["nachnameoderfirma"].", ".$row["vorname"];
76                        $gebdat=$row["geburtsdatum"];
77                        if ($gebdat != "") {$namzeil.= ", geb. ".$gebdat;}
78                        $best=$row["namensbestandteil"];
79                        if ($best != "") {$namzeil.= ", ".$best;}
80                        echo htmlentities($namzeil, ENT_QUOTES, "UTF-8");
81                        $namzeil=$row["plz"]." ".$row["ort_post"];
82                        if (trim($namzeil) != "") {echo "\n\t<br>".htmlentities($namzeil, ENT_QUOTES, "UTF-8");}
83                        $namzeil=$row["strasse"]." ".$row["hausnummer"];
84                        if (trim($namzeil) != "") {echo "\n\t<br>".htmlentities($namzeil, ENT_QUOTES, "UTF-8");}
85                }
86        echo "\n\t</p></td></tr>\n\t</table>";
87        return;
88}
89
[66]90function getEigByName() {
[282]91        // 1 // Eigentuemer nach Name(-nsanfang)
92        global $gkz, $gemeinde, $epsg, $name, $person, $gfilter;
[278]93        $linelimit=150;
[135]94        $arr = explode(",", $name);
[134]95        $name0 = trim($arr[0]);
96        $name1 = trim($arr[1]);
97        if(preg_match("/\*/",$name0)){
98                $match = trim(preg_replace("/\*/i","%", strtoupper($name0)));
99        } else {
100                $match = trim($name0)."%";
[66]101        }       
[134]102        if(preg_match("/\*/",$name1)){
103                $match1 = trim(preg_replace("/\*/i","%", strtoupper($name1)));
104        } else {
105                $match1 = trim($name1)."%";
[135]106        }               
[140]107        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.gml_id FROM ax_person p ";
[278]108        if ($gfilter > 0) {
[140]109                $sql.="JOIN gemeinde_person g ON p.gml_id = g.person WHERE ";
110                switch ($gfilter) {
111                        case 1: // Einzelwert
112                                $sql.="g.gemeinde=".$gemeinde." AND "; break;
113                        case 2: // Liste
114                                $sql.="g.gemeinde in (".$gemeinde.") AND "; break;
115                }
116        } else {
117                $sql.="WHERE ";
118        }
[134]119        if($match1 != '%'){
[140]120                $sql.="nachnameoderfirma ILIKE $1 AND p.vorname ILIKE $2 ";             
[134]121                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $3 ;";
122                $v=array($match, $match1, $linelimit);
123        }else{
[140]124                $sql.="nachnameoderfirma ILIKE $1 ";           
[134]125                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $2 ;";
126                $v=array($match, $linelimit);
127        }
[66]128        $res=pg_prepare("", $sql);
129        $res=pg_execute("", $v);
130        if (!$res) {
131                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
132                return;
133        }
[134]134        $cnt = 0;
[66]135        while($row = pg_fetch_array($res)) {
[282]136                $nachname=$row["nachnameoderfirma"];
137                $vorname=$row["vorname"];
138                $persongml=$row["gml_id"];
139                zeile_person ($persongml, $nachname, $vorname);
[134]140                $cnt++;
141        }
[66]142        if($cnt == 0){
[278]143                echo "\n<p class='anz'>Kein Eigent&uuml;mer gefunden.</p>";
144        } elseif($cnt >= $linelimit) { // das Limit war zu knapp
145                echo "\n<p class='anz' title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
[66]146        } elseif($cnt == 1){ // Eindeutig!
[282]147                $person = $persongml;
[278]148        } else {
149                echo "\n<p class='anz'>".$cnt." Eigent&uuml;mer mit '".$name."'</p>";   // im Limit
[66]150        }
[134]151        return;
[66]152}
153
154function getGBbyPerson() {
[282]155        // 2 // GrundbÃŒcher zur gewÀhlten Person
[278]156// Es wird in dieser Function nicht geprÃŒft, ob die gefundenen GrundbÃŒcher auch FlurstÃŒcke
157// haben, die im gefilterten Bereich (Gemeinde) liegen. Es können daher Sackgassen entstehen,
158// also GrundbÌcher, die in der nÀchsten Stufe bei Filterung nicht zu Treffern fÌhren.
159// Das Joinen bis zum FS unter BerÌcksichtigung von speziellen Buchungen ist zu aufwÀndig.
160// Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
161// Alternativ wÌrde eine Hilfstabelle benötigt, in der im PostProcessing
162// das GB-zu-Gemeinde-VerhÀltnis vorbereitet wird.
[282]163        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $debug, $bltbez, $bltblatt, $bltseite;
[278]164        $linelimit=150;
165        familiensuche();
166        personendaten();
[66]167        // Suche nach GrundbÃŒchern der Person
[278]168        $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam ";
[66]169        $sql.="FROM alkis_beziehungen bpn ";
170        $sql.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
171        $sql.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von ";
[278]172        $sql.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
173        $sql.="JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.bezirk = b.bezirk ";
[66]174        $sql.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
[278]175        if ($bltbez.$bltblatt != "") { // BlÀttern, Fortsetzen bei ...
176                $sql.="AND ((b.bezeichnung > '".$bltbez."') ";
177                $sql.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."')) ";
178        }
179        $sql.="ORDER BY b.bezeichnung, gb.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
180
181        if ($bltseite == "") { // Seite 1
182                $bltseite = 1;
183        } else { // Folgeseite
184                echo "\n<p class='ein'>Teil ".$bltseite;
185        }
[66]186        $v=array($person, $linelimit);
187        $res=pg_prepare("", $sql);
188        $res=pg_execute("", $v);
189        if (!$res) {
190                echo "\n<p class='err'>Fehler bei Grundbuch</p>";
191                return;
192        }
193        $cnt = 0;
194        while($row = pg_fetch_array($res)) {
195                $gml=$row["gml_g"];
196                $beznam=$row["beznam"];
[278]197                $blatt=$row["blatt"];
[282]198                zeile_blatt ($zgbbez, $beznam, $gml, $blatt, false, $person);
[134]199                $cnt++;
200        }
[278]201        if($cnt == 0) {
202                echo "\n<p class='anz'>Kein Grundbuch zum Eigent&uuml;mer</p>";
[66]203        } elseif($cnt >= $linelimit) {
[278]204                echo "\n<p class='blt'>".$cnt." Grundb. zum Eigent.";
205                $nxtbltbez=urlencode($beznam);
206                $nxtbltblatt=urlencode($blatt);
207                $nxtbltseite=$bltseite + 1;
208                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."' ";
209                echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt."'>weitere</a>";
210                echo "</p>";
211        } elseif($cnt == 1) { // Eindeutig!
212                $blattgml=$gml; // dann Stufe 3 gleich nachschieben
213        } else {
214                echo "\n<p class='anz'>".$cnt." Grundb&uuml;cher zum Eigent&uuml;mer</p>";
[66]215        }
216        return;
217}
[278]218
[66]219function getFSbyGB($backlink) {
[282]220        // 3 // FlurstÃŒcke zum Grundbuch
[278]221// Zu einem Grundbuch (gml_id als Parameter) werden alle darauf gebuchten FlurstÃŒcke gesucht.
222// Im ersten Schritt sind das direkt gebuchten FlurstÃŒcke.
223// Im zweiten Schritt wird gesucht nach Rechten einer Buchungstelle des durchsuchten Blattes an anderen
[282]224// Buchungstellen.
225        global $gkz, $gemeinde, $name, $person, $blattgml, $epsg, $gfilter, $debug;
[278]226        if($backlink) { // Erneuter Ansatz bei Person oder GB möglich.
227                // Namen ermitteln
228                $sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 ";
229                $v=array($person);
230                $res=pg_prepare("", $sql);
231                $res=pg_execute("", $v);
[282]232                if (!$res) {echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";}
[278]233                $row = pg_fetch_array($res); // nur eine Zeile
234                $nnam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
235                $vnam=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
[282]236
[66]237                echo "\n\t<div class='back' title='zur&uuml;ck zur Person'>";
238                        echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'> ";
[86]239                        echo "\n\t<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."'>";
[278]240                        echo $nnam.", ".$vnam."</a><br>";               
[66]241                echo "</div>";
[278]242
243                // Grundbuch-Daten ermitteln
[282]244                $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam ";
245                $sql.="FROM ax_buchungsblatt gb JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk ";
[278]246                $sql.="WHERE gb.gml_id= $1 ;";
247                $v=array($blattgml);
248                $res=pg_prepare("", $sql);
249                $res=pg_execute("", $v);
[282]250                if (!$res) {echo "\n<p class='err'>Fehler bei Grundbuch</p>";}
251                $row = pg_fetch_array($res); // eine Zeile
[278]252                $gml=$row["gml_g"];
[282]253                $bezirk=$row["bezirk"];
[278]254                $beznam=$row["beznam"];
255                $blatt=$row["blatt"];
[282]256                zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, false, $person);     
[66]257        }
[282]258        GB_Buchung_FS(200); // Blatt > GrundstÃŒck > Flurst. (max. 200))
[278]259        return;
260}
261
262function getGBuFSbyPerson() {
[282]263        // 2 + 3 // GrundbÃŒcher UND FlurstÃŒcke zur gewÀhlten Person
264//
[278]265// Dies ist die Kombination von Stufe 2 (GrundbÃŒcher zur Person) und 3 (FlurstÃŒcke zum Grundbuch)
266// in einem einzelnen Schritt. Wenn auf Gemeinde gefiltert wird, dann können in Stufe 2 (noch ohne Filter)
267// auch GrundbÃŒcher gefunden werden, die dann auf Stufe 3 (mit Filter) keine FS liefern ("Sackgasse"!).
268// Wenn aber per JOIN "GB -> FS -> Gemarkung -> Gemeinde" geprÌft wird, dann können
269// die Daten ja auch gleich ausgegeben werden.
270// FÌr FÀlle in denen nicht nach Gemeinde gefiltert wird (z.B. ganzer Kreis) kann weiter
271// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher,
272// weil "ungefiltert" in "2+3" zu lange Listen entstehen wÌrden, die durchblÀttert werden mÌssen.
[282]273        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht;
[278]274        $linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen
275        // darf nun etwas knapper sein, weil man jetzt blÀttern kann
276        familiensuche();
277        personendaten();
278
279        // Wenn das Limit ÃŒberschritten wurde: zusÀtzliche Parameter "blt"=BlÀttern
280        // $bltbez   = Bezirk-Name 
281        // $bltblatt = BlattMitBuchstabe
282        // $bltbvnr  = lfd.Nr der Buchungsstelle
283        // $bltseite = fortlaufende Seiten-Nr
284        // $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
285
[140]286        // SQL-Bausteine vorbereiten
[278]287        //  Direkte Buchungen suchen mit:  $sql1 +         $sqla1 + $sql2
288        //  SonderfÀlle suchen mit:        $sql1 + $sqlz + $sqla2 + $sql2
289
290        // Baustein: SQL-Anfang fuer beide Varianten
291        $sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam, ";
292        $sql1.="s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
[86]293        if($epsg == "25832") { // Transform nicht notwendig
[189]294                $sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
[278]295                $sql1.="st_y(st_centroid(f.wkb_geometry)) AS y ";
[86]296        } else { 
[189]297                $sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
[278]298                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";                     
[86]299        }
[278]300        $sql1.="FROM alkis_beziehungen bpn ";
301        $sql1.="JOIN ax_namensnummer nn ON bpn.beziehung_von=nn.gml_id ";
302        $sql1.="JOIN alkis_beziehungen bng ON nn.gml_id=bng.beziehung_von ";
303        $sql1.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
304   $sql1.="JOIN alkis_beziehungen vbg ON gb.gml_id=vbg.beziehung_zu ";
305        $sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von=s1.gml_id ";
306        $sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; // quer-ab
[66]307
[278]308        // Baustein: Zwischen-JOIN (nur bei zweiter Abfrage)
309        $sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von=s1.gml_id ";
310        $sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu=s2.gml_id ";
[140]311
[278]312        // Baustein: Auswahl 1 oder 2
313        $sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id=vfb.beziehung_zu ";
314        $sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id=vfb.beziehung_zu ";
[140]315
[278]316        // Baustein: SQL-Ende fuer beide Varianten
317        $sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von=f.gml_id ";
318   $sql2.="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
319        $sql2.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
320        $sql2.="AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
321        switch ($gfilter) { // Gemeinde-Filter
322                case 1: // Einzelwert
323                        $sql2.="AND ot.gemeinde=".$gemeinde." "; break;
324                case 2: // Liste
325                        $sql2.="AND ot.gemeinde in (".$gemeinde.") "; break;
[140]326        }
[278]327        $sql3 ="ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
328        // Sortier-Problem: laufendenummer in varchar linksbÃŒndig
[140]329
[278]330        // Die Bausteine in 2 Varianten kombinieren
[140]331
[278]332        // BlÀttern mit folgenden Parametern: $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht
333        if ($bltbez.$bltblatt.$bltbvnr != "") { // BlÀttern, Fortsetzen bei ...
334                $bltwhere ="AND ((b.bezeichnung > '".$bltbez."') ";
335                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."') ";
336                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung = '".$bltblatt."' AND cast(s1.laufendenummer AS integer) >= ".$bltbvnr." )) ";
[282]337        } // FlurstÃŒcke in der angeblÀtterten BVNR werden ggf. wiederholt
[278]338
339        if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
340                $bltseite = 1;
341        } else { // Folgegeseite: nur Teil 1 *oder* 2
342                echo "\n<p class='ein'>Teil ".$bltseite." - ";
343                switch ($bltrecht) {
344                        case "nur":
345                                echo "nur Rechte an .. Buchungen</p>"; break;
346                        case "ohne":
347                                echo "nur direkte Buchungen</p>"; break;
348                        default:
349                                echo "</p>"; break;
[140]350                }
351        }
352
[278]353        // FÀlle ohne "Rechte an"
354        if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
355                // Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
356                $sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
357                $v=array($person, $linelimit);
358                $res=pg_prepare("", $sql);
359                $res=pg_execute("", $v);
360                if (!$res) {
361                        echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
362                        return;
363                }
364                $zfs1=0;
365                $gwgb="";
366                while($row = pg_fetch_array($res)) {   
367                        $gb_gml=$row["gml_g"];
[282]368                        if ($gwgb != $gb_gml) { // Gruppierung Blatt (Grundbuch)
[278]369                                $beznam=$row["beznam"];
370                                $blatt=$row["blatt"];
[282]371                                zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person);
[278]372                                $gwgb = $gb_gml;        // Steuerg GW GB
373                                $gwbv = "";             // Steuerg GW BVNR
374                        }
375                        $bvnr=$row["lfd"];
[282]376                        if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR)
377                                $gwbv = $bvnr;
378                                zeile_buchung ($bsgml, $bvnr, "", false);
[278]379                        }
380                        $fs_gml=$row["gml_id"];
381                        $gmkg=$row["gemarkungsname"];
382                        $flur=$row["flurnummer"];
383                        $fskenn=$row["zaehler"];
384                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
385                        $x=$row["x"];
386                        $y=$row["y"];
[282]387                        zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur );
[278]388                        $zfs1++;
389                }
390                if($zfs1 == 0) {
[282]391                        if ($bltrecht == "ohne") {echo "\n<p class='anz'>Keine direkte Buchung gefunden.</p>";}
[278]392                } elseif($zfs1 >= $linelimit) { // das Limit war zu knapp, das  B l À t t e r n  anbieten
393                        echo "\n<p class='blt'>".$zfs1." Flurst&uuml;cke";
394                        $nxtbltbez=urlencode($beznam);
395                        $nxtbltblatt=urlencode($blatt);
396                        $nxtbltseite=$bltseite + 1;
397                        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;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=ohne' ";
398                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
399                        echo "</p>";
400                } elseif($zfs1 > 1) { // Meldung (Plural) ab 2
401                        echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Eigent&uuml;mer</p>"; // im Limit
402                }
403        }       
404        if ($bltrecht == "" and $zfs1 > 0) { // beides
405                echo "<hr>"; // dann Trenner
[66]406        }
[140]407
[278]408        // FÀlle mit "Rechte an"
409        if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
410                // Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
411                // buchungsStelle2 < an < buchungsStelle1
412                $sql=$sql1.$sqlz.$sqla2.$sql2.$bltwhere.$sql3; // Rechte an
413                $v=array($person, $linelimit);
414                $res=pg_prepare("", $sql);
415                $res=pg_execute("", $v);
416                if (!$res) {
417                        echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
418                        return;
419                }
420                $zfs2=0;
421                $gwgb="";
422                while($row = pg_fetch_array($res)) {   
423                        $gb_gml=$row["gml_g"];
[282]424                        if ($gwgb != $gb_gml) {  // Gruppierung Blatt (Grundbuch)
[278]425                                $beznam=$row["beznam"];
426                                $blatt=$row["blatt"];
[282]427                                zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person);
[278]428                                $gwgb = $gb_gml;        // Steuerg GW GB
429                                $gwbv = "";             // Steuerg GW BVNR
430                        }
431                        $bvnr=$row["lfd"];
[282]432                        if ($gwbv != $bvnr) { // Gruppierung Buchungs (BVNR)
433                                $gwbv = $bvnr;
434                                zeile_buchung ($bsgml, $bvnr, "", true); // Recht an ...
[278]435                        }
436                        $fs_gml=$row["gml_id"];
437                        $gmkg=$row["gemarkungsname"];
438                        $flur=$row["flurnummer"];
439                        $fskenn=$row["zaehler"];
[282]440                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
[278]441                        $x=$row["x"];
442                        $y=$row["y"];
[282]443                        zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
[278]444                        $zfs2++;
445                }
446                if($zfs2 == 0) {
447                        if ($zfs1 == 0 or $bltrecht == "nur") { // keine Meldung wenn schon in Teil 1 eine Ausgabe
448                                echo "\n<p class='anz'>Keine Rechte an Buchungen.</p>";
449                        }
450                } elseif($zfs2 >= $linelimit) { // das Limit war zu knapp, das  B l À t t e r n  anbieten
451                        echo "\n<p class='blt'>".$zfs2." Rechte an Flurst.";
452                        $nxtbltbez=urlencode($beznam);
453                        $nxtbltblatt=urlencode($blatt);
454                        $nxtbltseite=$bltseite + 1;
455                        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;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=nur' ";
456                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
457                        echo "</p>";
458                } elseif($zfs2 > 1) { // ab 2
459                        echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>"; // im Limit           
460                }
461        } // ENDE FÀlle mit "Rechte an"
[66]462        return;
463}
464
465// ===========
466// Start hier!
467// ===========
468// Parameter: 
469// 1. name   = Suche nach Namensanfang oder -bestandteil.
470// 2. person = gml_id der Person      -> Suche nach GrundbÃŒchern
471// 3. gb     = gml_id des Grundbuches -> Suche nach FlurstÃŒcken
[278]472
[66]473if(isset($epsg)) {
[86]474        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
[66]475} else {
476        $epsg=$gui_epsg; // aus Conf
477}
[140]478if ($gemeinde == "") {
[278]479        $gfilter = 0; // Gemeinde ungefiltert
[140]480} elseif(strpos($gemeinde, ",") === false) {
[278]481        $gfilter = 1; // Gemeinde Einzelwert
[140]482} else {
[278]483        $gfilter = 2; // Gemeinde Filter-Liste
[140]484}
[66]485
[278]486// Quo Vadis?
[282]487if(isset($blattgml)) {          // FlurstÃŒcke zum Grundbuch
[278]488
[66]489        // Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
490        // Wenn Parameter mitgegeben wurden, können diese fÃŒr einen "Link zurÃŒck" verwendet werden.
[278]491        $trans="Flurst&uuml;cke zum Grundbuch";
492        getFSbyGB(true);                                // mit BackLink
493
[282]494} elseif(isset($person)) {      // GrundbÃŒcher zur Person
[66]495        // Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
[278]496        if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
497
498        // Die Filtereinstellung beeinflusst die Such-Strategie:
499        if ($gfilter == 0) {                    // Keine Filterung auf "Gemeinde": große Datenmenge
500
501                $trans="Grundb&uuml;cher zum Eigent&uuml;mer";
502                getGBbyPerson();
503                // Also schrittweise erst mal Stufe 2 = GrundbÃŒcher zur Person suchen.
504                if(isset($blattgml) ) { // Es wurde nur EIN Grundbuch zu der Person gefunden.
505                        $trans="1 Blatt zum Eigent&uuml;mer";
506                        getFSbyGB(false);       // Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
507                }
508
509        } else {                                                // mit Filter auf Gemeinde: weniger Daten?
510                $trans="Grundb. und Flurst. zum Eigent&uuml;mer";
511                getGBuFSbyPerson();             // Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
512        }
513
[282]514} elseif(isset($name)) {        // Suchbegriff aus Form: Suche nach Name
[278]515
516        $trans="Namensuche \"".$name."\"";
517        getEigByName();                         // Suchen nach Namensanfang
518
[282]519        if(isset($person)) {            // genau EIN Treffer zum Namen
520                if ($gfilter == 0) {
521                        $trans="Grundb&uuml;cher zum Namen";
522                        getGBbyPerson();                // Dann gleich das Grundbuch hinterher
523                } else {
524                        $trans="Grdb. und Flst. zum Namen";
525                        getGBuFSbyPerson();     // .. oder auch GB + FS
526                }
[278]527        }
528
[66]529} elseif ($debug >= 2) {
[278]530        echo "\n<p class='dbg'>Parameter?</p>"; // Programmfehler, soll nicht vorkommen
[66]531}
[278]532// Titel im Kopf anzeigen
533echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
534
[66]535?>
[134]536
537</body>
[66]538</html>
Note: See TracBrowser for help on using the repository browser.