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

Revision 284, 12.9 KB checked in by frank.jaeger, 8 years ago (diff)

Mapbender-Navigation verbessert.

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