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

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

Mapbender-ALKIS-Navigation korrigiert und verbessert.

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