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

Revision 400, 11.4 KB checked in by frank.jaeger, 6 years ago (diff)

Korrektur Auskunft Flurstückshistorie. Löschen nicht mehr gepflegter Alt-Versionen.

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