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

Revision 333, 25.1 KB checked in by frank.jaeger, 10 years ago (diff)

Anpassung der Programme und Views an verschieden lange gm_id und Datenbanken mit historischen Objekten.

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