source: trunk/data/mapbender/http/nav/alkisnav_fls.php @ 66

Revision 66, 11.9 KB checked in by frank.jaeger, 12 years ago (diff)
Line 
1<?php
2// Version vom 10.01.2011
3// Test: http://mapserver.krz.de/mapbenderneu/nav/alkisnav_eig.htm?gkz=150&gemeinde=40
4$gkz = urldecode($_REQUEST["gkz"]); // Mandant
5include("../../conf/alkisnav_conf.php");
6import_request_variables("PG");
7
8// Datenbank-Connection
9$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password;
10$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname);
11?>
12
13<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
14<html>
15<head>
16        <meta http-equiv="cache-control" content="no-cache">
17        <meta http-equiv="pragma" content="no-cache">
18        <meta http-equiv="expires" content="0">
19        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
20        <title>ALKIS-Suche Flurst&uuml;ck</title>
21        <link rel="stylesheet" type="text/css" href="alkisnav.css">
22</head>
23<body>
24
25<?php
26
27function is_ne_zahl($wert) {
28        // Prueft, ob ein Wert ausschließlich aus den Zahlen 0 bis 9 besteht
29        if (trim($wert, "0..9") == "") {return true;} else {return false;}
30}
31
32function ZerlegungFsKennz($fskennz) {
33// Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen, Erwartet wird gggg-fff-zzzz/nnn
34        global $debug, $zgemkg, $zflur, $zzaehler, $znenner;            $arr = explode("-", $fskennz, 4);
35        $zgemkg=trim($arr[0]);
36        $zflur=trim($arr[1]);
37        $zfsnr=trim($arr[2]);
38        if ($zgemkg == "") {
39                return 1; // alle Gmkg listen
40        } elseif ( ! is_ne_zahl($zgemkg)) {
41                return 1; // Such Name
42        } elseif ($zflur == "") {
43                return 2; // G-Nr
44        } elseif ( ! is_ne_zahl($zflur)) {
45                echo "<p class='err>Die Flurnummer '".$zflur."' ist nicht numerisch</p>";
46                return 0;
47        } elseif ($zfsnr == "") {               
48                return 3; // Flur                               
49        } else {
50                $zn=explode("/", $zfsnr, 2);
51                $zzaehler=trim($zn[0]);
52                $znenner=trim($zn[1]);                         
53                if ( ! is_ne_zahl($zzaehler)) {
54                        echo "<p class='err>FlurstÃŒcksnummer '".$zzaehler."' ist nicht numerisch</p>";
55                        return 0;
56                } elseif ($znenner == "") {
57                        return 4;
58                } elseif (is_ne_zahl($znenner)) {
59                        return 5;                                                               
60                } else {
61                        echo "<p class='err>FlurstÃŒcks-Nenner '".$znenner."' ist nicht numerisch</p>";
62                        return 0;
63                }
64        }
65}
66
67function SuchGmkgName() {
68// Gemarkung suchen nach Name(-nsanfang)
69        global $con, $gkz, $gemeinde, $debug, $fskennz;
70        $linelimit=120;
71        if(preg_match("/\*/",$fskennz)){
72                $match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
73        } else {
74                $match = trim($fskennz)."%";
75        }       
76        $sql ="SELECT v.gemeindename, g.gemarkungsnummer, g.bezeichnung ";
77        $sql.="FROM ax_gemarkung g JOIN gemeinde_gemarkung v ON g.gemarkungsnummer=v.gemarkung ";
78   $sql.="WHERE bezeichnung ILIKE $1 ";
79        // GUI-Parameter filtert auf Gemeindegebiet
80        if($gemeinde > 0) {$sql.=" AND v.gemeinde=".$gemeinde;} // wie prepared?
81        $sql.=" ORDER BY g.bezeichnung LIMIT $2 ;";
82        $v=array($match, $linelimit);
83        $res=pg_prepare("", $sql);
84        $res=pg_execute("", $v);
85        if (!$res) {
86                echo "\n<p class='err'>Fehler bei Gemarkung</p>";
87                if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
88                return 0;
89        }
90        $cnt = 0;
91        while($row = pg_fetch_array($res)) {
92                $gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
93                $gnr=$row["gemarkungsnummer"];
94                $stadt=$row["gemeindename"];                 echo "\n<div class='gk' title='Gemarkung'>";
95                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemkg'>";
96                        echo "<a href='alkisnav_fls.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;fskennz=".$gnr."'>";               
97                                echo  " ".$gnam." (".$gnr.")";
98                                if ($gemeinde == 0) {echo  " ".$stadt;} // Kreisweit
99                        echo "</a>";
100                echo "\n</div>";
101                $cnt++;
102        }
103        if($cnt == 0){
104                echo "\n<p class='err'>Keine Gemarkung.</p>";
105        } elseif($cnt >= $linelimit) {
106                echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
107        } elseif($cnt == 1) { // Eindeutig!
108                return $gnr;
109        }
110        return 0;
111}
112
113function EineGemarkung($AuchGemkZeile) {
114        // Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
115        global $con, $gkz, $gemeinde, $debug, $zgemkg;
116        $linelimit=120; // max. Fluren je Gemarkung
117        if ($AuchGemkZeile) {
118                $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;"; // WHERE f.land= ?
119                $v=array($zgemkg);
120                $res=pg_prepare("", $sql);
121                $res=pg_execute("", $v);
122                if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
123                $zgmk=0;
124                while($row = pg_fetch_array($res)) {   
125                        $gmkg=$row["bezeichnung"];
126                        $zgmk++;
127                }
128                if ($zgmk == 0) {
129                        echo "\n<div class='gk' title='Gemarkung'>";
130                                echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemkg'>";
131                                        echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
132                        echo "\n</div>";
133                        return;
134                }
135                // > 1 auch möglich ???
136                echo "\n<div class='gk' title='Gemarkung'>";
137                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemkg'>";
138                        echo "<a href='alkisnav_fls.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;fskennz=".$zgemkg."'>";             
139                                echo  " Gemarkung ".$gmkg." (".$zgemkg.")";
140                        echo "</a>";
141                echo "\n</div>";
142        }
143        $sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
144        $sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;";     // WHERE f.land= ?
145        $v=array($zgemkg, $linelimit);
146        $res=pg_prepare("", $sql);
147        $res=pg_execute("", $v);
148        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
149        $zfl=0;
150        while($row = pg_fetch_array($res)) {   
151                $flur=$row["flur"];
152                echo "\n<div class='fl' title='Flur'>";
153                        echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
154                        echo "Flur<a href='alkisnav_fls.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;fskennz=".$zgemkg."-".$flur."'>&nbsp;".$flur."&nbsp;</a>";
155                echo "\n</div>";
156                $zfl++;
157        }
158        if($zfl == 0) {
159                echo "\n<p class='err'>Keine Flur.</p>";
160        } elseif($cnt >= $linelimit) {
161                echo "\n<p>... und weitere</p>";
162        }
163        return;
164}
165
166function EineFlur() {
167        // Kennzeichen bestehend aus Gemarkung und Flurnummer wurde eingegeben
168        global $con, $gkz, $gemeinde, $debug, $scalefs, $epsg, $auskpath, $zgemkg, $zflur;
169        $linelimit=600; // Wie groß kann eine Flur sein?
170        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
171        $v=array($zgemkg);
172        $res=pg_prepare("", $sql);
173        $res=pg_execute("", $v);
174        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
175        $zgmk=0;
176        while($row = pg_fetch_array($res)) {   
177                $gmkg=$row["bezeichnung"];
178                $zgmk++;
179        }
180        if ($zgmk == 0) {
181                echo "\n<div class='gk' title='Gemarkung'>";
182                        echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemkg'>";
183                                echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
184                echo "\n</div>";
185                return;
186        }
187        echo "\n<div class='gk' title='Gemarkung'>";
188                echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemkg'> ";
189                echo "Gemarkung <a href='alkisnav_fls.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;fskennz=".$zgemkg."'> ".$gmkg." (".$zgemkg.")</a>";
190        echo "\n</div>";
191        echo "\n<div class='fl' title='Flur'>";
192                echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
193                echo "Flur <a href='alkisnav_fls.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;fskennz=".$zgemkg."-".$zflur."'> ".$zflur."</a>";
194        echo "\n</div>";
195
196        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
197        $sql.="x(st_transform (st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
198        $sql.="y(st_transform (st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";
199   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
200        $sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land= ?
201        $v=array($zgemkg, $zflur, $linelimit);
202        $res=pg_prepare("", $sql);
203        $res=pg_execute("", $v);
204        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
205        $zfs=0;
206        while($row = pg_fetch_array($res)) {   
207                $fs_gml=$row["gml_id"];
208                $flur=$row["flurnummer"];
209                $fskenn=$row["zaehler"];
210                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
211                $x=$row["x"];
212                $y=$row["y"];
213                echo "\n<div class='fs'>";
214                        echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
215                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
216                        echo "\n\t</a> ";                       
217                        echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
218                                echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
219                                echo "parent.parent.hideHighlight();' ";
220                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
221                                echo "onmouseout='parent.parent.hideHighlight()'>&nbsp;".$fskenn."&nbsp;</a>";
222                echo "\n</div>";
223                $zfs++;
224        }
225        if($zfs == 0) {
226                echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";
227        } elseif($zfs >= $linelimit) {
228                echo "\n<p>... und weitere</p>";
229        }
230        return;
231}
232
233function nurEinFlurstueck() {
234        // FlurstÃŒckskennzeichen komplett bis zum Zaehler eingegeben
235        // Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
236        global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $zgemkg, $zflur, $zzaehler, $znenner;
237
238        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
239        $sql.="x(st_transform (st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
240        $sql.="y(st_transform (st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";
241        $sql.="g.gemarkungsnummer, g.bezeichnung ";
242   $sql.="FROM ax_flurstueck f JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
243        $sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
244        If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
245        $sql.="ORDER BY f.zaehler, f.nenner;";
246        // WHERE f.land= ?
247        $v=array($zgemkg, $zflur, $zzaehler);
248        $res=pg_prepare("", $sql);
249        $res=pg_execute("", $v);
250        if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";}
251        $zfs=0;
252        while($row = pg_fetch_array($res)) {   
253                $fs_gml=$row["gml_id"];
254                $gmkg=$row["bezeichnung"];
255                $flur=$row["flurnummer"];
256                $fskenn=$row["zaehler"];
257                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
258                $x=$row["x"];
259                $y=$row["y"];
260                echo "\n<div class='fs'>";
261                        echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
262                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
263                        echo "\n\t</a> ";               
264                        echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
265                                echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
266                                echo "parent.parent.hideHighlight();' ";
267                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
268                                echo "onmouseout='parent.parent.hideHighlight()'>";
269                        echo $gmkg." ".$flur."-".$fskenn."</a>";
270                echo "\n</div>";
271                $zfs++;
272        }
273        if($zfs == 0) {echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";}
274        return;
275}
276
277// ===========
278// Start hier!
279// ===========
280if(isset($epsg)) {
281        if ($debug >= 2) {echo "<p>aktueller EPSG='".$epsg."'</p>";     } // aus MB
282        if (substr($epsg, 0, 5) == "EPSG:") {$epsg=substr($epsg, 5);}
283} else {
284        if ($debug >= 2) {echo "<p class='err'>kein EPSG gesetzt</p>";}
285        $epsg=$gui_epsg; // aus Conf
286}
287if ($debug >= 2) {
288        if(isset($gemeinde)) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";
289        } else {echo "<p>Kein Filter Gemeinde</p>";}
290}
291
292// Eingabe interpretieren
293switch (ZerlegungFsKennz($fskennz)) {
294case 0:
295        echo "<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
296        break;
297case 1:
298        if ($debug >= 2) {echo "<p>Gemarkungsname ".$zgemkg."</p>";}
299        $gnr=SuchGmkgName();
300        if ($gnr > 0) {
301                $zgemkg=$gnr;
302                EineGemarkung(false);
303        };     
304        break;
305case 2:
306        if ($debug >= 2) {echo "<p>Gemarkungsnummer ".$zgemkg."</p>";} 
307        EineGemarkung(true);
308        break;
309case 3:
310        if ($debug >= 2) {echo "<p>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
311        EineFlur();
312        break;
313case 4:
314        if ($debug >= 2) {echo "<p>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
315        nurEinFlurstueck();
316        break;
317case 5:
318        if ($debug >= 2) {echo "<p>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."/".$znenner."</p>";}
319        nurEinFlurstueck();
320        break;
321}
322 ?>
323
324</body>
325</html>
Note: See TracBrowser for help on using the repository browser.