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

Revision 128, 12.3 KB checked in by frank.jaeger, 12 years ago (diff)

Erweiterung der ALKIS-Buchauskunft im Bereich Flurstücks-Historie.
Symbole für die Doku: .ico nach .png konvertiert

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