source: trunk/mapbender/http/nav/alkisnav_grd.php @ 431

Revision 425, 23.9 KB checked in by frank.jaeger, 2 years ago (diff)

Web-GIS-Auskunft und Mapbender2-Navigation: neue Konfigurations-Parameter und verbessertes Grundbuch-Modul

Line 
1<?php
2/*      Navigation mit ALKIS-Daten im Mapbender 2 - Teil Grundbuch-Suche
3        Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
4Version vom
5        2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
6        2016-03-02 $gemeinde auf feste LÀnge korrigieren
7        2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen
8        2018-02-15 Strikte Input-Validation der Parameter
9        2018-11-02 Einheitliches DB-Format der GB-Blatt-Nummer vorausgesetzt. Suche GB-Blatt in Function "gml_blatt" und "gml_buchungsstelle" mit Wildcard wenn Zusatzbuchstabe nicht angegeben.
10        2018-11-12 Full-Schema
11        2019-02-12 Sortierung FlurstÃŒcksnummer repariert
12        2021-11-24 Neue Var. $katamtmix  (Kataster-Amt-Mix).
13                   SchlÃŒsseltabellen sind mehrfach belegt. Dadurch doppelte Treffer bei der Suche.
14*/
15
16$cntget = extract($_GET);
17
18// Input-Validation
19// Parameter aus Konfiguration oder Links sollten keine "Eingabefehler" enthalten.
20// Entweder falsche Konfiguration oder Hack. Programm sofort abbrechen.
21if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} // Mandant, muss! Formularfeld hidden
22
23if(isset($epsg)) { // SRS, Formularfeld hidden
24        if (preg_match('#^EPSG:[0-9]{4,5}$#', $epsg)) { // Prefix aus MB-Mapframe
25                $epsg = str_replace("EPSG:", "" , $epsg);
26        } elseif (!preg_match('#^[0-9]{4,5}$#', $epsg)) { // nur die Nummer
27                die("Eingabefehler epsg");
28        }
29} else { // Nichts ÃŒbergeben
30        $epsg=$gui_epsg; // dann default aus Conf
31}
32
33// Filter-Parameter fÃŒr Gemeindenummer in Kreis-Datenbank aus der Mapbender GUI-Konfiguration, Formularfeld hidden
34if (isset($gemeinde) AND trim($gemeinde, '0') != "") {
35        if (!preg_match('#^[0-9]{1,3}$#', $gemeinde)) {die("Eingabefehler Gemeinde");}
36        $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT);
37        if(strpos($gemeinde, ",") === false) {
38                $gfilter = 1; // Einzelwert
39        } else {
40                $gfilter = 2; // Liste
41        }
42} else { // Kein Filter
43        $gemeinde = "";
44        $gfilter = 0;
45}
46
47// Optionale Parameter. Links aus der Baumstruktur. Wenn nicht gesetzt, dann die Variable initialisieren.
48if (isset($ag) and $ag != "" ) { // Amtsgericht-Nummer
49        if (!preg_match('#^[0-9]{4}$#', $ag)) {die("Eingabefehler Amtsgericht");}
50} else {
51        $ag="";
52}
53if (isset($buchunggml) and $buchunggml != "" ) {
54        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $buchunggml)) {die("Eingabefehler GML-ID Buchung");}
55} else {
56        $buchunggml="";
57}
58if (isset($blattgml) and $blattgml != "" ) {
59        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $blattgml)) {die("Eingabefehler GML-ID Blatt");}
60} else {
61        $blattgml="";
62}
63if (isset($gbbeznam) and $gbbeznam != "" ) {
64        if (!preg_match('#^[a-zA-ZÀÌöÄÜÖß12 -]{3,40}$#', $gbbeznam)) {die("Eingabefehler Grundbuch-Bezirks-Name '".$gbbeznam."'");}
65} else {
66        $gbbeznam="";
67}
68
69include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
70include("alkisnav_fkt.php"); // Funktionen
71$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz);
72
73echo <<<END
74<!doctype html>
75<html lang="de">
76<head>
77        <meta http-equiv="cache-control" content="no-cache">
78        <meta http-equiv="pragma" content="no-cache">
79        <meta http-equiv="expires" content="0">
80        <meta charset="utf-8">
81        <title>ALKIS-Suche Grundbuch</title>
82        <link rel="stylesheet" type="text/css" href="alkisnav.css">
83        <script type="text/javascript">
84                function imFenster(dieURL) {
85                        var link = encodeURI(dieURL);
86                        window.open(link,'','left=10,top=10,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
87                }
88                function transtitle(trans) {
89                        document.getElementById('transaktiontitle').innerHTML = trans;
90                }
91                function formular_belegung(suchMich) {
92                        parent.GrdGazetteerFrame.gbkennz.value=suchMich;
93                }
94        </script>
95</head>
96<body>
97<a href='javascript:history.back()'>
98        <img src="ico/zurueck.png" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
99</a>&nbsp;
100<span title='zuletzt ausgef&uuml;hrte Aktion'>
101        <dfn class='title' id='transaktiontitle'></dfn>
102</span>
103
104END;
105
106function ListAG($liste_ag, $aktuell) {
107        // Amtsgerichte (Grundbuchamt) auflisten, dazu als Filter die AG-Liste aus Conf-Datei verwenden.
108        global $debug;
109        $linelimit=40;
110
111        $sql="SELECT DISTINCT stelle, bezeichnung AS ag FROM ax_dienststelle "
112        ."WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL ORDER BY bezeichnung LIMIT $1 ;";
113        $res = pg_prepare("", $sql);
114        $res = pg_execute("", array($linelimit));
115        if (!$res) {
116                echo "\n<p class='err'>Fehler bei Amtsgerichte</p>";
117                if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
118                return 0;
119        }
120        $cnt = 0;
121        while($row = pg_fetch_array($res)) { // Loop AG
122                $anr=$row["stelle"];
123                $ag=$row["ag"];         
124                zeile_ag ($ag, $anr, $aktuell);
125                $cnt++;
126        }
127        // Foot
128        if($cnt == 0){
129                echo "\n<p class='anz'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
130        } elseif ($cnt >= $linelimit) {
131                echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Amtsgerichte ... und weitere</p>";
132        } elseif ($cnt > 1) {
133                echo "\n<p class='anz'>".$cnt." Amtsgerichte</p>";
134        }
135        return 0;
136}
137
138function ListGBBez($agkey) {
139        // Grundbuch-Bezirke zu einem Amtsgericht auflisten.
140        // Auch wenn BlÀtter vorhanden sind, kann es eine "Sackgasse" sein.
141        // Manchmal haben die BlÀtter keine FlurstÃŒcke im Filter-Bereich (Gemeinde).
142        global $debug, $katamtmix;
143        $linelimit=100; // Bezirke/AG
144
145        // Head
146        ListAG("'".$agkey."'", true); // hier nur fÃŒr 1
147
148        // Body
149        // Die Subquery stellt sicher, dass nur Bezirke aufgelistet werden, die auch BlÀtter enthalten
150        $sql ="SELECT DISTINCT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g JOIN ax_dienststelle a ON g.gehoertzu_stelle = a.stelle ";
151        if ($katamtmix){$sql.="AND substr(g.gml_id,1,6) = substr(a.gml_id,1,6) ";}
152        $sql.="WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL "
153        ."AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL "
154        ."ORDER BY g.bezeichnung LIMIT $2 ;";
155
156        $v = array($agkey, $linelimit);
157        $res = pg_prepare("", $sql);
158        $res = pg_execute("", $v);
159        if (!$res) {
160                echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
161                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
162                return 0;
163        }
164        $cnt = 0;
165        while($row = pg_fetch_array($res)) { // Loop BEZIRK
166                $gnam=$row["bezeichnung"];
167                $gnr=$row["bezirk"];
168                zeile_gbbez($gnam, $gnr, false);
169                $cnt++;
170        }
171        // Foot
172        if($cnt == 0){
173                echo "\n<p class='anz'>Kein Bezirk mit Bl&auml;ttern.</p>";
174        } elseif ($cnt >= $linelimit) {
175                echo "\n<p class='anz' title='Bitte Name des Bezirks suchen lassen'>".$cnt." Bezirke ... und weitere</p>";
176        } elseif($cnt > 1) {
177                echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit       
178        }
179        return;
180}
181
182function ag_bez_head($gbbez, $bezaktuell) {
183        // Zu einem Grundbuchbezirks-SchlÃŒssel die Zeilen "AG" und "Bezirk" ausgeben
184        // Parameter = SchlÃŒssel des Bezirks
185        global $katamtmix;
186        $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g "
187        ."JOIN ax_dienststelle a ON g.gehoertzu_stelle = a.stelle ";
188        if ($katamtmix){$sql.="AND substr(g.gml_id,1,6) = substr(a.gml_id,1,6) ";}
189        $sql.="WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;";
190        $v=array($gbbez);
191        $res=pg_prepare("", $sql);
192        $res=pg_execute("", $v);
193        if (!$res) {
194                echo "\n<p class='err'>Fehler bei Amtsgericht und Grundbuchbezirk.</p>";
195                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
196        }
197        $row = pg_fetch_array($res);
198        if ($row) {
199                $gnam=$row["bezeichnung"]; // GB-Bezirk Bezeichnung
200                $ag=$row["ag"]; // AG Bezeichnung
201                $anr=$row["stelle"]; // AG Key
202                zeile_ag($ag, $anr, false); // Amtsgericht
203                zeile_gbbez($gnam, $gbbez, $bezaktuell); // Bezirk
204        } else {
205                echo "\n<div class='gk' title='Grundbuchbezirk'>";
206                        echo "\n\t\t<p class='err'><img class='nwlink' src='ico/GB-Bezirk.png' width='16' height='16' alt='Bez.'>";
207                                echo  " Bezirk '".$gbbez."' ist unbekannt.</p>";
208                echo "\n</div>";
209                return;
210        }
211        return;
212}
213
214function SuchGBBezName() {
215        // Grundbuch-Bezirk suchen nach Name(-nsanfang)
216        global $gkz, $gemeinde, $debug, $gbkennz, $katamtmix;
217        $linelimit=80;
218
219        $sql ="SELECT DISTINCT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g "
220        ."JOIN ax_dienststelle a ON g.gehoertzu_stelle = a.stelle ";
221        if ($katamtmix){$sql.="AND substr(g.gml_id,1,6) = substr(a.gml_id,1,6) ";}
222        $sql.="WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL "
223        ."ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;"; // "AND a.stellenart=1000 " Amtsgericht
224        if ( $gbkennz == "") {
225                $match = "%";
226        } else {       
227                if(preg_match("/\*/",$gbkennz)){
228                        $match = trim(preg_replace("/\*/i","%", strtoupper($gbkennz)));
229                        if (substr($match, strlen($match), 1) != "%") {$match.="%";} // Wildcard am Ende obligatorisch
230                } else {
231                        $match = trim($gbkennz)."%";
232                }       
233        }
234        $v = array($match, $linelimit);
235        $res = pg_prepare("", $sql);
236        $res = pg_execute("", $v);
237        if (!$res) {
238                echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
239                return 1;
240        }
241        $cnt=0;
242        $gwag="";
243        while($row = pg_fetch_array($res)) { // Loop BEZIRK
244                $anr=$row["stelle"]; // Gruppierung AG
245                if ($gwag != $anr) {
246                        $gwag = $anr;
247                        $ag=$row["ag"];
248                        zeile_ag($ag, $anr, false);
249                }
250                $gnam=$row["bezeichnung"];
251                $gnr=$row["bezirk"];
252                zeile_gbbez ($gnam, $gnr, false);
253                $cnt++;
254        }
255        // Foot
256        if($cnt == 0){
257                echo "\n<p class='anz'>Kein Grundbuchbezirk.</p>";
258        } elseif ($cnt >= $linelimit) {
259                echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Bezirke ... und weitere</p>";
260        } elseif ($cnt == 1) {
261                return $gnr; // Wenn eindeutig, gleich weiter
262        } elseif ($cnt > 1) {
263                echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit       
264        }
265        return;
266}
267 
268function EinBezirk($showParent) {
269        // Kennzeichen bestehend nur aus GB-Bezirk-SchlÃŒssel wurde eingegeben
270        global $gemeinde, $debug, $zgbbez, $auskpath;
271        $linelimit=300; // max. Blatt je Bezirk
272        // Dies Limit ist nicht ausreichend fÃŒr alle BlÀtter eines Bezirks, aber ...
273        // Wenn man die Blatt-Nr nicht kennt, kommt man hier sowieso nicht weiter.
274        // Es nutzt also nichts, hier tausende Nummern aufzulisten.
275        // +++ BlÀtter-Funktion einfÃŒhren analog Modul _eig
276
277        // Head
278        if ($showParent) {
279                ag_bez_head($zgbbez, true); // AG und BEZ ausgeben
280        }
281        // Body
282        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "
283        ."WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
284        $v=array($zgbbez, $linelimit);
285        $res=pg_prepare("", $sql);
286        $res=pg_execute("", $v);
287        if (!$res) {
288                echo "\n<p class='err'>Fehler bei Bezirk.</p>";
289                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
290        }
291        $cntbl=0; // Counter Blatt/Bezirk
292        while($row = pg_fetch_array($res)) { // Loop BLATT     
293                $blatt=$row["blatt"];
294                $blattgml=$row["gml_id"];
295                zeile_blatt($zgbbez, "", $blattgml, $blatt, false, "", false);
296                $cntbl++;
297        }
298        // Foot
299        if($cntbl == 0) {
300                echo "\n<p class='anz'>Kein Blatt im Bezirk.</p>";
301        } elseif($cntbl >= $linelimit) {
302                echo "\n<p class='anz'>".$cntbl." Bl&auml;tter ... und weitere</p>";
303                // +++ Hier oft ÃŒberschritten! BlÀtter-Funktion einfÃŒhren
304                echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>";
305                // Vorbelegen des Eingabefeldes fÃŒr neue Suche
306                echo "<script type='text/javascript'>parent.GrdGazetteerFrame.gbkennz.value='".$zgbbez."-';</script>";
307        } elseif ($cntbl > 1) {
308                echo "\n<p class='anz'>".$cntbl." Bl&auml;tter</p>"; // im Limit       
309        }
310        return;
311}
312
313function gml_blatt() {
314        // Kennzeichen "Bezirk + Blatt" eingegeben. Dazu die gml_id des Blattes ermitteln.
315        global $debug, $zgbbez, $zblatt, $zblattn, $zblattz;
316        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "
317        ."WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
318        if ($zblattz == "") { // kein Buchstabe angegeben
319        //      $sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."');"; // frÃŒher uneinheitlich gefÃŒllt
320                $sql.="LIKE '".str_pad($zblattn, 6, "0", STR_PAD_LEFT)."_';"; // Buchstabe wird trotzdem gefunden
321        } else { // Buchstaben-Erweiterung wurde angegeben: '000123A'
322                $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."';";
323        }
324        $v=array($zgbbez);
325        $res=pg_prepare("", $sql);
326        $res=pg_execute("", $v);
327        if (!$res) {
328                echo "\n<p class='err'>Fehler bei Blatt (Kennzeichen).</p>";
329                return;
330        }
331        $cntbl=0; // Counter Blatt
332        while($row = pg_fetch_array($res)) {   
333                $bl_gml=$row["gml_id"];
334                $zblatt=$row["blatt"]; // das tatsaechliche Format (mit/ohne fuehrende 0)
335                $cntbl++;
336        }
337        if($cntbl == 0) {
338                echo "\n<p class='err'>Grundbuchblatt '".$zgbbez."-".$zblatt."' nicht gefunden.</p>";
339        } elseif ($cntbl == 1) {
340                return $bl_gml;
341        }
342        return;
343}
344
345function EinBlatt($showParent) {
346        // Kennzeichen Bezirk + Blatt wurde eingegeben oder verlinkt
347        global $debug, $gemeinde, $zgbbez, $zblatt, $blattgml, $gbbeznam;
348        // Head
349        if ($showParent) {
350                ag_bez_head($zgbbez, false); // AG + BEZ
351                zeile_blatt ($zgbbez, "", $blattgml, $zblatt, false, "", true);
352        }
353        // Body
354        GB_Buchung_FS(1000, $zgbbez."-".$zblatt); // Blatt -> Buchung -> Flurstueck (Limitiert)
355        // ++ besser Limit runter und "BlÀttern"-Funktion einfÃŒhren
356        return;
357}
358
359function gml_buchungsstelle() {
360        // Kennzeichen "Bezirk + Blatt + BVNR" wurde eingegeben.
361        // Dazu die gml_id der Buchungsstelle ermitteln, um "function EinGrundstueck" benutzen zu können.
362        global $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
363
364        // Blatt ->  B u c h u n g s s t e l l e
365        $sql ="SELECT s.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id "
366        ."WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
367
368        if ($zblattz == "") { // Eingabe ohne Buchstabenerweiterung
369                $sql.="LIKE '".str_pad($zblattn, 6, "0", STR_PAD_LEFT)."_'";
370        } else { // Mit Buchstabenerweiterung: '000123A'
371                $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."'";
372        }
373        $sql.=" AND s.laufendenummer= $2 ;";
374
375        $v=array($zgbbez, str_pad($zbvnr, 4, "0", STR_PAD_LEFT));
376        $res=pg_prepare("", $sql);
377        $res=pg_execute("", $v);
378        if (!$res) {
379                echo "\n<p class='err'>Fehler bei Buchungsstelle (Kennzeichen).</p>";
380                return;
381        }
382        $zbs=0;
383        while($row = pg_fetch_array($res)) {   
384                $bs_gml=$row["gml_id"];
385                $gef_blatt=$row["blatt"];       // gefunden ggf. mit Buchstabe (Wildcard)
386                if ($zblatt != $gef_blatt) {
387                //      echo "\n<p class='dbg'>Blatt mit Buchstabenerweiterung gefunden.</p>";
388                        $zblatt=$gef_blatt;
389                        $zblattz=substr($zblatt, strlen($zblatt)-1, 1);
390                }
391                $zbs++;
392        }
393        if($zbs == 0) {
394                echo "\n<p class='err'>Buchung ".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr." nicht gefunden.</p>";
395                return;
396        } else {
397                return $bs_gml;
398        }
399}
400
401function EinGrundstueck($showParent) {
402        // Die gml_id der Buchungsstelle (BVNR, GrundstÃŒck) ist bekannt = $buchunggml
403        // Die gebuchten FlurstÃŒcke und dienende/herrschenden Buchungen werden ausgegeben.
404        global $debug, $gemeinde, $epsg, $buchunggml, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter, $katamtmix;
405        // NoLimit?
406
407        // Head
408        if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben
409                if ($zgbbez.$zblatt != "") {
410                        ag_bez_head($zgbbez, false); // AG + BEZ
411                        zeile_blatt ($zgbbez, "", "", $zblatt, false, "", false);
412                        // Parameter 2 ($gnam) leer lassen Knoten "Bezirk" steht drÃŒber
413                } else {
414                        echo "<p class='err'>Kennzeichen Bezirk und Blatt nicht gesetzt</p>";
415                } // ++ suchen!
416                zeile_buchung($buchunggml, $zbvnr, $zgbbez."-".$zblatt, false, true); // $zblatt wird aktualisiert, wenn Buchstabe gefunden wurde
417        }
418
419// dienend $1 gml_id von
420//         Buchungsstelle  <an<  Buchungsstelle sh
421//         (dienend)                (herrschend)
422
423// direkt  $1 gml_id von
424//         Buchungsstelle                           <istGebucht< FlurstÃŒck >> Gemarkung
425
426// Recht   $1 gml_id von
427//         Buchungsstelle  >an>  Buchungsstelle sd  <istGebucht< FlurstÃŒck >> Gemarkung
428//         (herrschend)             (dienend)   sd  >istBestandteilVon> bd >> gd
429
430        // Body
431        // Anfang (Select-Liste) gleich
432        $sqlanf ="SELECT g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
433        if($epsg == "25832") { // Transform nicht notwendig
434                $sqlanf.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
435                $sqlanf.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
436        } else { 
437                $sqlanf.="st_x(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS x, ";
438                $sqlanf.="st_y(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS y ";                     
439        }
440        // Filter gleich
441        $sqlfilter="";
442        switch ($gfilter) { // Filter Gemeinde
443                case 1: // Einzel
444                        $sqlfitler="AND f.gemeinde='".$gemeinde."' "; break;
445                case 2: // Liste
446                        $sqlfilter="AND f.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
447        }
448
449        // Direkte Buchungen (Flurst.)
450        $sql =$sqlanf."FROM ax_flurstueck f JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
451        if ($katamtmix){$sql.="AND substr(g.gml_id,1,6) = substr(f.gml_id,1,6) ";}
452        $sql.="WHERE f.istgebucht = $1 AND f.endet IS NULL ".$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, cast(f.zaehler AS integer), cast(f.nenner AS integer);";
453
454        $v=array($buchunggml);
455        $res=pg_prepare("", $sql);
456        $res=pg_execute("", $v);
457        if (!$res) {
458                echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, direkt).</p>";
459                if ($debug >= 3) {
460                        echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";
461                }
462        }
463        $zfs1=0;
464        while($row = pg_fetch_array($res)) {   
465                $fs_gml=$row["gml_id"];
466                $gmkg=$row["bezeichnung"];
467                $flur=$row["flurnummer"];
468                $fskenn=$row["zaehler"];
469                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
470                zeile_flurstueck ($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false);
471                $zfs1++;
472        }
473        // Zwischen-Foot
474        if($zfs1 == 0) {
475                echo "\n<p class='anz'>Kein Flurst&uuml;ck zu dieser Buchung</p>";
476        } elseif($zfs1 > 1) {
477                echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke</p>";
478        }
479        if($zfs1 > 0) { // wenn's was zu trennen gibt
480                echo "<hr>"; // Trennen
481        }
482
483        // Recht "an" (dienende Buchungen und ihre Flurst.)
484
485        $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, "
486        ."gd.gehoertzu_stelle AS stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez "
487        ."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
488        ."JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id "
489        ."JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
490        if ($katamtmix){$sql.="AND substr(f.gml_id,1,6) = substr(g.gml_id,1,6) ";}
491        $sql.="JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id "
492        ."JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk ";
493        if ($katamtmix){$sql.="AND substr(bd.gml_id,1,6) = substr(gd.gml_id,1,6) ";}
494        $sql.="WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL "
495
496        .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, cast(f.zaehler AS integer), cast(f.nenner AS integer);";
497
498        $v=array($buchunggml);
499        $res=pg_prepare("", $sql);
500        $res=pg_execute("", $v);
501        if (!$res) {
502                echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, Recht an).</p>";
503                if ($debug >= 3) {echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";}
504        }
505        $zfs2=0;
506        $gwblatt="";
507        while($row = pg_fetch_array($res)) {
508                $dienstelle=$row["stelle"];     // Stelle (AG) des dien. Grdst.
509                $dienbezgml=$row["dienbezgml"]; // Bezirk des dien. GS: gml, Nr. und Bezeichnung
510                $diengbbez=$row["diengbbez"];   // Bezeichnung
511                $dienbezirk=$row["bezirk"];     // Key
512                $dienbltgml=$row["dienbltgml"]; // dien. Blatt, gml und Nr
513                $dienblatt=$row["dienblatt"];
514                $diengml=$row["diengml"];       // gml_id des dien. Grdst.
515                $dienlfd=$row["dienlfd"];       // BVNR (laufendNr) des dien. GS
516                if ($gwblatt != $dienblatt) { // Grupp. Blatt - dien.
517                        if ($gwblatt == "") { // der erste "dienende": Einleitungs-Zeile
518                                $aber="";
519                                if($zfs1 == 0) {$aber="Aber ein ";}
520                                echo "\n<p class='anz' title='Die oben genannte Buchung hat ein Recht an den folgenden Buchungen'>".$aber."Recht an ..</p>";
521                        }
522                        $gwblatt = $dienblatt; // Steuerg GW Blatt
523                        zeile_blatt($dienbezirk, $diengbbez, $dienbltgml, $dienblatt, true, "", false);
524                        $gwbvnr="";
525                }
526                if ($gwbvnr != $dienlfd) { // Gruppierung Buchung (BVNR) - dienend
527                        $gwbvnr = $dienlfd; // Steuerg GW BVNR
528                        zeile_buchung($diengml, $dienlfd, $dienbezirk."-".$dienblatt, true, false);
529                } // ++ Buchungsart? Welches Recht?
530                $fs_gml=$row["gml_id"];
531                $gmkg=$row["bezeichnung"];
532                $flur=$row["flurnummer"];
533                $fskenn=$row["zaehler"];
534                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
535                zeile_flurstueck ($fs_gml, $fskenn, $row["x"],$row["y"], $gmkg, $flur, false);
536                $zfs2++;
537        }
538
539// Teil 3 - noch nicht umgesetzt
540// ToDo: Wenn nur 1 GrundstÃŒck untersucht wird, dann dazu auch die berechtigten (herrschenden) GrundbÃŒcher anzeigen und verlinken (ohne FS)
541
542        // Foot
543        if($zfs2 == 0 AND $zfs1 == 0) {
544                echo "\n<p class='anz'>Kein Recht an Flst.</p>";
545        } elseif($zfs2 > 1) {
546                echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
547        }
548        return;
549}
550
551// Start hier!
552
553// Validation: Eingabefeld aus Formular.
554// Suchbegriff (Bezirksname) oder Grundbuch-Kennzeichen gggg-999999z-BVNR (17).
555// Hier formatierte Meldung und html-Foot.
556if (isset($gbkennz) and $gbkennz != "" ) {
557        if (!preg_match('#^[0-9a-zA-ZÀöÌÄÖÜß* -]{1,25}$#', $gbkennz)) {
558                echo "<p class='err'>Eingabe unzul&auml;ssig!</p>";
559                $gbkennz="";
560        }
561} else {
562        $gbkennz="";
563}
564
565// Das eingegebene Kennzeichen fÃŒr "Anzeige" und "weitere Links" zerlegen,
566// auch wenn ÃŒber einen ein Self-Link mit gml_id aufgerufen.
567$kennztyp=ZerlegungGBKennz($gbkennz);
568
569// Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet?
570// Dann hat DAS PrioritÀt, dann also *nicht* nach $gbkennz suchen.
571if ($buchunggml != "") { // gml der Buchungsstelle
572        $trans="Flurst&uuml;cke zur Buchungsstelle"; // Link
573        EinGrundstueck(true);
574
575} elseif($blattgml != "") { // gml des GB-Blattes
576        $trans="GB-Blatt mit Buchungen und Flst.";
577        EinBlatt(true);
578
579} elseif($ag != "") { // Key des Amtsgerichtes
580        $trans="GB-Bezirke zum Amtsgericht";
581        ListGBBez($ag);
582
583} else { // kein Self-Link sondern manuelle Eingabe im Formular
584        switch ($kennztyp) { // wurde oben bereits analysiert und zerlegt
585                case 0: // keine Eingabe
586                        $trans="Liste der Amtsgerichte";
587                        ListAG($ag_liste, false);
588                        break;
589                case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke
590                        $trans="Bezirke suchen \"".$gbkennz."\"";
591                        $beznr=SuchGBBezName();
592                        if ($beznr > 0) {  // wenn der Suchbegriff eindeutig war, ..
593                                $zgbbez=$beznr;
594                                $trans="Bezirk gefunden, Bl&auml;tter dazu";
595                                EinBezirk(false); // .. dann gleich weiter
596                        };
597                        break;
598                case 2: // Eingabe Bezirk-Nummer -> Liste der BlÀtter im Bezirk
599                        $trans="Bl&auml;tter im GB-Bezirk";
600                        EinBezirk(true);
601                        break;
602                case 3: // Eingabe GB-Blatt -> Liste der Buchungen auf dem Blatt
603                        $trans="Buchungen auf GB-Blatt";
604                        $blattgml=gml_blatt(); // gml_id zum Blatt suchen
605                        if ($blattgml != "") { // gefunden             
606                                if (EinBlatt(true) == 1) { // wenn darauf genau eine Buchung ist
607                                        $trans="GB-Blatt und 1 Buchung"; // dann gleich tiefer rein
608                                        $buchunggml=gml_buchungsstelle(); // gml_id der Buchung
609                                        EinGrundstueck(false);
610                                }
611                        }
612                        break;
613                case 4: // Eingabe Buchung (GrundstÃŒck) -> Liste der FlurstÃŒcke
614                        $buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen
615                        if ($buchunggml != "") {                // .. wurde geliefert
616                                $trans="Flurst&uuml;cke zur Buchungsstelle"; // Eingabe
617                                EinGrundstueck(true);   // mit Backlink
618                        } else{
619                                $trans="Suche Buchungsstelle";
620                        }
621                        break;
622                case 9: // Fehler
623                        $trans="fehlerhafte Eingabe";
624                        echo "\n<p class='err'>Bitte ein g&uuml;ltiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll</p>";
625                        break;
626        }
627}
628
629// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion
630//  im Kopf des Ergebnisrahmens anzeigen.
631// Dazu die im HTML-Header definierte Javascript-Function benutzen.
632// Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
633echo "
634<script type='text/javascript'>
635        transtitle('".$trans."');
636</script>";
637
638?>
639
640</body>
641</html>
Note: See TracBrowser for help on using the repository browser.