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

Revision 85, 12.3 KB checked in by frank.jaeger, 11 years ago (diff)

ALKIS-Navigation auch mit Parameter "Gemeinde-Liste", z.B. ein Wasserverband als Teil eines Kreisgebietes

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