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

Revision 356, 26.8 KB checked in by frank.jaeger, 8 years ago (diff)

ALKIS-Mapbender-Navigation umgestellt von .ico- auf .png-Grafiken.
Weitere kleine Korrekturen an ALKIS-Mapbender-Navigation.

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