source: trunk/mapbender/http/nav/alkisnav_fkt.php @ 330

Revision 330, 13.5 KB checked in by frank.jaeger, 7 years ago (diff)

Umstellung von PostNAS 0.7 auf PostNAS 0.8, ohne Tabelle "alkis_beziehungen".

Line 
1<?php
2/* Version vom
3        2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
4        2013-05-14  Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
5        2013-05-15  Function verlegt
6        2014-02-06  Korrektur zeile_person
7        2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
8*/
9
10function is_ne_zahl($wert) {
11        // PrÃŒft, ob ein Wert ausschließlich aus den Zahlen 0 bis 9 besteht
12        if (trim($wert, "0..9") == "") {return true;} else {return false;}
13}
14
15function ZerlegungGBKennz($gbkennz) {
16        // Das eingegebene Grundbuch-Kennzeichen auseinander nehmen (gggg-999999z-BVNR)
17        // Return: 9=Fehler, 0=Listen alle Bezirke 1=Such Bezirk-Name
18        //  2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
19        global $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
20        $arr=explode("-", $gbkennz, 3);
21        $zgbbez=trim($arr[0]);
22        $zblatt=trim($arr[1]);
23        $zbvnr=trim($arr[2]);
24        if ($zgbbez == "") { // keine Eingabe
25                return 0; // Amtsgerichte oder Bezirke listen
26        } elseif ( ! is_ne_zahl($zgbbez)) { // Alphabetische Eingabe
27                return 1; // Such Bezirk-NAME
28        } elseif ($zblatt == "") {
29                return 2; // Such Bezirk-NUMMER
30        } else { // Format von BlattNr pruefen
31        //'19'      linksbÃŒndig
32        //'000019 ' gefÃŒllt 6 + blank
33        //'000019A' .. mit Zusatzbuchstabe
34        //'0300001' gefÃŒllt 7, bei Blattart 5000 "fiktives Blatt"
35                $len=strlen($zblatt);
36                if ($len > 0 AND $len < 8) {           
37                        if (trim($zblatt, "0..9 ") == "") { // Normalfall: nur Zahlen (und Blank))
38                                $zblattn= rtrim(ltrim($zblatt, "0"), " ");
39                                $zblattz="";
40                        } else { // Sonderfall: Zusatz-Buchstabe am Ende
41                                $zblattn=substr($zblatt,0,$len-1);
42                                $zblattz=strtoupper(substr($zblatt,$len-1,1));
43                                if ((trim($zblattn, "0..9") == "") and (trim($zblattz, "A..Z") == "")) {
44                                        $zblattn= ltrim($zblattn, "0"); // ohne fuehrende Nullen
45                                } else {
46                                        echo "<p class='err>Format 'Blatt': bis zu 6 Zahlen und ggf. ein Buchstabe</p>";       
47                                        return 9;
48                                }
49                        }
50                        if ($zbvnr == "") {
51                                return 3; // Such BLATT
52                        } elseif (is_ne_zahl($zbvnr)) {         
53                                // $zbvnr=ltrim($zbvnr,"0"); // DB-Format ist integer
54                                // Vorsicht, Wert "0" ist moeglich und gueltig
55                                return 4; // Such Grundstueck
56                        } else {
57                                echo "<p class='err>Die Buchungsstelle (BVNR) '".$zbvnr."' ist nicht numerisch</p>";
58                                return 9;
59                        }
60                } else {
61                        echo "<p class='err>Das Grundbuch-Blatt '".$zblatt."' ist ung&uuml;ltig.</p>";
62                        return 9;
63                }
64        }
65}
66
67function suchfeld($suchstring) {        // Suchstring Ausgeben UND das Eingabeformular damit belegen
68        $out="<a title='Dies als Suchbegriff setzen' href='javascript:formular_belegung(\"".$suchstring."-\")'>".$suchstring."</a>";
69        return $out;
70}
71
72// function Typ "zeile_**"  = Ausgabe eines Knotens
73// - Icon,  ggf. mit Link zur Buchauskunft
74// - Zeile, ggf. mit Link zur weiteren Auflösung untergeordneter Knoten
75// Hierin die Encodierung fÃŒr url und HTML.
76
77function zeile_ag ($ag, $anr, $aktuell) {       // Zeile  A m t s g e r i c h t
78        global $gkz, $gemeinde, $epsg, $auskpath;
79        if ($ag == "") {
80                $agd=$anr; // Ersatz: Nummer statt Name. Besser: Name immer fÃŒllen
81        } else {
82                $agd=htmlentities($ag, ENT_QUOTES, "UTF-8");
83        }
84        if ($aktuell) {$cls=" aktuell";}
85        echo "\n<div class='ga".$cls."' title='Amtsgericht'>";
86                echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='AG' title='Amtsgericht'> ";
87                echo "AG <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";           
88                echo $agd."</a> (".$anr.")";
89        echo "\n</div>";
90        return;
91}
92
93function zeile_gbbez ($gnam, $zgbbez, $aktuell) {       // Zeile Grundbuch - B e z i r k
94        // Parameter: aktuell = Bool fÃŒr farbliche Markierung der Zeile als aktuell angeklicktes Obj.
95        global $gkz, $gemeinde, $epsg, $person;
96        $gnamd=htmlentities($gnam, ENT_QUOTES, "UTF-8");
97        if ($aktuell) {$cls=" aktuell";}       
98        echo "\n<div class='gk".$cls."' title='GB-Bezirk'>";
99        echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.' title='GB-Bezirk'> ";
100        echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez;
101        echo "&amp;gbbeznam=".urlencode($gnam);
102        if ($person != "") { // EigentÃŒmer-Suche
103                echo "&amp;person=".$person."'>";
104                echo "Bezirk ".$gnamd."</a> (".$zgbbez.")";             
105        } else {  // Grundbuch-Suche
106                echo "'>";
107                echo "Bezirk ".$gnamd."</a> (".suchfeld($zgbbez).")";           
108        }
109        echo "\n</div>";
110        return;
111}
112
113function zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, $dienend, $person, $aktuell) {
114        global $gkz, $gemeinde, $epsg, $auskpath;
115        // Zeile Grundbuch - B l a t t
116        $blattd=ltrim($blatt, "0"); // Display-Version ohne fÃŒhrende Nullen
117        if ( $dienend) {$dientxt="dienendes ";}
118        $blattlnk=urlencode($blatt); // trailing Blank
119        if ($beznam != "") {$nam = $beznam." ";}
120        if ($aktuell) {$cls=" aktuell";}       
121
122        echo "\n<div class='gb".$cls."' title='".$dientxt."GB-Blatt'>";
123
124        // Icon / Nachweis
125        if ($blattgml == "") { // Link zum Nachweis nur wenn GML bekannt
126                echo "\n\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt' title='".$dientxt."GB-Blatt'>";
127        } else {
128                echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$blattgml."\")'>";
129                        echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt' title='Nachweis'>";
130                echo "\n\t</a> ";
131        }
132
133        // Text, Self-Link
134        echo $nam." <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg;
135        echo "&amp;blattgml=".$blattgml."&amp;gbkennz=".$bezirk."-".$blattlnk;
136
137        echo "&amp;gbbeznam=".urlencode($beznam);
138
139        if ($person != "") {echo "&amp;person=".$person;} // nur fÃŒr EigentÃŒmer-Suche
140        echo "'>Blatt&nbsp;".$blattd."</a>\n</div>";
141        return;
142}
143
144function zeile_buchung($buchunggml, $bvnr, $blattkennz, $dienend, $aktuell) {
145        // Zeile  B u c h u n g s s t e l l e  -  GrundstÃŒck ausgeben
146        global $gkz, $gemeinde, $epsg, $auskpath;
147        if ($bvnr == 0) {
148                $bvnra = "-";
149        } else {
150                $bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
151        }
152        if ($diened) {
153                $ti="dienendes&nbsp;";
154                $re="Recht an ";
155        } else {
156                $ti="";
157                $re="";
158        }
159        if ($aktuell) {$cls=" aktuell";}       
160        echo "\n<div class='gs".$cls."' title='".$ti."Grundst&uuml;ck'>";
161        echo "\n\t<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'  title='".$ti."Grundst&uuml;ck'> ".$re;
162        if ($blattkennz == "") { // ohne Link
163                echo "Buchung ".$bvnra;
164        } else {
165                $gbkennlnk=urlencode($blattkennz."-".$bvnr); // Trailing Blanks!
166                echo "<a href='".$_SERVER['SCRIPT_NAME']. "?gkz=". $gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;buchunggml=".$buchunggml;
167                echo "&amp;gbkennz=".$gbkennlnk."'>Buchung ".$bvnra."</a>";
168        }
169        echo "\n</div>";
170        return;
171}
172
173function zeile_gemeinde ($gmdnr, $gmdname, $aktuell) {
174        // Eine Zeile zu Gemeinde ausgeben, SchlÃŒssel und Name wird ÃŒbergeben
175        global $gkz, $gemeinde, $epsg;
176        $stadt=htmlentities($gmdname, ENT_QUOTES, "UTF-8");
177        $bez=urlencode($gmdname);
178        if ($aktuell) {$cls=" aktuell";}
179        echo "\n<div class='gm".$cls."' title='Gemeinde'>";
180                echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
181                echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gmdnr."&amp;bez=".$bez."'>";             
182                echo  " ".$stadt."</a> (".$gmdnr.")";
183        echo "\n</div>";
184        return;
185}
186
187function zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur, $aktuell) {
188        // Zeile mit Icon (Link zum Buch-Nachweis) und Text (Link zum Positionieren)
189        global $gkz, $gemeinde, $epsg, $auskpath, $scalefs;
190
191        if ($aktuell) {$cls=" aktuell";}
192        echo "\n<div class='fs".$cls."'>";
193        echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
194                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS' title='Nachweis'>";
195        echo "\n\t</a>\n\t";                   
196
197        echo "&nbsp;<a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
198        echo "javascript:";
199                echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
200                echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
201                echo "parent.parent.showHighlight(".$x.",".$y.");' ";
202        echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
203        echo "onmouseout='parent.parent.hideHighlight()'>";
204
205        if ($gmkg == "" ) {
206                echo "Flst. "; // Im FS-Teil: Gem+Flur als Knoten darÃŒber ($gmkg und $flur leer)
207        } else {
208                echo $gmkg." "; // Im GB-und Nam-Teil in der Zeile angezeigt
209        }
210        if ($flur != "" ) {echo $flur."-";}
211        echo $fskenn."</a>\n</div>";
212        return;
213}
214
215function zeile_person ($persongml, $nachname, $vorname) {
216        global $gkz, $gemeinde, $epsg, $auskpath;
217        // Zeile  P e r s o n (oder Firma)
218        $nnam=htmlentities($nachname, ENT_QUOTES, "UTF-8");
219        $namlnk=urlencode($nachname);
220        $vnam=htmlentities($vorname, ENT_QUOTES, "UTF-8");
221        // Link zur Auskunft Person ++ Icon differenzieren nach Eigentuemerart?
222
223echo "<div class='pe'>
224        <a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$persongml."\")'>
225                <img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG' title='Nachweis'>
226        </a>           
227        <a title='Person' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$persongml."&amp;name=".$namlnk."'>".$nnam.", ".$vnam."</a>
228</div>";
229return;
230}
231
232function GB_Buchung_FS ($linelimit, $blattgbkenn) {
233        // Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id) suchen der
234        // Buchungen (Gruppenwechsel) und FlurstÃŒcke (Links)
235        global $gemeinde, $blattgml, $epsg, $gfilter, $debug;
236
237        // SQL-Bausteine vorbereiten
238        // vorne gleich
239        $sql1 ="SELECT s1.laufendenummer AS lfd, s1.gml_id AS bsgml, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
240        if($epsg == "25832") { // Transform nicht notwendig
241                $sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
242                $sql1.="st_y(st_centroid(f.wkb_geometry)) AS y, ";
243        } else { 
244                $sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
245                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";                     
246        }
247        $sql1.="g.gemarkung, g.gemarkungsname FROM ax_buchungsstelle s1 ";
248
249        // 2 Varianten zwischen
250    $sqlz1="JOIN ax_flurstueck f ON f.istgebucht = s1.gml_id ";
251       
252        $sqlz2 ="JOIN ax_buchungsstelle s2 ON s2.gml_id = ANY(s1.an) "; // nur an oder "an" und "zu" ?
253// Test: SELECT * FROM ax_buchungsstelle WHERE NOT zu IS NULL;  // keine Treffer fÃŒr "zu"
254//      $sqlz2 ="JOIN ax_buchungsstelle s2 ON (s2.gml_id = ANY(s1.an) OR s2.gml_id = ANY(s1.zu)) ";
255    $sqlz2.="JOIN ax_flurstueck f ON f.istgebucht = s2.gml_id ";
256
257        // hinten gleich
258        $sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
259        $sql2.="WHERE s1.istbestandteilvon = $1 ";
260        switch ($gfilter) {
261                case 1: // Einzelwert
262                        $sql2.="AND g.gemeinde='".$gemeinde."' "; break;
263                case 2: // Liste
264                        $sql2.="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
265        }
266        $sql2.="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
267
268        // Abfrage:  d i r e k t e  B u c h u n g e n
269        // Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< FlurstÃŒck
270        #$sql=$sql1.$sqlz1.$sql2; // Direkte Buchungen
271
272        $v=array($blattgml, $linelimit);
273        $res=pg_prepare("", $sql1.$sqlz1.$sql2);
274        $res=pg_execute("", $v);
275        if (!$res) {
276                echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
277                if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";}
278                return;
279        }
280        $zfs1=0;
281        $gwbv="";
282        while($row = pg_fetch_array($res)) {   
283                $bvnr=$row["lfd"];
284                $bsgml=$row["bsgml"]; // Buchungsstelle gml_id
285                if ($gwbv != $bvnr) { // Gruppierung Buchungs-Stelle (BVNR)
286                        $gwbv = $bvnr;
287                        zeile_buchung($bsgml, $bvnr, $blattgbkenn, false, false);
288                }
289                $fs_gml=$row["gml_id"];
290                $gmkg=$row["gemarkungsname"];
291                $flur=$row["flurnummer"];
292                $fskenn=$row["zaehler"];
293                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
294                $x=$row["x"];
295                $y=$row["y"];
296                zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur, false);
297                $zfs1++;
298        }
299        // "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
300        if($zfs1 > 1) { // ab 2
301                echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Grundbuch";
302                if($zfs1 >= $linelimit) {
303                        echo "... und weitere"; //++ BlÀttern einfÃŒhren?
304                }
305                echo "</p>";
306        }
307        if($zfs1 > 0) {echo "<hr>";} // Trennen
308
309        // Abfrage:  R e c h t e  a n   /   d i e n e n d e  B u c h u n g e n
310        $v=array($blattgml, $linelimit);
311        $res=pg_prepare("", $sql1.$sqlz2.$sql2);
312        $res=pg_execute("", $v);
313        if (!$res) {
314                echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
315                #if ($debug >= 3) {echo "\n<p class='dbg'>".$sql1.$sqlz2.$sql2."</p>";}
316                return;
317        }
318        $zfs2=0;
319        $gwbv="";
320        while($row = pg_fetch_array($res)) {   
321                $bvnr=$row["lfd"];
322                $bsgml=$row["bsgml"]; // Buchungsstelle gml_id
323                if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR) - dienend
324                        $gwbv = $bvnr;
325                        zeile_buchung($bsgml, $bvnr, $blattgbkenn, true, false);
326                }
327                $fs_gml=$row["gml_id"];
328                $gmkg=$row["gemarkungsname"];
329                $flur=$row["flurnummer"];
330                $fskenn=$row["zaehler"];
331                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
332                zeile_flurstueck ($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false);
333                $zfs2++;
334        }
335        // Foot
336        if($zfs1 + $zfs2 == 0) {
337                echo "\n<p class='anz'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
338        } elseif($zfs2 > 1) { // keine Meldung "nichts gefunden - Rechte an" wenn Treffer in Teil 1
339                echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.";
340                if($zfs2 >= $linelimit) {
341                        echo "... und weitere"; // BlÀttern einfÃŒhren?
342                }
343                echo "</p>";
344        }
345        return;
346}
347
348?>
Note: See TracBrowser for help on using the repository browser.