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

Revision 282, 24.7 KB checked in by frank.jaeger, 8 years ago (diff)

Mapbender-ALKIS-Navigation korrigiert und verbessert.

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