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

Revision 306, 24.9 KB checked in by frank.jaeger, 10 years ago (diff)

ALKIS-Auskunft, neues Modul "Straße"

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