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

Revision 283, 24.9 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation nochmals ergänzt: aktuell gewählte Ebene wird farblich hinterlegt. Im GB-Teil kann Buchung verlinkt werden.

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