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

Revision 330, 25.7 KB checked in by frank.jaeger, 10 years ago (diff)

Umstellung von PostNAS 0.7 auf PostNAS 0.8, ohne Tabelle "alkis_beziehungen".

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