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

Revision 402, 11.7 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Buchauskunft überarbeitet. z.B. Flurstücksnachweis mit allen Buchungen.

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