source: trunk/info/info/alkisn/alkisfshist.php @ 419

Revision 419, 11.7 KB checked in by frank.jaeger, 5 years ago (diff)

Auskunft Modul Flurstückshistorie nun auch mit Flurstückskennzeichen aufzurufen alternativ zu gmlid.

Line 
1<?php
2/*      Modul: alkisfshist.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        Flurstuecks-Historie fuer ein Flurstueckskennzeichen aus ALKIS PostNAS
6        Version:
7        2016-02-24 Version fuer norGIS-ALKIS-Import
8        2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermöglichen (Filter Gemeinde)
9        2017-06-06 Validierung Eingabeparameter, Feinkorrekturen
10        2017-10-09 Sauber filtern auf NOT endet IS NULL
11        2017-10-17 Deutsches Datumsformat fÃŒr Zeitpunkt der Entstehung
12        2018-03-16 NULL-Werte in gemeinde und kreis in ax_historischesflurstueck berÃŒcksichtigen
13        2018-04-23 &nodebug
14        2018-11-19 Full-Schema: EntschlÃŒsseln "zeigtaufexternes_art" mit function fortfuehrungen(). Tab. "ax_historischesflurstueck" hat kein "vorgaengerflurstueckskennzeichen" mehr.
15        2018-12-18 function fskenn_dbformat
16*/
17
18function fzerleg($fs) {
19/*      Flurstueckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
20        Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert
21   ....*....1....*....2
22   ll    fff     nnnn
23     gggg   zzzzz    __
24*/
25        $fst=rtrim($fs,"_");   
26        $zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
27        $nenn=ltrim(substr($fst, 14), "0");
28        if ($nenn != "") {$zer.="/".$nenn;}
29        $zer.="</b>";
30        return $zer;
31}
32
33function vornach($dbarr) {
34// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
35        global $gkz, $showkey;
36        if ($dbarr == "") {
37                echo "(keine)";
38        } else {
39                $stri=trim($dbarr, "{}");
40                $arr = explode(",",$stri);
41                foreach($arr AS $val){
42                        echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
43                        if ($showkey)   {echo "&amp;showkey=j";}
44                        echo "'>".fzerleg($val)."</a><br>";
45                }
46        }
47        return 0;
48}
49
50function gemkg_name($gkey) {
51//      Schluessel wird ÃŒbergeben, Name dazu in der DB nachschlagen
52        global $con;
53        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 AND g.endet IS NULL LIMIT 1;";
54        $v=array($gkey);
55        $res=pg_prepare("", $sql);
56        $res=pg_execute("", $v);
57        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
58        $zgmk=0;
59        while($row = pg_fetch_assoc($res)) { // eigentlich nur EINE
60                $gmkg=$row["bezeichnung"];
61                $zgmk++;
62        }
63        if ($zgmk == 0) {
64                echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
65                return;
66        }
67        return $gmkg;
68}
69
70function such_vor_arr($fsk) {
71// Suchen Vorgaenger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
72// Akt. FS und hist.FS hat keine Verweise auf Vorgaenger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
73        global $gkz, $con, $debug, $showkey, $filtkreis, $filtgem;
74
75        $sqlv="SELECT 'h' AS ftyp, h.gml_id, h.flurstueckskennzeichen FROM ax_historischesflurstueck h "
76        ."WHERE $1 = ANY (h.nachfolgerflurstueckskennzeichen) AND h.endet IS NULL "
77        ."UNION SELECT 'o' AS ftyp, o.gml_id, o.flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o "
78        ."WHERE $1 = ANY (o.nachfolgerflurstueckskennzeichen) AND o.endet IS NULL ORDER BY flurstueckskennzeichen";
79
80        $v=array($fsk);
81        $resv = pg_prepare("", $sqlv);
82        $resv = pg_execute("", $v);
83        if (!$resv) {
84                echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
85                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
86        }
87        $zv=0;
88        while($rowv = pg_fetch_assoc($resv)) {
89                $ftyp=$rowv["ftyp"];
90                $gmlv=$rowv["gml_id"];
91                $vfsk=$rowv["flurstueckskennzeichen"];
92                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;
93                        if ($showkey) {echo "&amp;showkey=j";}
94                echo "'>".fzerleg($vfsk)."</a><br>";
95                $zv++;
96        }
97        if ($zv == 0) {
98                echo "(keine)";
99        }
100        return;
101}
102
103session_start();
104$showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
105$cntget = extract($_GET); // alle Parameter in Variable umwandeln
106
107// strikte Validierung aller Parameter
108if (isset($gmlid)) {
109        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
110        $fskennz='';
111} else { // Alternativ
112        $gmlid='';
113        if (isset($fskennz)) { // llgggg-fff-11111/222 oder z.B.'052647002001910013__' oder '05264700200012______'
114                if (!preg_match('#^[0-9\-_/]{8,20}$#', $fskennz)) {die ("Eingabefehler fskennz");}
115        } else {
116                $fskennz='';
117        }
118}
119if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
120if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
121if ($showkey == "j") {$showkey=true;} else {$showkey=false;} // "j"/"n" als boolean umwandeln, ist praktischer abzufragen, wird oft gebraucht
122if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
123
124require_once("alkis_conf_location.php");
125if ($auth == "mapbender") {require_once($mapbender);}
126include("alkisfkt.php");
127echo <<<END
128<!doctype html>
129<html lang="de">
130<head>
131        <meta charset="utf-8">
132        <meta name="viewport" content="width=device-width, initial-scale=1.0">
133        <title>ALKIS Flurst&uuml;cks-Historie</title>
134        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
135        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
136</head>
137<body>
138END;
139// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
140// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
141if ($nodebug == "j") {$debug=0;}
142
143$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfshist.php'");
144if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
145
146// Such-Parameter bekommen? Welche?
147if ($gmlid != "") { // Ja, die GML wurde uebergeben
148        $parmtyp="GML";
149        $parmval=$gmlid;
150        $whereclause="WHERE gml_id= $1 ";
151        $v = array($gmlid);
152} elseif ($fskennz != "") { // Alternativ: Flurst.-Kennz. uebergeben
153                $parmtyp="Flurst&uuml;ckskennzeichen";
154                $parmval=$fskennz;
155                $whereclause="WHERE flurstueckskennzeichen= $1 ";
156                $v=array(fskenn_dbformat($fskennz));
157} else { // Pfui!
158                $parmtyp="";
159                die("<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>"); // Weitermachen sinnlos
160}
161
162if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
163        // UNION-Abfrage auf 3Àhnliche Tabellen, darin aber immer nur 1 Treffer.
164        $felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, to_char(cast(zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, gemarkungsnummer, ";
165
166        if ($filtgem == '') { // Filter Gemeinde ?
167                $wheref='';
168                $whereh='';
169                $whereo='';
170        } else { // ZusÀtze zur WHERE-Clausel
171                $wheref=" AND f.gemeindezugehoerigkeit_kreis = '".$filtkreis."' AND f.gemeindezugehoerigkeit_gemeinde = '".$filtgem."' ";
172                $whereh=" AND (h.gemeindezugehoerigkeit_kreis IS NULL OR h.gemeindezugehoerigkeit_kreis = '".$filtkreis."' ) AND (h.gemeindezugehoerigkeit_gemeinde IS NULL OR h.gemeindezugehoerigkeit_gemeinde = '".$filtgem."') ";
173                $whereo=" AND (o.gemeindezugehoerigkeit_gemeinde IS NULL OR o.gemeindezugehoerigkeit_gemeinde = '".$filtgem."') ";
174        }
175
176        $sqlu ="SELECT 'a' AS ftyp, ".$felder."null::character varying[] AS nach, null::character varying[] AS vor, zeigtaufexternes_art AS zart, zeigtaufexternes_name AS zname FROM ax_flurstueck f ".$whereclause.$wheref." AND f.endet IS NULL "
177        ."UNION SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, null AS vor, zeigtaufexternes_art AS zart, zeigtaufexternes_name AS zname FROM ax_historischesflurstueck h ".$whereclause.$whereh." AND h.endet IS NULL "
178        ."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, zeigtaufexternes_art AS zart, zeigtaufexternes_name AS zname FROM ax_historischesflurstueckohneraumbezug o ".$whereclause.$whereo." AND o.endet IS NULL;";
179
180        $resu = pg_prepare("", $sqlu);
181        $resu = pg_execute("", $v);
182        if ($rowu = pg_fetch_assoc($resu)) {
183                $ftyp=$rowu["ftyp"];
184                $gmkgnr=$rowu["gemarkungsnummer"];
185                $flurnummer=$rowu["flurnummer"];
186                $zaehler=$rowu["zaehler"];
187                $nenner=$rowu["nenner"];
188                $flstnummer=$zaehler;
189                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
190                $fskenn=$rowu["flurstueckskennzeichen"];
191                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
192                $gemkname= gemkg_name($gmkgnr);
193                $vor=$rowu["vor"];
194                $nach=$rowu["nach"];
195                $entsteh=$rowu["zeitpunktderentstehung"];
196                $zeart=$rowu["zart"];
197                $zename=$rowu["zname"];
198                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fuer selbst-link-Umschalter ueber footer
199
200                switch ($ftyp) { // Diff. Hist./Akt.
201                        case 'a':
202                                $wert = "aktuell";
203                                $ico= "Flurstueck.png";
204                                $cls= "kennzfs";       
205                        break;
206                        case 'h':
207                                $wert = "historisch<br>(mit Raumbezug)";
208                                $ico= "Flurstueck_Historisch.png"; //
209                                $cls= "kennzfsh";
210                        break;
211                        case 'o':
212                                $wert = "historisch<br>ohne Raumbezug";
213                                $ico= "Flurstueck_Historisch_oR.png";
214                                $cls= "kennzfsh";
215                        break;
216                        default:
217                                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
218                                $ico= "Flurstueck_Historisch.png";
219                                $cls= "kennzfsh";
220                        break;
221                }
222        } else {
223                if ($debug > 1) {
224                        echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";
225                        if ($debug > 2) {
226                                echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";
227                        }
228                }
229        }
230}
231
232// Balken
233echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>";
234echo "\n<h2>Flurst&uuml;ck Historie</h2>";
235
236echo "\n<table class='outer'>\n<tr>\n\t<td>"
237        ."\n\t<tr>\n\t\t<td class='ll'><img src='ico/".$ico."' width='16' height='16' alt=''> Kennzeichen:</td>" // Links
238        ."\n\t\t<td>" // Mitte
239        ."\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>" // innere Tabelle Kennzeichen
240                ."\n\t\t<td class='head'>Gemarkung</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>"
241                ."\n\t<tr>\n\t\t<td title='Gemarkung'>";
242                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
243                echo $gemkname."&nbsp;</td>"
244                ."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
245                ."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
246        ."\n\t</table>"
247."\n\t</td>\n\t<td>";
248fortfuehrungen($entsteh, $zeart, $zename);
249echo "\n\t</td>\n</tr>\n</table>";
250
251if ($ftyp == "a") { // Aktuell -> Historie
252        echo "\n<p class='nwlink noprint'>weitere Auskunft: "
253                ."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
254                        if ($showkey)   {echo "&amp;showkey=j";}
255                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
256                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
257                ."</a>";
258}
259echo "\n<hr>"
260."<table class='outer'>"
261        ."\n<tr>
262                <td class='head'>Flurst&uuml;ck</td>
263                <td class='head'>Vorg&auml;nger</td>
264                <td class='head'>Nachfolger</td>
265        </tr>"; // Head
266       
267        // Spalte 1: F l u r s t ÃŒ c k
268        echo "\n<tr>\n\t<td>"
269                ."<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert
270                ."<br>Fl&auml;che <span class='flae'>".$flae."</span>"
271        ."</td>";
272
273        // Spalte 2: V o r g À n g e r
274        echo "\n\t<td>";
275        switch ($ftyp) { // Diff. Hist./Akt.
276                case 'a':
277                        such_vor_arr($fskenn);
278                break;
279                case 'h':
280                        such_vor_arr($fskenn);
281                break;
282                case 'o':
283                        vornach($vor);
284                break;
285        }
286        echo"</td>";
287
288        // Spalte 3: N a c h f o l g e r
289        echo "\n\t<td>";
290                vornach($nach);
291        echo "</td>\n</tr>"
292."\n</table>";
293
294if ($debug > 1) {
295        $z=1;
296        while($rowu = pg_fetch_assoc($resu)) {
297                $ftyp=$rowu["ftyp"];
298                echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
299                $z++;
300        }
301}
302?>
303
304<div class='buttonbereich noprint'>
305<hr>
306        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
307        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
308</div>
309
310<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
311
312</body>
313</html>
Note: See TracBrowser for help on using the repository browser.