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

Revision 284, 25.5 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation verbessert.

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