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

Revision 283, 23.0 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation nochmals ergänzt: aktuell gewählte Ebene wird farblich hinterlegt. Im GB-Teil kann Buchung verlinkt werden.

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