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

Revision 282, 24.7 KB checked in by frank.jaeger, 11 years ago (diff)

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