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

Revision 420, 23.4 KB checked in by frank.jaeger, 5 years ago (diff)

In der ALKIS-Navigation für Mapbender2 die Sortierung für Flurstücksnummer korrigiert. Mit Umstellung auf Full-Schema sind Zähler und Nenner Textfelder geworden. Sie wurden also nicht mehr "numerisch" sortiert.

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