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

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

ALKIS-Auskunft, neues Modul "Straße"

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