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

Revision 278, 28.1 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation mit ALKIS-Daten komplett überarbeitet.

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