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

Revision 132, 11.1 KB checked in by frank.jaeger, 8 years ago (diff)

ALKIS-Buchauskunft: Gebäudedaten

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-16 Zum aktuellen FS die VorgÀnger suchen
8        2011-11-17 Parameter der Functions geÀndert
9        2011-11-30 import_request_variables
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();
108import_request_variables("G"); require_once("alkis_conf_location.php");
109if ($auth == "mapbender") {require_once($mapbender);}
110include("alkisfkt.php");
111if ($id == "j") {$idanzeige=true;} else {$idanzeige=false;}
112$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
113if ($keys == "j") {$showkey=true;} else {$showkey=false;}
114?>
115<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
116<html>
117<head>
118        <meta name="author" content="F. Jaeger krz" >
119        <meta http-equiv="cache-control" content="no-cache">
120        <meta http-equiv="pragma" content="no-cache">
121        <meta http-equiv="expires" content="0">
122        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
123        <title>ALKIS Flurst&uuml;cks-Historie</title>
124        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
125        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
126        <style type='text/css' media='print'>
127                .noprint {visibility: hidden;}
128        </style>
129</head>
130<body>
131<?php
132$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
133if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
134// if ($debug > 1) {echo "<p class='err'>DB=".$dbname.", user=".$dbuser."</p>";}
135
136// Such-Parameter bekommen? Welche?
137if ($gmlid != "") { // Ja, die GML wurde uebergeben
138        $parmtyp="GML";
139        $parmval=$gmlid;
140        $whereclause="WHERE gml_id= $1 ";
141        $v = array($gmlid);
142} else {        // Alternativ: das FlurstÃŒcks-Kennzeichen wurde ÃŒbergeben
143        if ($fskennz != "") {
144                $parmtyp="Flurst&uuml;ckskennzeichen";
145                $parmval=$fskennz;
146                $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
147                $v = array($fskennz);
148        } else { // Pfui!
149                $parmtyp="";
150                echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
151        }
152}
153
154if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
155        // UNION-Abfrage auf 3 Àhnliche Tabellen, darin aber immer nur 1 Treffer.
156
157        $felder="gml_id, flurnummer, zaehler, nenner, flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
158
159        $sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" ";
160        $sqlu.="FROM ax_flurstueck f ".$whereclause;
161        $sqlu.="UNION ";
162        $sqlu.="SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
163        $sqlu.="FROM ax_historischesflurstueck h ".$whereclause;
164        $sqlu.="UNION ";
165        $sqlu.="SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
166        $sqlu.="FROM ax_historischesflurstueckohneraumbezug o ".$whereclause;
167       
168        $resu = pg_prepare("", $sqlu);
169        $resu = pg_execute("", $v);
170        if ($rowu = pg_fetch_array($resu)) {
171                $ftyp=$rowu["ftyp"];
172                $gmkgnr=$rowu["gemarkungsnummer"];                 $flurnummer=$rowu["flurnummer"];
173                $zaehler=$rowu["zaehler"];
174                $nenner=$rowu["nenner"];
175                $flstnummer=$zaehler;
176                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
177                $fskenn=$rowu["flurstueckskennzeichen"];
178                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
179                $name=$rowu["name"]; // in DB ein Array
180                $arrn = split(",", trim($name, "{}") ); // PHP-Array
181                $gemkname= gemkg_name($gmkgnr);
182                $entsteh=$rowu["zeitpunktderentstehung"];
183                $vor=$rowu["vor"];
184                $nach=$rowu["nach"];
185                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fÃŒr selbst-link-Umschalter ueber footer
186        } else {
187                if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
188                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
189        }
190}
191
192switch ($ftyp) { // Unterschiede Historisch/Aktuell
193        case 'a':
194                $wert = "aktuell";
195                $ico= "Flurstueck.ico";
196                $cls= "kennzfs";       
197        break;
198        case 'h':
199                $wert = "historisch<br>(mit Raumbezug)";
200                $ico= "Flurstueck_Historisch.ico"; //
201                $cls= "kennzfsh";
202        break;
203        case 'o':
204                $wert = "historisch<br>ohne Raumbezug";
205                $ico= "Flurstueck_Historisch_oR.ico";
206                $cls= "kennzfsh";
207        break;
208        default:
209                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
210                $ico= "Flurstueck_Historisch.ico";
211                $cls= "kennzfsh";
212        break;
213}
214 // Balken
215echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
216echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
217
218echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
219        // darin Tabelle Kennzeichen         echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>";
220                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>";
221                echo "\n\t<tr>\n\t\t<td title='Gemarkung'>";
222                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
223                echo $gemkname."&nbsp;</td>";
224                echo "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>";
225                echo "\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>";
226        echo "\n\t</table>";
227echo "\n\t</td>\n\t<td>"; // rechte Seite         // FS-Daten 2 Spalten
228        echo "\n\t<table class='fsd'>";
229                echo "\n\t<tr>\n\t\t<td>Entstehung</td>";
230                        echo "\n\t\t<td>".$entsteh."</td>";
231                echo "\n\t</tr>";
232                echo "\n\t<tr>";
233                        echo "\n\t\t<td>letz. Fortf</td>";
234                        echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
235                                foreach($arrn AS $val) { // Zeile f. jedes Element
236                                        echo trim($val, '"')."<br>";
237                                }
238                        echo "</td>";
239                echo "\n\t</tr>";
240        echo "\n\t</table>";
241        if ($idanzeige) {linkgml($gkz, $gmlid, "Flurst&uuml;ck"); }
242echo "\n\t</td>\n</tr>\n</table>";
243
244if ($ftyp == "a") { // Aktuell -> Historie
245        echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
246                echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
247                        if ($idanzeige) {echo "&amp;id=j";}
248                        if ($showkey)   {echo "&amp;showkey=j";}
249                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
250                        echo "<img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''>";
251                echo "</a>";
252}
253echo "\n<hr>";
254
255echo "<table class='outer'>";
256        echo "\n<tr>
257                <td class='head'>Flurst&uuml;ck</td>
258                <td class='head'>Vorg&auml;nger</td>
259                <td class='head'>Nachfolger</td>
260        </tr>"; // Head
261       
262        // Spalte 1: F l u r s t ÃŒ c k
263        echo "\n<tr>\n\t<td>";
264                echo "<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert;
265                echo "<br>Fl&auml;che <span class='flae'>".$flae."</span>";
266        echo "</td>";
267
268        // Spalte 2: V o r g À n g e r
269        echo "\n\t<td>";
270        switch ($ftyp) { // Unterschiede Historisch/Aktuell
271                case 'a':
272                        such_vor_arr($fskenn);
273                break;
274                case 'h':
275                        if ($vor == "") {
276                                echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
277                        } else {
278                                vornach($vor);
279                        }
280                break;
281                case 'o':
282                        vornach($vor);
283                break;
284        }
285        echo"</td>";
286
287        // Spalte 3: N a c h f o l g e r
288        echo "\n\t<td>";
289                vornach($nach);
290        echo "</td>\n</tr>";
291echo "\n</table>";
292
293if ($debug > 1) {
294        $z=1;
295        while($rowu = pg_fetch_array($resu)) {
296                $ftyp=$rowu["ftyp"];
297                echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
298                $z++;
299        }
300}
301?>
302
303<form action=''>
304        <div class='buttonbereich noprint'>
305        <hr>
306                <input type='button' name='back'  value='&lt;&lt;' title='Zur&uuml;ck'  onClick='javascript:history.back()'>&nbsp;
307                <input type='button' name='print' value='Druck' title='Seite Drucken' onClick='window.print()'>&nbsp;
308                <input type='button' name='close' value='X' title='Fenster schlie&szlig;en' onClick='window.close()'>
309        </div>
310</form>
311
312<?php footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig); ?>
313
314</body>
315</html>
Note: See TracBrowser for help on using the repository browser.