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

Revision 356, 13.9 KB checked in by frank.jaeger, 8 years ago (diff)

ALKIS-Mapbender-Navigation umgestellt von .ico- auf .png-Grafiken.
Weitere kleine Korrekturen an ALKIS-Mapbender-Navigation.

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