source: trunk/var/www/info/alkis/alkisfshist.php @ 129

Revision 129, 11.3 KB checked in by frank.jaeger, 9 years ago (diff)
Line 
1<?php
2/*      Modul: alkisfshist.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        FlurstÃŒcks-Historie fuer ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
6
7        Version:         2011-11-03 Prototyp
8        2011-11-16 Zum aktuellen FS die VorgÀnger suchen
9        2011-11-17 Parameter der Functions geÀndert
10*/
11
12function fzerleg($fs) {
13/*      FlurstÃŒckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
14        Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert
15   ....*....1....*....2
16   ll    fff     nnnn
17     gggg   zzzzz    __
18*/
19        $fst=rtrim($fs,"_");   
20        $zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
21        $nenn=ltrim(substr($fst, 14), "0");
22        if ($nenn != "") {$zer.="/".$nenn;}
23        $zer.="</b>";
24        return $zer;
25}
26
27function vornach($dbarr) {
28// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
29        global $gkz, $idanzeige, $showkey;
30        if ($dbarr == "") {
31                echo "(keine)";
32        } else {
33                $stri=trim($dbarr, "{}");
34                $arr = split(",",$stri);
35                foreach($arr AS $val){
36                   echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
37                        if ($idanzeige) {echo "&amp;id=j";}
38                                if ($showkey)   {echo "&amp;showkey=j";}
39                        echo "'>".fzerleg($val)."</a><br>";
40                }
41        }
42        return 0;
43}
44
45function gemkg_name($gkey) {
46// SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
47        global $con;
48        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
49        $v=array($gkey);
50        $res=pg_prepare("", $sql);
51        $res=pg_execute("", $v);
52        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
53        $zgmk=0;
54        while($row = pg_fetch_array($res)) { // eigentlich nur EINE
55                $gmkg=$row["bezeichnung"];
56                $zgmk++;
57        }
58        if ($zgmk == 0) {
59                echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
60                return;
61        }
62        return $gmkg;
63}
64
65function such_vor_arr($fsk) {
66// Suchen der VorgÀnger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
67// Akt. FS hat keine Verweise auf VorgÀnger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
68// Problem: Dies sind Arrays, die nicht performant durchsucht werden können.
69        global $gkz, $con, $debug;
70
71        $wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
72
73        // Bei kleinere Datenbanken keine spÃŒrbare Verzögerung bei Suche mit " = ANY(Array)"
74        // FÃŒr grosse BestÀnde zusÀtzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
75        // Dazu die nÀchsten 2 Zeilen aktivieren.     
76//      $wherecl.="AND gemarkungsnummer=".substr($fsk, 2, 4)." ";
77//      $wherecl.="AND flurnummer=".ltrim(substr($fsk, 6, 3), "0")." ";
78        // Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
79
80        $sqlv.="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl;
81        $sqlv.="UNION ";
82        $sqlv.="SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl;
83        $sqlv.="ORDER BY flurstueckskennzeichen";
84
85        $v=array($fsk);
86        $resv = pg_prepare("", $sqlv);
87        $resv = pg_execute("", $v);
88        if (!$resv) {
89                echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
90                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
91        }
92        $zv=0;
93        while($rowv = pg_fetch_array($resv)) {
94                $ftyp=$rowv["ftyp"];
95                $gmlv=$rowv["gml_id"];
96                $vfsk=$rowv["flurstueckskennzeichen"];
97                echo "Flurst&uuml;ck <a title='Historie des Vorg&auml;ngerflurst&uuml;cks' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$vfsk."&amp;gmlid=".$gmlv;
98                if ($idanzeige) {echo "&amp;id=j";}
99                        if ($showkey)   {echo "&amp;showkey=j";}
100                echo "'>".fzerleg($vfsk)."</a><br>";
101                $zv++;
102        }
103        if ($zv == 0) {echo "(keine)";}
104        return;
105}
106
107session_start();
108$gkz=urldecode($_REQUEST["gkz"]);
109require_once("alkis_conf_location.php");
110if ($auth == "mapbender") {require_once($mapbender);}
111include("alkisfkt.php");
112?>
113<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
114<html>
115<head>
116        <meta name="author" content="F. Jaeger krz" >
117        <meta http-equiv="cache-control" content="no-cache">
118        <meta http-equiv="pragma" content="no-cache">
119        <meta http-equiv="expires" content="0">
120        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
121        <title>ALKIS Flurst&uuml;cks-Historie</title>
122        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
123        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
124        <style type='text/css' media='print'>
125                .noprint {visibility: hidden;}
126        </style>
127</head>
128<body>
129<?php
130$gmlid = urldecode($_REQUEST["gmlid"]);
131$fskennz = urldecode($_REQUEST["fskennz"]);
132$id = isset($_GET["id"]) ? $_GET["id"] : "n";
133if ($id == "j") {$idanzeige=true;} else {$idanzeige=false;}
134$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
135if ($keys == "j") {$showkey=true;} else {$showkey=false;}
136$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
137if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
138// if ($debug > 1) {echo "<p class='err'>DB=".$dbname.", user=".$dbuser."</p>";}
139
140// Such-Parameter bekommen? Welche?
141if ($gmlid != "") { // Ja, die GML wurde uebergeben
142        $parmtyp="GML";
143        $parmval=$gmlid;
144        $whereclause="WHERE gml_id= $1 ";
145        $v = array($gmlid);
146} else {        // Alternativ: das FlurstÃŒcks-Kennzeichen wurde ÃŒbergeben
147        if ($fskennz != "") {
148                $parmtyp="Flurst&uuml;ckskennzeichen";
149                $parmval=$fskennz;
150                $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
151                $v = array($fskennz);
152        } else { // Pfui!
153                $parmtyp="";
154                echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
155        }
156}
157
158if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
159        // UNION-Abfrage auf 3 Àhnliche Tabellen, darin aber immer nur 1 Treffer.
160
161        $felder="gml_id, flurnummer, zaehler, nenner, flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
162
163        $sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" ";
164        $sqlu.="FROM ax_flurstueck f ".$whereclause;
165        $sqlu.="UNION ";
166        $sqlu.="SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
167        $sqlu.="FROM ax_historischesflurstueck h ".$whereclause;
168        $sqlu.="UNION ";
169        $sqlu.="SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
170        $sqlu.="FROM ax_historischesflurstueckohneraumbezug o ".$whereclause;
171       
172        $resu = pg_prepare("", $sqlu);
173        $resu = pg_execute("", $v);
174        if ($rowu = pg_fetch_array($resu)) {
175                $ftyp=$rowu["ftyp"];
176                $gmkgnr=$rowu["gemarkungsnummer"];                 $flurnummer=$rowu["flurnummer"];
177                $zaehler=$rowu["zaehler"];
178                $nenner=$rowu["nenner"];
179                $flstnummer=$zaehler;
180                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
181                $fskenn=$rowu["flurstueckskennzeichen"];
182                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
183                $name=$rowu["name"]; // in DB ein Array
184                $arrn = split(",", trim($name, "{}") ); // PHP-Array
185                $gemkname= gemkg_name($gmkgnr);
186                $entsteh=$rowu["zeitpunktderentstehung"];
187                $vor=$rowu["vor"];
188                $nach=$rowu["nach"];
189                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fÃŒr selbst-link-Umschalter ueber footer
190        } else {
191                if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
192                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
193        }
194}
195
196switch ($ftyp) { // Unterschiede Historisch/Aktuell
197        case 'a':
198                $wert = "aktuell";
199                $ico= "Flurstueck.ico";
200                $cls= "kennzfs";       
201        break;
202        case 'h':
203                $wert = "historisch<br>(mit Raumbezug)";
204                $ico= "Flurstueck_Historisch.ico"; //
205                $cls= "kennzfsh";
206        break;
207        case 'o':
208                $wert = "historisch<br>ohne Raumbezug";
209                $ico= "Flurstueck_Historisch_oR.ico";
210                $cls= "kennzfsh";
211        break;
212        default:
213                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
214                $ico= "Flurstueck_Historisch.ico";
215                $cls= "kennzfsh";
216        break;
217}
218 // Balken
219echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
220echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
221
222echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
223        // darin Tabelle Kennzeichen         echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>";
224                echo "\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>";
225                echo "\n\t<tr>\n\t\t<td title='Gemarkung'>";
226                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
227                echo $gemkname."&nbsp;</td>";
228                echo "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>";
229                echo "\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>";
230        echo "\n\t</table>";
231echo "\n\t</td>\n\t<td>"; // rechte Seite         // FS-Daten 2 Spalten
232        echo "\n\t<table class='fsd'>";
233                echo "\n\t<tr>\n\t\t<td>Entstehung</td>";
234                        echo "\n\t\t<td>".$entsteh."</td>";
235                echo "\n\t</tr>";
236                echo "\n\t<tr>";
237                        echo "\n\t\t<td>letz. Fortf</td>";
238                        echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
239                                foreach($arrn AS $val) { // Zeile f. jedes Element
240                                        echo trim($val, '"')."<br>";
241                                }
242                        echo "</td>";
243                echo "\n\t</tr>";
244        echo "\n\t</table>";
245        if ($idanzeige) {linkgml($gkz, $gmlid, "Flurst&uuml;ck"); }
246echo "\n\t</td>\n</tr>\n</table>";
247
248if ($ftyp == "a") { // Aktuell -> Historie
249        echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
250                echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
251                        if ($idanzeige) {echo "&amp;id=j";}
252                        if ($showkey)   {echo "&amp;showkey=j";}
253                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
254                        echo "<img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''>";
255                echo "</a>";
256}
257echo "\n<hr>";
258
259echo "<table class='outer'>";
260        echo "\n<tr>
261                <td class='head'>Flurst&uuml;ck</td>
262                <td class='head'>Vorg&auml;nger</td>
263                <td class='head'>Nachfolger</td>
264        </tr>"; // Head
265       
266        // Spalte 1: F l u r s t ÃŒ c k
267        echo "\n<tr>\n\t<td>";
268                echo "<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert;
269                echo "<br>Fl&auml;che <span class='flae'>".$flae."</span>";
270        echo "</td>";
271
272        // Spalte 2: V o r g À n g e r
273        echo "\n\t<td>";
274        switch ($ftyp) { // Unterschiede Historisch/Aktuell
275                case 'a':
276                        such_vor_arr($fskenn);
277                break;
278                case 'h':
279                        if ($vor == "") {
280                                echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
281                        } else {
282                                vornach($vor);
283                        }
284                break;
285                case 'o':
286                        vornach($vor);
287                break;
288        }
289        echo"</td>";
290
291        // Spalte 3: N a c h f o l g e r
292        echo "\n\t<td>";
293                vornach($nach);
294        echo "</td>\n</tr>";
295echo "\n</table>";
296
297if ($debug > 1) {
298        $z=1;
299        while($rowu = pg_fetch_array($resu)) {
300                $ftyp=$rowu["ftyp"];
301                echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
302                $z++;
303        }
304}
305?>
306
307<form action=''>
308        <div class='buttonbereich noprint'>
309        <hr>
310                <input type='button' name='back'  value='&lt;&lt;' title='Zur&uuml;ck'  onClick='javascript:history.back()'>&nbsp;
311                <input type='button' name='print' value='Druck' title='Seite Drucken' onClick='window.print()'>&nbsp;
312                <input type='button' name='close' value='X' title='Fenster schlie&szlig;en' onClick='window.close()'>
313        </div>
314</form>
315
316<?php footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig); ?>
317
318</body>
319</html>
Note: See TracBrowser for help on using the repository browser.