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

Revision 278, 6.6 KB checked in by frank.jaeger, 8 years ago (diff)

Mapbender-Navigation mit ALKIS-Daten komplett überarbeitet.

Line 
1<?php
2/* Version vom
3        2013-04-26      NEU Function "GB_Buchung_FS" ausgelagert.
4                                        Code aus aus _eig soll auch in _grd verwendet werden
5                Dazu Var-Namen harmonisieren:
6                _eig    _grd     NEU
7                $gb     $gblatt  $blattgml
8*/
9
10function GB_Buchung_FS ($linelimit) {
11// Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id):
12//  - suchen der Buchungen (Gruppenwechsel)
13//  - und FlurstÃŒcke (Links)
14// Wird verwendet in den Modulen _eig und _grd.
15// 2013-04-26   Noch kein BlÀttern und noch keine BerÃŒcksichtigung des Filters auf "Gemeinde"
16// ToDo: ZÀhler fÌr Blatt, Buchung, FS - am Ende ausgeben
17
18        global $gkz, $gemeinde, $blattgml, $scalefs, $auskpath, $epsg, $gfilter, $debug;
19
20        // SQL-Bausteine vorbereiten
21        $sql1 ="SELECT s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
22        if($epsg == "25832") { // Transform nicht notwendig
23                $sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
24                $sql1.="st_y(st_centroid(f.wkb_geometry)) AS y, ";
25        } else { 
26                $sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
27                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";                     
28        }
29        $sql1.="g.gemarkung, g.gemarkungsname ";
30   $sql1.="FROM alkis_beziehungen vbg ";
31        $sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von = s1.gml_id ";
32
33        // Zwischen-JOIN (zusÀtzlich nur bei zweiter Abfrage)
34        $sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
35        $sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
36
37        $sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
38        $sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
39
40        $sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von = f.gml_id ";
41   $sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
42        $sql2.="WHERE vbg.beziehung_zu= $1 AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
43        switch ($gfilter) {
44                case 1: // Einzelwert
45                        $sql2.="AND g.gemeinde=".$gemeinde." "; break;
46                case 2: // Liste
47                        $sql2.="AND g.gemeinde in (".$gemeinde.") "; break;
48        }
49        $sql2.="ORDER BY s1.laufendenummer, f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
50
51        // Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
52        $sql=$sql1.$sqla1.$sql2; // Direkte Buchungen
53
54        $v=array($blattgml, $linelimit);
55        $res=pg_prepare("", $sql);
56        $res=pg_execute("", $v);
57        if (!$res) {
58                echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
59                if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
60                return;
61        }
62        $zfs1=0;
63        $gwbv="";
64        while($row = pg_fetch_array($res)) {   
65
66                // Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
67                $bvnr=$row["lfd"];
68                if ($gwbv != $bvnr) {
69                        if ($bvnr == 0) {
70                                $bvnra = "-";
71                        } else {
72                                $bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
73                        }
74                        $gwbv = $bvnr; // Steuerg GW BVNR
75                        echo "\n<div class='gs' title='Grundst&uuml;ck'>";
76                        echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
77                        echo "Buchung ".$bvnra."</div>";
78                }
79
80                $fs_gml=$row["gml_id"];
81                $gmkg=$row["gemarkungsname"];
82                $flur=$row["flurnummer"];
83                $fskenn=$row["zaehler"];
84                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
85                $x=$row["x"];
86                $y=$row["y"];
87                echo "\n<div class='fs'>";
88                        echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
89                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
90                        echo "\n\t</a> ";       
91                        echo "\n\t".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
92                                        echo "javascript:";
93                                        echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
94                                        echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
95                                        echo "parent.parent.showHighlight(".$x.",".$y.");' ";
96                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
97                                echo "onmouseout='parent.parent.hideHighlight()'>";
98                        echo " Flur ".$flur." ".$fskenn."</a>";
99                echo "\n</div>";
100                $zfs1++;
101        }
102        if($zfs1 == 0) {
103                // "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
104        } elseif($zfs1 >= $linelimit) {
105                echo "\n<p class='anz'>... und weitere</p>";
106        // +++  BlÀttern einfÃŒhren?
107        } elseif($zfs1 > 1) { // ab 2
108                echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Grundbuch</p>";
109        }
110
111        if($zfs1 > 1) { // wenn's was zu trennen gibt
112                echo "<hr>"; // Trennen
113        }
114
115        // Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
116        // buchungsStelle2 < an < buchungsStelle1
117        $sql=$sql1.$sqlz.$sqla2.$sql2; // Rechte an
118
119        $v=array($blattgml, $linelimit);
120        $res=pg_prepare("", $sql);
121        $res=pg_execute("", $v);
122        if (!$res) {
123                echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
124                if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
125                return;
126        }
127        $zfs2=0;
128        $gwbv="";
129        while($row = pg_fetch_array($res)) {   
130
131                // Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
132                $bvnr=$row["lfd"];
133                if ($gwbv != $bvnr) {
134                        if ($bvnr == 0) {
135                                $bvnra = "-";
136                        } else {
137                                $bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
138                        }
139                        $gwbv = $bvnr; // Steuerg GW BVNR
140                        echo "\n<div class='gs' title='Grundst&uuml;ck'>";
141                        echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
142                        echo "Buchung ".$bvnra."</div>";
143                }
144
145                $fs_gml=$row["gml_id"];
146                $gmkg=$row["gemarkungsname"];
147                $flur=$row["flurnummer"];
148                $fskenn=$row["zaehler"];
149                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
150                $x=$row["x"];
151                $y=$row["y"];
152                echo "\n<div class='fs'>";
153                        echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
154                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
155                        echo "\n\t</a> ";       
156                        echo "\n\tRecht an ".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
157                                        echo "javascript:";
158                                        echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
159                                        echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
160                                        echo "parent.parent.showHighlight(".$x.",".$y.");' ";
161                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
162                                echo "onmouseout='parent.parent.hideHighlight()'>";
163                        echo " Flur ".$flur." ".$fskenn."</a>";
164                echo "\n</div>";
165                $zfs2++;
166        }
167        if($zfs1 + $zfs2 == 0) {
168                echo "\n<p class='anz'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
169        } elseif($zfs >= $linelimit) {
170                echo "\n<p class='anz'>... und weitere</p>";
171        // +++ BlÀttern einfÃŒhren?
172        } elseif($zfs2 > 1) { // keine Meldung "nichts gefunden - Rechte an" wenn Treffer in Teil 1
173                echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
174        }
175        return;
176}
177
178?>
Note: See TracBrowser for help on using the repository browser.