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

Revision 339, 13.6 KB checked in by frank.jaeger, 9 years ago (diff)

Rückbau von "substring(gml_id)" in Views und Programmen.
Namensänderung von Schlüsseltabellen von ax_* auf v_*.

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