source: trunk/info/info/alkis/alkisfshist.php @ 376

Revision 376, 10.7 KB checked in by frank.jaeger, 7 years ago (diff)

Verbesserungen an der ALKIS-Buchauskunft (Geschwindigkeit, Fehlerkorrekturen, Mandantenfähigkeit) und an der Mapbender2-Navigation.

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*/
10
11function fzerleg($fs) {
12/*      Flurstueckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
13        Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert
14   ....*....1....*....2
15   ll    fff     nnnn
16     gggg   zzzzz    __
17*/
18        $fst=rtrim($fs,"_");   
19        $zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
20        $nenn=ltrim(substr($fst, 14), "0");
21        if ($nenn != "") {$zer.="/".$nenn;}
22        $zer.="</b>";
23        return $zer;
24}
25
26function vornach($dbarr) {
27// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
28        global $gkz, $showkey;
29        if ($dbarr == "") {
30                echo "(keine)";
31        } else {
32                $stri=trim($dbarr, "{}");
33                $arr = explode(",",$stri);
34                foreach($arr AS $val){
35                        echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
36                        if ($showkey)   {echo "&amp;showkey=j";}
37                        echo "'>".fzerleg($val)."</a><br>";
38                }
39        }
40        return 0;
41}
42
43function gemkg_name($gkey) {
44//      Schluessel wird ÃŒbergeben, Name dazu in der DB nachschlagen
45        global $con;
46        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 AND g.endet IS NULL LIMIT 1;";
47        $v=array($gkey);
48        $res=pg_prepare("", $sql);
49        $res=pg_execute("", $v);
50        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
51        $zgmk=0;
52        while($row = pg_fetch_array($res)) { // eigentlich nur EINE
53                $gmkg=$row["bezeichnung"];
54                $zgmk++;
55        }
56        if ($zgmk == 0) {
57                echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
58                return;
59        }
60        return $gmkg;
61}
62
63function such_vor_arr($fsk) {
64// Suchen der Vorgaenger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
65// Akt. FS hat keine Verweise auf Vorgaenger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
66// Problem: Dies sind Arrays, die nicht performant durchsucht werden koennen.
67        global $gkz, $con, $debug, $showkey, $filtkreis, $filtgem;
68
69        $wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
70
71        // Bei kleinere Datenbanken keine spÃŒrbare Verzögerung bei Suche mit " = ANY(Array)"
72        // FÃŒr grosse BestÀnde zusÀtzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
73        // Dazu die nÀchsten 2 Zeilen aktivieren.     
74//      $wherecl.="AND gemarkungsnummer=".substr($fsk, 2, 4)." ";
75//      $wherecl.="AND flurnummer=".ltrim(substr($fsk, 6, 3), "0")." ";
76        // Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
77
78        $sqlv="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl
79        ."UNION SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl
80        ."ORDER BY flurstueckskennzeichen";
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>";
87                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
88        }
89        $zv=0;
90        while($rowv = pg_fetch_array($resv)) {
91                $ftyp=$rowv["ftyp"];
92                $gmlv=$rowv["gml_id"];
93                $vfsk=$rowv["flurstueckskennzeichen"];
94                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;
95                        if ($showkey) {echo "&amp;showkey=j";}
96                echo "'>".fzerleg($vfsk)."</a><br>";
97                $zv++;
98        }
99        if ($zv == 0) {echo "(keine)";}
100        return;
101}
102
103session_start();
104$id="n";
105$gmlid="";
106$cntget = extract($_GET);
107require_once("alkis_conf_location.php");
108if ($auth == "mapbender") {require_once($mapbender);}
109include("alkisfkt.php");
110$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
111if ($keys == "j") {$showkey=true;} else {$showkey=false;}
112?>
113<!doctype html>
114<html lang="de">
115<head>
116        <meta charset="utf-8">
117        <title>ALKIS Flurst&uuml;cks-Historie</title>
118        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
119        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
120        <style type='text/css' media='print'>
121                .noprint {visibility: hidden;}
122        </style>
123</head>
124<body>
125<?php
126$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfshist.php'");
127if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
128
129// Such-Parameter bekommen? Welche?
130if ($gmlid != "") { // Ja, die GML wurde uebergeben
131        $parmtyp="GML";
132        $parmval=$gmlid;
133        $whereclause="WHERE gml_id= $1 ";
134        $v = array($gmlid);
135} elseif ($fskennz != "") { // Alternativ: Flurst.-Kennz. uebergeben
136                $parmtyp="Flurst&uuml;ckskennzeichen";
137                $parmval=$fskennz;
138                $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
139                $v = array($fskennz);
140} else { // Pfui!
141                $parmtyp="";
142                echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
143}
144
145if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
146        // UNION-Abfrage auf 3Àhnliche Tabellen, darin aber immer nur 1 Treffer.
147        // norGIS: unterschiedliche Formate der gleichen Spalten, Typumwandlung "cast" verwenden.
148
149        $felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
150
151        if ($filtgem == '') { // Filter Gemeinde ?
152                $wheref='';
153                $whereh='';
154                $whereo='';
155        } else { // ZusÀtze zur WHERE-Clausel
156                $wheref=" AND f.kreis = '".$filtkreis."' AND f.gemeinde = '".$filtgem."' ";
157                $whereh=" AND h.kreis = '".$filtkreis."' AND h.gemeinde = '".$filtgem."' ";
158                $whereo=" AND o.gemeinde = '".$filtgem."' ";
159        }
160
161        $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 "
162        ."UNION SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueck h ".$whereclause.$whereh." AND h.endet IS NULL "
163        ."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueckohneraumbezug o ".$whereclause.$whereo." AND o.endet IS NULL;";
164
165        $resu = pg_prepare("", $sqlu);
166        $resu = pg_execute("", $v);
167        if ($rowu = pg_fetch_array($resu)) {
168                $ftyp=$rowu["ftyp"];
169                $gmkgnr=$rowu["gemarkungsnummer"];
170                $flurnummer=$rowu["flurnummer"];
171                $zaehler=$rowu["zaehler"];
172                $nenner=$rowu["nenner"];
173                $flstnummer=$zaehler;
174                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
175                $fskenn=$rowu["flurstueckskennzeichen"];
176                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
177                $name=$rowu["name"]; // in DB ein Array
178                $arrn=explode(",", trim($name, "{}") ); // PHP-Array
179                $gemkname= gemkg_name($gmkgnr);
180                $entsteh=$rowu["zeitpunktderentstehung"];
181                $vor=$rowu["vor"];
182                $nach=$rowu["nach"];
183                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fuer selbst-link-Umschalter ueber footer
184        } else {
185                if ($debug > 1) {
186                        echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";
187                        if ($debug > 2) {
188                                echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";
189                        }
190                }
191        }
192}
193
194switch ($ftyp) { // Unterschiede Hist./Aktuell
195        case 'a':
196                $wert = "aktuell";
197                $ico= "Flurstueck.png";
198                $cls= "kennzfs";       
199        break;
200        case 'h':
201                $wert = "historisch<br>(mit Raumbezug)";
202                $ico= "Flurstueck_Historisch.png"; //
203                $cls= "kennzfsh";
204        break;
205        case 'o':
206                $wert = "historisch<br>ohne Raumbezug";
207                $ico= "Flurstueck_Historisch_oR.png";
208                $cls= "kennzfsh";
209        break;
210        default:
211                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
212                $ico= "Flurstueck_Historisch.png";
213                $cls= "kennzfsh";
214        break;
215}
216
217// Balken
218echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
219echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
220
221echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
222        // darin Tabelle Kennzeichen
223        echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>"
224                ."\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>"
225                ."\n\t<tr>\n\t\t<td title='Gemarkung'>";
226                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
227                echo $gemkname."&nbsp;</td>"
228                ."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
229                ."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
230        ."\n\t</table>"
231."\n\t</td>\n\t<td>"; // rechte Seite
232        // FS-Daten 2 Spalten
233        echo "\n\t<table class='fsd'>"
234                ."\n\t<tr>\n\t\t<td>Entstehung</td>"
235                        ."\n\t\t<td>".$entsteh."</td>"
236                ."\n\t</tr>\n\t<tr>"
237                        ."\n\t\t<td>letz. Fortf</td>"
238                        ."\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
239                                foreach($arrn AS $val) { // Zeile f. jedes Element
240                                        echo trim($val, '"')."<br>";
241                                }
242                        echo "</td>"
243                ."\n\t</tr>"
244        ."\n\t</table>"
245."\n\t</td>\n</tr>\n</table>";
246
247if ($ftyp == "a") { // Aktuell -> Historie
248        echo "\n<p class='nwlink noprint'>weitere Auskunft: "
249                ."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
250                        if ($showkey)   {echo "&amp;showkey=j";}
251                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
252                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
253                ."</a>";
254}
255echo "\n<hr>"
256."<table class='outer'>"
257        ."\n<tr>
258                <td class='head'>Flurst&uuml;ck</td>
259                <td class='head'>Vorg&auml;nger</td>
260                <td class='head'>Nachfolger</td>
261        </tr>"; // Head
262       
263        // Spalte 1: F l u r s t ÃŒ c k
264        echo "\n<tr>\n\t<td>"
265                ."<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert
266                ."<br>Fl&auml;che <span class='flae'>".$flae."</span>"
267        ."</td>";
268
269        // Spalte 2: V o r g À n g e r
270        echo "\n\t<td>";
271        switch ($ftyp) { // Unterschiede Historisch/Aktuell
272                case 'a':
273                        such_vor_arr($fskenn);
274                break;
275                case 'h':
276                        if ($vor == "") {
277                                echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
278                        } else {
279                                vornach($vor);
280                        }
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_array($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.