source: trunk/mapbender/http/nav/alkisnav_fls.php @ 283

Revision 283, 24.9 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation nochmals ergänzt: aktuell gewählte Ebene wird farblich hinterlegt. Im GB-Teil kann Buchung verlinkt werden.

Line 
1<?php
2/* Version vom
3        2013-04-16      "import_request_variables" entfÀllt in PHP 5.4,
4                                        Fehlerkorrektur Komma in SQL bei FS-Suche.
5        2013-04-26      Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
6                                        ZurÃŒck-Link, Titel der Transaktion anzeigen
7        2013-04-29      Test mit IE
8        2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
9        2013-05-08  Variablen-Namen geordnet, Hervorhebung aktuelles Objekt, in Arbeit ...
10*/
11$cntget = extract($_GET);
12include("../../conf/alkisnav_conf.php");
13include("alkisnav_fkt.php"); // Funktionen $con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
14$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
15echo <<<END
16<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
17<html>
18<head>
19        <meta http-equiv="cache-control" content="no-cache">
20        <meta http-equiv="pragma" content="no-cache">
21        <meta http-equiv="expires" content="0">
22        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
23        <title>ALKIS-Suche Flurst&uuml;ck</title>
24        <link rel="stylesheet" type="text/css" href="alkisnav.css">
25        <script type="text/javascript">
26                function imFenster(dieURL) {
27                        var link = encodeURI(dieURL);
28                        window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
29                }
30                function transtitle(trans) {
31                        document.getElementById('transaktiontitle').innerHTML = trans;
32                }
33        </script>
34</head>
35<body>
36<a href='javascript:history.back()'>
37        <img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
38</a>
39<dfn class='title' id='transaktiontitle'></dfn>
40
41END;
42
43function is_ne_zahl($wert) {
44        // Prueft, ob ein Wert ausschließlich aus den Zahlen 0 bis 9 besteht
45        if (trim($wert, "0..9") == "") {return true;} else {return false;}
46}
47
48function h_hinten($zahl) {
49        // Testen: Wurde an eine Zahl ein "h" angehÀngt?
50        // Wenn ja, dann Schalter setzen und nur numerischen Teil zurÃŒck geben.
51        global $phist, $debug;
52        $zahl=trim($zahl);
53        $zlen=strlen($zahl) - 1;
54        if ($zlen > 0) {
55                $hinten = ucfirst(substr($zahl, $zlen, 1));
56                if ($hinten == "H" ) {
57                        $vorn=trim(substr($zahl, 0, $zlen));
58                        if (is_ne_zahl($vorn)) { // Zahl *und* "H"
59                                $zahl = $vorn;
60                                $phist = true;
61                        }
62                }
63        }
64        return $zahl;
65}
66
67function ZerlegungFsKennz($fskennz) {
68        // Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn
69        // Teile der Zerlegung in global-Vars "$z..."
70        global $debug, $zgemkg, $zflur, $zzaehler, $znenner;            $arr = explode("-", $fskennz, 4);
71        $zgemkg=trim($arr[0]);
72        $zflur=h_hinten($arr[1]);
73        $zfsnr=trim($arr[2]);
74        if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$zgemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";}
75       
76        if ($zgemkg == "") {
77                return 0; // Gemeinden oder Gemarkungen listen
78        } elseif ( ! is_ne_zahl($zgemkg)) {
79                return 1; // Such Name
80        } elseif ($zflur == "") {
81                return 2; // G-Nr
82        } elseif ( ! is_ne_zahl($zflur)) {
83                echo "<p class='err'>Die Flurnummer '".$zflur."' ist nicht numerisch</p>";
84                return 9;
85        } elseif ($zfsnr == "") {
86                return 3; // Flur                               
87        } else {
88                $zn=explode("/", $zfsnr, 2);
89                $zzaehler=h_hinten(trim($zn[0]));
90                $znenner =h_hinten(trim($zn[1]));
91                if ( ! is_ne_zahl($zzaehler)) {
92                        echo "<p class='err'>FlurstÃŒcksnummer '".$zzaehler."' ist nicht numerisch</p>";
93                        return 9;
94                } elseif ($znenner == "") {
95                        return 4;
96                } elseif (is_ne_zahl($znenner)) {
97                        return 5;                                                               
98                } else {
99                        echo "<p class='err'>FlurstÃŒcks-Nenner '".$znenner."' ist nicht numerisch</p>";
100                        return 9;
101                }
102        }
103}
104
105function flurstueckskoordinaten($gml) {
106        // Die Koordinaten zu einem FlurstÃŒck aus der Datenbank liefern
107        // Parameter: gml_id des FlurstÃŒcke
108        // Return: Array(x,y)
109        global $epsg;
110        $sqlk ="SELECT ";
111        if($epsg == "25832") { // Transform nicht notwendig
112                $sqlk.="x(st_Centroid(wkb_geometry)) AS x, ";
113                $sqlk.="y(st_Centroid(wkb_geometry)) AS y ";
114        } else { 
115                $sqlk.="x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, ";
116                $sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";                   
117        }
118   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
119        $v=array($gml);
120        $resk=pg_prepare("", $sqlk);
121        $resk=pg_execute("", $v);
122        if (!$resk) {echo "\n<p class='err'>Fehler bei Koordinate.</p>";}
123        $rowk = pg_fetch_array($resk);
124        $koor=array("x" => $rowk["x"], "y" => $rowk["y"]);
125        return $koor;
126}
127
128function zeile_gemeinde ($gmdnr, $gmdname, $aktuell) {
129        // Eine Zeile zu Gemeinde ausgeben, SchlÃŒssel und Name wird ÃŒbergeben
130        global $gkz, $gemeinde, $epsg;
131        $stadt=htmlentities($gmdname, ENT_QUOTES, "UTF-8");
132        $bez=urlencode($gmdname);
133        if ($aktuell) {$cls=" aktuell";}
134        echo "\n<div class='gm".$cls."' title='Gemeinde'>";
135                echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
136                echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gmdnr."&amp;bez=".$bez."'>";             
137                echo  " ".$stadt."</a> (".$gmdnr.")";
138        echo "\n</div>";
139        return;
140}
141
142function zeile_gemarkung($gkgnr, $gkgname, $aktuell) {
143        // Eine Zeile zu Gemarkung ausgeben
144        global $con, $gkz, $gemeinde, $epsg, $gfilter;
145        if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
146                $sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;";
147                $v=array($gnr);
148                $res=pg_prepare("", $sql);
149                $res=pg_execute("", $v);
150                if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkungsname.</p>";}
151                $row = pg_fetch_array($res);
152                $gkgname=$row["gemarkungsname"];
153        }
154        if ($gkgname == "") {$gkgname = "(unbekannt)";}
155        $gnam=htmlentities($gkgname, ENT_QUOTES, "UTF-8");
156        if ($aktuell) {$cls=" aktuell";}
157        echo "\n<div class='gk".$cls."' title='Gemarkung'>";
158        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
159        echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."'>";           
160        echo  " ".$gnam."</a> (".$gkgnr.")";
161        echo "\n</div>";
162        return;
163}
164
165function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) { // Eine Zeile zur Flur ausgeben
166        global $gkz, $gemeinde, $epsg;
167        if ($aktuell) {$cls=" aktuell";}
168        echo "\n<div class='fl".$cls."' title='Flur'>";
169        echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
170        $url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."-".$flurnr;
171        echo "<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'>Flur ".$flurnr." </a>";
172        If ($histlnk) { // Link zur hist. Suche anbieten
173                echo " <a class='hislnk' title='Historische Flurst&uuml;cke der Flur' href='".$url."&amp;hist=j'>Hist.</a>";
174        }
175        echo "\n</div>";       
176        return;
177}
178
179function zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, $aktuell) {
180        // Eine Zeile fÃŒr ein historisches FlurstÃŒck ausgeben
181        global $gkz, $gemeinde, $epsg, $auskpath;
182        if ($ftyp == "h") {
183                $ico="Flurstueck_Historisch_Lnk.ico";
184                $titl="Historisches Flurst&uuml;ck";
185        } else {
186                $ico="Flurstueck_Historisch_oR_Lnk.ico";
187                $titl="Historisches Flurst&uuml;ck ohne Raumbezug";
188        }
189        if ($aktuell) {$cls=" aktuell";}
190        echo "\n<div class='hi".$cls."' title='".$titl."'>";
191
192        // Icon -> Buchnachweis
193        echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
194                echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
195        echo "\n\t</a>";
196
197        // Zeile -> tiefer in die Historie
198        $flurl =$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;hist=j";
199        $flurl.="&amp;fskennz=".$gknr."-".$flur."-";
200        echo "\n\thist. Flst. <a href='".$flurl.$fskenn."'>".$fskenn."</a>";           
201
202        echo "\n</div>";
203        return;
204}
205
206function zeile_nachf_fs($gml, $gknr, $flur, $fskenn, $ftyp) {
207        // Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben
208        global $gkz, $gemeinde, $epsg, $auskpath;
209        $fs=$gknr."-".$flur."-".$fskenn;
210        switch ($ftyp) {
211        case "a": // eine FS-Zeile mit Link ausgeben (EinrÃŒckung css passt nicht)
212                $koor=flurstueckskoordinaten($gml);
213                zeile_flurstueck($gml, $fskenn, $koor["x"], $koor["y"], "", "", false);
214                return;
215                break;
216        case "h":
217                $ico="Flurstueck_Historisch_Lnk.ico";
218                $titl="Historisches Flurst&uuml;ck";
219                $hisparm="&amp;hist=j";
220                $auskprog="alkisfshist";
221                break;
222        case "o":
223                $ico="Flurstueck_Historisch_oR_Lnk.ico";
224                $titl="Historisches Flurst&uuml;ck ohne Raumbezug";
225                $hisparm="&amp;hist=j";
226                $auskprog="alkisfshist";
227                break;
228        }
229        // fÃŒr die Hist.-FÀlle:
230        echo "\n<div class='hn' title='Nachfolger: ".$titl."'>";                       
231                echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath.$auskprog.".php?gkz=".$gkz."&amp;gmlid=".$gml."\")'>";
232                        echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='FS'>";
233                echo "\n\t</a> ";               
234                echo "Flst. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fs.$hisparm."'>".$fskenn."</a>";                                     
235        echo "\n</div>";
236        return;
237}
238
239function ListGemeinden() {
240        // Bei Leereingabe im Formular die Gemeinden auflisten
241        global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
242        $linelimit=60;
243        $sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde ";
244        switch ($gfilter) {
245                case 1: // Einzelwert
246                        $sql.="WHERE gemeinde=".$gemeinde." "; break;
247                case 2: // Liste
248                        $sql.="WHERE gemeinde in (".$gemeinde.") "; break;
249                default: break;
250        }
251        $sql.=" ORDER BY gemeindename LIMIT $1 ;";
252        $res=pg_prepare("", $sql);
253        $res=pg_execute("", array($linelimit));
254        if (!$res) {
255                echo "\n<p class='err'>Fehler bei Gemeinde</p>";
256                #if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
257                return 0;
258        }
259        $cnt = 0;
260        while($row = pg_fetch_array($res)) {
261                $gnr=$row["gemeinde"];
262                $gemeindename=$row["gemeindename"];                 zeile_gemeinde($gnr, $gemeindename);
263                $cnt++;
264        }
265        // Foot
266        if($cnt == 0) {
267                echo "\n<p class='anz'>Keine Gemeinde.</p>";
268        } elseif($cnt >= $linelimit) {
269                echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemeinden ... und weitere</p>";
270        } elseif($cnt == 1) { // Eindeutig!
271                return $gnr;
272        } else {
273                echo "\n<p class='anz'>".$cnt." Gemeinden</p>";
274        }
275        return;
276}
277
278function ListGmkgInGemeinde($gkey, $bez) {
279        // Die Gemarkungen zu einem Gemeinde-Key (aus Link) listen
280        global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
281        $linelimit=70;
282
283        // Head
284        zeile_gemeinde($gkey, $bez, true);
285
286        // Body
287        $sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;";
288        $res=pg_prepare("", $sql);
289        $res=pg_execute("", array($gkey, $linelimit));
290        if (!$res) {
291                echo "\n<p class='err'>Fehler bei Gemarkungen</p>";
292                return 1;
293        }
294        $cnt = 0;
295        while($row = pg_fetch_array($res)) {
296                $gnr=$row["gemarkung"];
297                $gnam=$row["gemarkungsname"];
298                zeile_gemarkung($gnr, $gnam, false);
299                $cnt++;
300        }
301        // Foot
302        if($cnt == 0){
303                echo "\n<p class='anz'>Keine Gemarkung.</p>";
304        } elseif($cnt >= $linelimit) {
305                echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>";
306        } elseif($cnt == 1) { // Eindeutig!
307                return $gnr;
308        } else {
309                echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
310        }
311        return;
312}
313
314function SuchGmkgName() {
315        // Gemarkung suchen nach Name(-nsanfang)
316        global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter;
317        $linelimit=120;
318        if(preg_match("/\*/",$fskennz)){
319                $match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
320        } else {
321                $match = trim($fskennz)."%";
322        }       
323        $sql ="SELECT g.gemeinde, g.gemarkung, g.gemarkungsname, s.gemeindename ";
324        $sql.="FROM pp_gemarkung g JOIN pp_gemeinde s ON g.gemeinde = s.gemeinde ";
325        $sql.="WHERE g.gemarkungsname ILIKE $1 ";
326        switch ($gfilter) {
327                case 1: // Einzelwert
328                        $sql.="AND g.gemeinde = ".$gemeinde." "; break;
329                case 2: // Liste
330                        $sql.="AND g.gemeinde in (".$gemeinde.") "; break;
331        }
332        $sql.=" ORDER BY s.gemeindename, g.gemarkungsname LIMIT $2 ;";
333        $v=array($match, $linelimit);
334        $res=pg_prepare("", $sql);
335        $res=pg_execute("", $v);
336        if (!$res) {
337                echo "\n<p class='err'>Fehler bei Gemarkung</p>";
338                return;
339        }
340        $cnt = 0;
341        $gwgem="";
342        while($row = pg_fetch_array($res)) {
343                $gemeindename=$row["gemeindename"];
344                if ($gwgem != $gemeindename) { // Gruppierung Gemeinde
345                        $gwgem = $gemeindename;
346                        $skey=$row["gemeinde"];
347                        zeile_gemeinde($skey, $gemeindename, false);
348                }
349                $gnam=$row["gemarkungsname"];
350                $gnr=$row["gemarkung"];
351                zeile_gemarkung($gnr, $gnam, false); // wenn am Ende nur ein Treffer, dann aktuell=true
352                $cnt++;
353        }
354        // Foot
355        if($cnt == 0){
356                echo "\n<p class='anz'>Keine Gemarkung.</p>";
357        } elseif($cnt >= $linelimit) {
358                echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>";
359        } elseif($cnt == 1) { // Eindeutig!
360                return $gnr;
361        } else {
362                echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
363        }
364        return;
365}
366
367function gg_head($gkgnr, $gkgaktuell) {
368        // Übergeordnete Zeilen (Head) fÃŒr Gemeinde und Gemarkung ausgeben
369        // Parameter = Gemarkungsnummer
370        $sqlh ="SELECT g.gemarkungsname, s.gemeinde, s.gemeindename FROM pp_gemarkung g ";
371        $sqlh.="JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde AND g.land=s.land ";
372        $sqlh.="WHERE g.gemarkung = $1 ;";
373        $v=array($gkgnr);
374        $resh=pg_prepare("", $sqlh);
375        $resh=pg_execute("", $v);
376        if (!$resh) {echo "\n<p class='err'>Fehler bei Gemeinde und Gemarkung.</p>";}
377        $rowh = pg_fetch_array($resh);
378        $gmkg=$rowh["gemarkungsname"];
379        $skey=$rowh["gemeinde"];
380        $snam=$rowh["gemeindename"];
381        zeile_gemeinde($skey, $snam, false);
382        zeile_gemarkung($gkgnr, $gmkg, $gkgaktuell);
383        return;
384}
385
386function EineGemarkung($AuchGemkZeile) {
387        // Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
388        // Parameter = $zgemkg
389        global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
390        $linelimit=120; // max.Fluren/Gemkg
391
392        // Head
393        if ($AuchGemkZeile) {gg_head($zgemkg, true);}
394        // Body
395        $sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
396        $sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; //WHERE f.land=?
397        $v=array($zgemkg, $linelimit);
398        $res=pg_prepare("", $sql);
399        $res=pg_execute("", $v);
400        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
401        $zfl=0;
402        while($row = pg_fetch_array($res)) {   
403                $zflur=$row["flur"];
404                zeile_flur($zgemkg, $zflur, false, false);
405                $zfl++;
406        }
407        // Foot
408        if($zfl == 0) {
409                echo "\n<p class='anz'>Keine Flur.</p>";
410        } elseif($zfl >= $linelimit) {
411                echo "\n<p class='anz'>".$zfl." Fluren ... und weitere</p>";
412        } elseif($zfl > 1) {
413                echo "\n<p class='anz'>".$zfl." Fluren</p>";
414        }
415        return;
416}
417
418function EineFlur() {
419        // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
420        global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg, $zflur;
421        $linelimit=600; // Wie groß kann eine Flur sein?
422
423        // Head
424        gg_head($zgemkg, false);
425        zeile_flur($zgemkg, $zflur, true, true);
426
427        // Body
428        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
429        if($epsg == "25832") { // Transform nicht notwendig
430                $sql.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
431                $sql.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
432        } else { 
433                $sql.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
434                $sql.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                       
435        }
436   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
437        $sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land=?
438        $v=array($zgemkg, $zflur, $linelimit);
439        $res=pg_prepare("", $sql);
440        $res=pg_execute("", $v);
441        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
442        $zfs=0;
443        while($row = pg_fetch_array($res)) {   
444                $fs_gml=$row["gml_id"];
445                $flur=$row["flurnummer"];
446                $fskenn=$row["zaehler"];
447                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
448                zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], "", "", false);
449                $zfs++;
450        }
451        // Foot
452        if($zfs == 0) {
453                echo "\n<p class='anz'>Kein Flurst&uuml;ck.</p>";
454        } elseif($zfs >= $linelimit) {
455                echo "\n<p class='anz'>".$zfs." Flurst&uuml;cke... und weitere</p>";
456        } elseif($zfs > 1) {
457                echo "\n<p class='anz'>".$zfs." Flurst&uuml;cke</p>";
458        }
459        return;
460}
461
462function HistFlur() {
463        // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben
464        // Die Flur nach historischen FlurstÃŒcken durchsuchen
465        global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur;
466        $linelimit=500;
467
468        // Head
469        gg_head($zgemkg, false);
470        zeile_flur($zgemkg, $zflur, true, true);
471
472        // Body
473        $whcl.="WHERE flurstueckskennzeichen like $1 ";
474        $sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
475        $sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
476        $sql.="ORDER BY zaehler, nenner LIMIT $2 ;";
477        $fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", $STR_PAD_LEFT)."%";
478        $v=array($fskzwhere,   $linelimit);
479        $res=pg_prepare("", $sql);
480        $res=pg_execute("", $v);
481        if (!$res) {echo "\n<p class='err'>Fehler bei Historie Flur.</p>";}
482        $zfs=0;
483        while($row = pg_fetch_array($res)) {   
484                $ftyp=$row["ftyp"];
485                $fs_gml=$row["gml_id"]; // fuer Buchausk.
486                $fskenn=$row["zaehler"];
487                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
488                zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg, $zflur, false);
489                $zfs++;
490        }
491
492        // Foot
493        if($zfs == 0) {
494                echo "\n<p class='anz'>Kein historisches Flurst&uuml;ck.</p>";
495                #if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = ".$fskzwhere."</p>";}
496        } elseif ($zfs >= $linelimit) {
497                echo "\n<p class='anz'>".$zfs." historische Flurst. ... und weitere</p>";
498        } elseif($zfs > 1) {
499                echo "\n<p class='anz'>".$zfs." historische Flurst&uuml;cke</p>";
500        }
501        return;
502}
503
504function EinFlurstueck() {
505        // FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler eingegeben
506        // Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
507        global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
508
509        // Head
510        gg_head($zgemkg, false);
511        zeile_flur($zgemkg, $zflur, true);
512
513        // Body
514        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
515        if($epsg == "25832") { // Transform nicht notwendig
516                $sql.="x(st_Centroid(f.wkb_geometry)) AS x, ";
517                $sql.="y(st_Centroid(f.wkb_geometry)) AS y ";
518        } else { 
519                $sql.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
520                $sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                 
521        }
522   $sql.="FROM ax_flurstueck f ";
523        $sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
524        If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
525        $sql.="ORDER BY f.zaehler, f.nenner;";
526        $v=array($zgemkg, $zflur, $zzaehler);
527        $res=pg_prepare("", $sql);
528        $res=pg_execute("", $v);
529        if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";}
530        $zfs=0;
531        while($row = pg_fetch_array($res)) {   
532                $fs_gml=$row["gml_id"];
533                $flur=$row["flurnummer"];
534                $fskenn=$row["zaehler"];
535                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
536                zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], "", "", true);
537                $zfs++;
538        }
539        // Foot
540        if($zfs == 0) {
541                echo "\n<p class='anz'>Kein aktuelles Flurst&uuml;ck.</p>";
542                echo "\n<div class='hi' title='in Historie suchen'>";
543                        echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.ico' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;";
544                        echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>";
545                        echo $zgemkg."-".$zflur."-".$zzaehler;
546                        if ($znenner != "") {echo "/".$znenner;}
547                        echo " h - suchen</a>";
548                echo "\n</div>";               
549        }
550        return;
551}
552
553function HistFlurstueck() {
554        // Die Nachfolger-FS-Kennzeichen sollen recherchiert werden.
555        global $debug, $land, $zgemkg, $zflur, $zzaehler, $znenner;
556
557        // Head
558        gg_head($zgemkg, false);
559        zeile_flur($zgemkg, $zflur, true, false);
560
561        // Body
562        // Suche ueber das Flurstueckskennzeichen, gml unbekannt
563        $fldlist=" AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, ";
564        $whcl.="WHERE flurstueckskennzeichen= $1 ";
565        $sql ="SELECT 'a'".$fldlist."null as nachf FROM ax_flurstueck ".$whcl;
566        $sql.="UNION SELECT 'h'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
567        $sql.="UNION SELECT 'o'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
568        $fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where
569        $fskzwhere.=str_pad($zflur, 3, "0", $STR_PAD_LEFT);
570        $fskzwhere.=str_pad($zzaehler, 5, "0", $STR_PAD_LEFT);
571        if ($znenner == "") {$fskzwhere.="______";}
572        else {$fskzwhere.=str_pad($znenner, 4, "0", $STR_PAD_LEFT)."__";}
573        $v=array($fskzwhere);
574
575        $res=pg_prepare("", $sql);
576        $res=pg_execute("", $v);
577        if (!$res) {echo "\n<p class='err'>Fehler bei hist. Flurst&uuml;ck.</p>";}
578        $zfs=0;
579
580        while($row = pg_fetch_array($res)) {
581                $ftyp=$row["ftyp"];
582                $fs_gml=$row["gml_id"];
583                $gknr=$row["gemarkungsnummer"];
584                $flur=$row["flurnummer"];
585                $fskenn=$row["zaehler"];
586                $nachf=$row["nachf"];
587                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
588                if ($ftyp == "a") { // als aktuelles FS gefunden, das "h" war also unnötig!
589                        $koor=flurstueckskoordinaten($fs_gml);
590                        echo "\n<p>Flurst&uuml;ck ".$fskenn." ist aktuell, nicht historisch</p>";       
591                        zeile_flurstueck ($fs_gml, $fskenn, $koor["x"], $koor["y"], $gknr, $flur, true);
592                } else { // Historisches FS gefunden (h oder o)
593                        zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, true);
594                        if ($nachf == "") {
595                                echo "\n<p class='err'>keine Nachfolger</p>";   
596                        } else {
597                                echo "\n<p>Nachfolger-Flurst&uuml;cke:</p>";
598                                // Direkte Nachfolger ermitteln. In $nachf steht ein Array von FS-Kennzeichen.
599                                // Von den einzelnen Kennz. ist unbekannt, ob diese noch aktuell sind
600                                // oder auch schon wieder historisch.
601                                // Nachfolger in DB suchen um den Status aktuell/historisch zu ermitteln
602                                $stri=trim($nachf, "{}");
603                                $stri="'".str_replace(",", "','", $stri)."'";
604                                $whcln.="WHERE flurstueckskennzeichen IN ( ".$stri." ) ";
605                                $nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$whcln;
606                                $nasql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$whcln;
607                                $nasql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$whcln;
608                                $v=array();
609                                $nares=pg_prepare("", $nasql);
610                                $nares=pg_execute("", $v);
611                                if (!$nares) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
612                                $zfsn=0;
613                                while($narow = pg_fetch_array($nares)) {
614                                        $naftyp=$narow["ftyp"];
615                                        $nagml=$narow["gml_id"];
616                                        $nagknr=$narow["gemarkungsnummer"];
617                                        $naflur=$narow["flurnummer"];
618                                        $nafskenn=$narow["zaehler"];
619                                        if ($narow["nenner"] != "") {$nafskenn.="/".$narow["nenner"];}
620                                        zeile_nachf_fs ($nagml, $nagknr, $naflur, $nafskenn, $naftyp);
621                                        $zfsn++;
622                                }
623                                if ($zfsn == 0) {
624                                        echo "\n<p class='anz'>keine Nachfolger gefunden</p>";
625                                } else { // if($zfsn > 1)
626                                        echo "\n<p class='anz'>".$zfsn." Nachfolger-Flurst&uuml;cke</p>";
627                                }
628                        }
629                }
630                $zfs++;
631        }
632        // Foot
633        if($zfs == 0) {
634                echo "\n<p class='anz'>Kein historisches Flurst&uuml;ck.</p>";
635                #if ($debug > 2) {echo  "\n<p class='dbg'> SQL= ".$sql."\n<br> $1 = FS-Kennz = '".$fskzwhere."'</p>";}
636        }
637        return;
638}
639
640// ===========
641// Start hier!
642// ===========
643if(isset($epsg)) {
644        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
645} else {
646        #if ($debug >= 1) {echo "\n<p class='dbg'>kein EPSG gesetzt</p>";}     
647        $epsg=$gui_epsg; // Conf
648}
649if ($gemeinde == "") {
650        $gfilter = 0;
651} elseif(strpos($gemeinde, ",") === false) {
652        $gfilter = 1; // Einzelwert
653} else {
654        $gfilter = 2; // Liste
655}
656if ($hist == "j") {$phist = true;} else {$phist = false;}
657
658if($gm != "") { // Self-Link aus Gemeinde-Liste
659        $trans="Gemarkungen zur Gemeinde";
660        $gnr=ListGmkgInGemeinde($gm, $bez);
661        if ($gnr > 0) {
662                $zgemkg=$gnr;
663                EineGemarkung(false);
664        }
665} else { // Die Formular-Eingabe interpretieren (kann auch ein Link sein)
666        $retzer=ZerlegungFsKennz($fskennz);
667        switch ($retzer) {
668        case 0: // leere Eingabe
669                if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert
670                        $trans="Liste der Gemarkungen";
671                        SuchGmkgName();
672                } else {
673                        $trans="Liste der Gemeinden";
674                        ListGemeinden();
675                }
676                break;
677        case 1:
678                $trans="Suche Gemarkungsname";
679                $gnr=SuchGmkgName();
680                if ($gnr > 0) {
681                        $trans="1 Gemarkung, Fluren dazu";
682                        $zgemkg=$gnr;
683                        EineGemarkung(false);
684                }
685                break;
686        case 2:
687                $trans="Fluren in Gemarkung";
688                EineGemarkung(true);
689                break;
690        case 3:
691                if ($phist)     {
692                        $trans="historische Flurst. in Flur";
693                        HistFlur();
694                } else {
695                        $trans="Flurst&uuml;cke in Flur";
696                        EineFlur();
697                }
698                break;
699        case 4:
700                if ($phist)     {
701                        $trans="historisches Flurst&uuml;ck";
702                        HistFlurstueck();
703                } else {
704                        $trans="Flurst&uuml;ck";
705                        EinFlurstueck();
706                }
707                break;
708        case 5:
709                if ($phist) {
710                        $trans="historisches Flurst&uuml;ck";
711                        HistFlurstueck();
712                } else {
713                        $trans="Flurst&uuml;ck";
714                        EinFlurstueck();
715                }       
716                break;
717        case 9:
718                $trans="falsche Eingabe";
719                echo "\n<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
720                break;
721        }
722}
723
724// Titel im Kopf anzeigen
725echo "
726<script type='text/javascript'>
727        transtitle('".$trans."');
728</script>";
729
730?>
731
732</body>
733</html>
Note: See TracBrowser for help on using the repository browser.