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

Revision 348, 25.9 KB checked in by frank.jaeger, 9 years ago (diff)

Fehlerbehandlung bei Eingabe falscher Gemarkungsschlüssel bei Nav. Fs.

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