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

Revision 362, 10.6 KB checked in by frank.jaeger, 8 years ago (diff)

Anpassung der ALKIS-Buchauskunft an die Datenbank-Struktur des norGIS-ALKIS-Importer.

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*/
9
10function fzerleg($fs) {
11/*      Flurstueckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
12        Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert
13   ....*....1....*....2
14   ll    fff     nnnn
15     gggg   zzzzz    __
16*/
17        $fst=rtrim($fs,"_");   
18        $zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
19        $nenn=ltrim(substr($fst, 14), "0");
20        if ($nenn != "") {$zer.="/".$nenn;}
21        $zer.="</b>";
22        return $zer;
23}
24
25function vornach($dbarr) {
26// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
27        global $gkz, $showkey;
28        if ($dbarr == "") {
29                echo "(keine)";
30        } else {
31                $stri=trim($dbarr, "{}");
32                //$arr = split(",",$stri);
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 uebergeben, Name in DB nachschlagen
45        global $con;
46        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $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;
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$cntget = extract($_GET);
106require_once("alkis_conf_location.php");
107if ($auth == "mapbender") {require_once($mapbender);}
108include("alkisfkt.php");
109$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
110if ($keys == "j") {$showkey=true;} else {$showkey=false;}
111?>
112<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
113<html>
114<head>
115        <meta name="author" content="b600352" >
116        <meta http-equiv="cache-control" content="no-cache">
117        <meta http-equiv="pragma" content="no-cache">
118        <meta http-equiv="expires" content="0">
119        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
120        <title>ALKIS Flurst&uuml;cks-Historie</title>
121        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
122        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
123        <style type='text/css' media='print'>
124                .noprint {visibility: hidden;}
125        </style>
126</head>
127<body>
128<?php
129$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
130if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
131
132// Such-Parameter bekommen? Welche?
133if ($gmlid != "") { // Ja, die GML wurde uebergeben
134        $parmtyp="GML";
135        $parmval=$gmlid;
136        $whereclause="WHERE gml_id= $1 ";
137        $v = array($gmlid);
138} else {        // Alternativ: Flurst.-Kennz. uebergeben
139        if ($fskennz != "") {
140                $parmtyp="Flurst&uuml;ckskennzeichen";
141                $parmval=$fskennz;
142                $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
143                $v = array($fskennz);
144        } else { // Pfui!
145                $parmtyp="";
146                echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
147        }
148}
149
150if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
151        // UNION-Abfrage auf 3Àhnliche Tabellen, darin aber immer nur 1 Treffer.
152        // noGIS: unterschiedliche Formate der gleichen Spalten, Typumwandlung "cast" verwenden.
153
154        $felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
155
156        $sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" FROM ax_flurstueck f ".$whereclause." AND f.endet IS NULL "
157        ."UNION SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueck h ".$whereclause." AND h.endet IS NULL "
158        ."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name FROM ax_historischesflurstueckohneraumbezug o ".$whereclause." AND o.endet IS NULL;";
159
160        $resu = pg_prepare("", $sqlu);
161        $resu = pg_execute("", $v);
162        if ($rowu = pg_fetch_array($resu)) {
163                $ftyp=$rowu["ftyp"];
164                $gmkgnr=$rowu["gemarkungsnummer"];
165                $flurnummer=$rowu["flurnummer"];
166                $zaehler=$rowu["zaehler"];
167                $nenner=$rowu["nenner"];
168                $flstnummer=$zaehler;
169                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
170                $fskenn=$rowu["flurstueckskennzeichen"];
171                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
172                $name=$rowu["name"]; // in DB ein Array
173                $arrn=explode(",", trim($name, "{}") ); // PHP-Array
174                $gemkname= gemkg_name($gmkgnr);
175                $entsteh=$rowu["zeitpunktderentstehung"];
176                $vor=$rowu["vor"];
177                $nach=$rowu["nach"];
178                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fuer selbst-link-Umschalter ueber footer
179        } else {
180                if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
181                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
182        }
183}
184
185switch ($ftyp) { // Unterschiede Hist./Aktuell
186        case 'a':
187                $wert = "aktuell";
188                $ico= "Flurstueck.png";
189                $cls= "kennzfs";       
190        break;
191        case 'h':
192                $wert = "historisch<br>(mit Raumbezug)";
193                $ico= "Flurstueck_Historisch.png"; //
194                $cls= "kennzfsh";
195        break;
196        case 'o':
197                $wert = "historisch<br>ohne Raumbezug";
198                $ico= "Flurstueck_Historisch_oR.png";
199                $cls= "kennzfsh";
200        break;
201        default:
202                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
203                $ico= "Flurstueck_Historisch.png";
204                $cls= "kennzfsh";
205        break;
206}
207
208// Balken
209echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
210echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
211
212echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
213        // darin Tabelle Kennzeichen
214        echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>"
215                ."\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>"
216                ."\n\t<tr>\n\t\t<td title='Gemarkung'>";
217                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
218                echo $gemkname."&nbsp;</td>"
219                ."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
220                ."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
221        ."\n\t</table>"
222."\n\t</td>\n\t<td>"; // rechte Seite
223        // FS-Daten 2 Spalten
224        echo "\n\t<table class='fsd'>"
225                ."\n\t<tr>\n\t\t<td>Entstehung</td>"
226                        ."\n\t\t<td>".$entsteh."</td>"
227                ."\n\t</tr>\n\t<tr>"
228                        ."\n\t\t<td>letz. Fortf</td>"
229                        ."\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
230                                foreach($arrn AS $val) { // Zeile f. jedes Element
231                                        echo trim($val, '"')."<br>";
232                                }
233                        echo "</td>"
234                ."\n\t</tr>"
235        ."\n\t</table>"
236."\n\t</td>\n</tr>\n</table>";
237
238if ($ftyp == "a") { // Aktuell -> Historie
239        echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
240                echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
241                        if ($showkey)   {echo "&amp;showkey=j";}
242                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
243                        echo "<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>";
244                echo "</a>";
245}
246echo "\n<hr>";
247
248echo "<table class='outer'>"
249        ."\n<tr>
250                <td class='head'>Flurst&uuml;ck</td>
251                <td class='head'>Vorg&auml;nger</td>
252                <td class='head'>Nachfolger</td>
253        </tr>"; // Head
254       
255        // Spalte 1: F l u r s t ÃŒ c k
256        echo "\n<tr>\n\t<td>"
257                ."<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert
258                ."<br>Fl&auml;che <span class='flae'>".$flae."</span>"
259        ."</td>";
260
261        // Spalte 2: V o r g À n g e r
262        echo "\n\t<td>";
263        switch ($ftyp) { // Unterschiede Historisch/Aktuell
264                case 'a':
265                        such_vor_arr($fskenn);
266                break;
267                case 'h':
268                        if ($vor == "") {
269                                echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
270                        } else {
271                                vornach($vor);
272                        }
273                break;
274                case 'o':
275                        vornach($vor);
276                break;
277        }
278        echo"</td>";
279
280        // Spalte 3: N a c h f o l g e r
281        echo "\n\t<td>";
282                vornach($nach);
283        echo "</td>\n</tr>"
284."\n</table>";
285
286if ($debug > 1) {
287        $z=1;
288        while($rowu = pg_fetch_array($resu)) {
289                $ftyp=$rowu["ftyp"];
290                echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
291                $z++;
292        }
293}
294?>
295
296<form action=''>
297        <div class='buttonbereich noprint'>
298        <hr>
299                <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
300                <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
301        </div>
302</form>
303
304<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
305
306</body>
307</html>
Note: See TracBrowser for help on using the repository browser.