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

Revision 427, 11.4 KB checked in by frank.jaeger, 2 years ago (diff)

Überarbeitung der Auskunft: Durch Functions den Code verdichtet. Drei neue Arten von Bauwerken.

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