source: trunk/var/www/info/alkis/alkisfshist.php @ 198

Revision 198, 11.5 KB checked in by frank.jaeger, 11 years ago (diff)

Buchauskunft: Umstellen der Schaltflächen am unteren Rand auf Symbole statt Buchstaben,
CSV-Download von FS- und GB-Daten,
begonnene Änderungen teilweise noch nicht fertig gestellt (siehe Kommentare).

RevLine 
[123]1<?php
2/*      Modul: alkisfshist.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        FlurstÃŒcks-Historie fuer ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
6        Version:         2011-11-16 Zum aktuellen FS die VorgÀnger suchen
[129]7        2011-11-17 Parameter der Functions geÀndert
[132]8        2011-11-30 import_request_variables
[198]9        2012-11-27 Function split deprecated: explode
10*/
[123]11
12function fzerleg($fs) {
13/*      FlurstÃŒckskennzeichen (20) zerlegen als lesbares Format (wie im Balken):
14        Dies FS-Kennz-Format wird auch als Eingabe in der Navigation akzeptiert
15   ....*....1....*....2
16   ll    fff     nnnn
17     gggg   zzzzz    __
18*/
19        $fst=rtrim($fs,"_");   
20        $zer=substr ($fst, 2, 4)."-".ltrim(substr($fst, 6, 3), "0")."-<b>".ltrim(substr($fst, 9, 5),"0");
[128]21        $nenn=ltrim(substr($fst, 14), "0");
[123]22        if ($nenn != "") {$zer.="/".$nenn;}
[128]23        $zer.="</b>";
24        return $zer;
[123]25}
26
27function vornach($dbarr) {
[128]28// Datenbank-Array-Feld zeilenweise ausgeben als Selbst-Link
[123]29        global $gkz, $idanzeige, $showkey;
[128]30        if ($dbarr == "") {
[123]31                echo "(keine)";
[128]32        } else {
[123]33                $stri=trim($dbarr, "{}");
34                //$arr = split(",",$stri);
[198]35                $arr = explode(",",$stri);
36                foreach($arr AS $val){
[123]37                   echo "Flurst&uuml;ck <a title=' zur Flurst&uuml;ck Historie' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;fskennz=".$val;
[128]38                        if ($idanzeige) {echo "&amp;id=j";}
[123]39                                if ($showkey)   {echo "&amp;showkey=j";}
40                        echo "'>".fzerleg($val)."</a><br>";
41                }
42        }
43        return 0;
44}
45
[128]46function gemkg_name($gkey) {
47// SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
48        global $con;
49        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
50        $v=array($gkey);
51        $res=pg_prepare("", $sql);
52        $res=pg_execute("", $v);
53        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
54        $zgmk=0;
55        while($row = pg_fetch_array($res)) { // eigentlich nur EINE
56                $gmkg=$row["bezeichnung"];
57                $zgmk++;
58        }
59        if ($zgmk == 0) {
60                echo "\n<p class='err'>Gemarkung ".$gkey." ist unbekannt.</p>";
61                return;
62        }
63        return $gmkg;
64}
65
66function such_vor_arr($fsk) {
67// Suchen der VorgÀnger zum aktuellen Flurst. Ausgabe von Selbst-Links Zeilenweise in <td>.
68// Akt. FS hat keine Verweise auf VorgÀnger. Darum in den Nachfolger-Verweisen von Hist.-FS suchen.
69// Problem: Dies sind Arrays, die nicht performant durchsucht werden können.
70        global $gkz, $con, $debug;
71
72        $wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
73
74        // Bei kleinere Datenbanken keine spÃŒrbare Verzögerung bei Suche mit " = ANY(Array)"
75        // FÃŒr grosse BestÀnde zusÀtzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
76        // Dazu die nÀchsten 2 Zeilen aktivieren.     
77//      $wherecl.="AND gemarkungsnummer=".substr($fsk, 2, 4)." ";
78//      $wherecl.="AND flurnummer=".ltrim(substr($fsk, 6, 3), "0")." ";
79        // Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
80
81        $sqlv.="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl;
82        $sqlv.="UNION ";
83        $sqlv.="SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl;
84        $sqlv.="ORDER BY flurstueckskennzeichen";
85
86        $v=array($fsk);
87        $resv = pg_prepare("", $sqlv);
88        $resv = pg_execute("", $v);
89        if (!$resv) {
90                echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
91                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlv."<br>$1='".$fsk."'</p>";}
92        }
93        $zv=0;
94        while($rowv = pg_fetch_array($resv)) {
95                $ftyp=$rowv["ftyp"];
96                $gmlv=$rowv["gml_id"];
97                $vfsk=$rowv["flurstueckskennzeichen"];
98                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;
99                if ($idanzeige) {echo "&amp;id=j";}
100                        if ($showkey)   {echo "&amp;showkey=j";}
101                echo "'>".fzerleg($vfsk)."</a><br>";
102                $zv++;
103        }
104        if ($zv == 0) {echo "(keine)";}
105        return;
106}
107
[123]108session_start();
[132]109import_request_variables("G"); require_once("alkis_conf_location.php");
110if ($auth == "mapbender") {require_once($mapbender);}
[123]111include("alkisfkt.php");
112if ($id == "j") {$idanzeige=true;} else {$idanzeige=false;}
[132]113$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
114if ($keys == "j") {$showkey=true;} else {$showkey=false;}
115?>
116<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
[123]117<html>
118<head>
119        <meta name="author" content="b600352" >
120        <meta http-equiv="cache-control" content="no-cache">
[198]121        <meta http-equiv="pragma" content="no-cache">
[123]122        <meta http-equiv="expires" content="0">
123        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
124        <title>ALKIS Flurst&uuml;cks-Historie</title>
125        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
126        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck_Historisch.ico">
127        <style type='text/css' media='print'>
128                .noprint {visibility: hidden;}
129        </style>
130</head>
131<body>
132<?php
133$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
134if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
135// if ($debug > 1) {echo "<p class='err'>DB=".$dbname.", user=".$dbuser."</p>";}
136
137// Such-Parameter bekommen? Welche?
138if ($gmlid != "") { // Ja, die GML wurde uebergeben
139        $parmtyp="GML";
140        $parmval=$gmlid;
141        $whereclause="WHERE gml_id= $1 ";
142        $v = array($gmlid);
143} else {        // Alternativ: das FlurstÃŒcks-Kennzeichen wurde ÃŒbergeben
144        if ($fskennz != "") {
145                $parmtyp="Flurst&uuml;ckskennzeichen";
146                $parmval=$fskennz;
147                $whereclause="WHERE flurstueckskennzeichen= $1 "; // hinten auffuellen mit _ auf 20 Stellen
148                $v = array($fskennz);
149        } else { // Pfui!
150                $parmtyp="";
151                echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
152        }
153}
154
155if ($parmtyp != "") { // einer der beiden erlaubten FÀlle
156        // UNION-Abfrage auf 3 Àhnliche Tabellen, darin aber immer nur 1 Treffer.
157
[128]158        $felder="gml_id, flurnummer, zaehler, nenner, flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
159
160        $sqlu ="SELECT 'a' AS ftyp, ".$felder."null AS nach, null AS vor, null AS \"name\" ";
161        $sqlu.="FROM ax_flurstueck f ".$whereclause;
162        $sqlu.="UNION ";
[123]163        $sqlu.="SELECT 'h' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
164        $sqlu.="FROM ax_historischesflurstueck h ".$whereclause;
[128]165        $sqlu.="UNION ";
[123]166        $sqlu.="SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, name ";
167        $sqlu.="FROM ax_historischesflurstueckohneraumbezug o ".$whereclause;
[128]168       
[123]169        $resu = pg_prepare("", $sqlu);
170        $resu = pg_execute("", $v);
171        if ($rowu = pg_fetch_array($resu)) {
172                $ftyp=$rowu["ftyp"];
173                $gmkgnr=$rowu["gemarkungsnummer"];                 $flurnummer=$rowu["flurnummer"];
174                $zaehler=$rowu["zaehler"];
175                $nenner=$rowu["nenner"];
176                $flstnummer=$zaehler;
[128]177                if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
178                $fskenn=$rowu["flurstueckskennzeichen"];
179                $flae=number_format($rowu["amtlicheflaeche"],0,",",".") . " m&#178;";
180                $name=$rowu["name"]; // in DB ein Array
181        //      $arrn=split(",", trim($name, "{}") ); // split ist deprecated!
[123]182                $arrn=explode(",", trim($name, "{}") ); // PHP-Array
[128]183                $gemkname= gemkg_name($gmkgnr);
[198]184                $entsteh=$rowu["zeitpunktderentstehung"];
185                $vor=$rowu["vor"];
[128]186                $nach=$rowu["nach"];
[123]187                if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fÃŒr selbst-link-Umschalter ueber footer
188        } else {
189                if ($debug > 1) {echo "<br><p class='err'>Fehler! Kein Treffer f&uuml;r ".$parmtyp." = '".$parmval."'</p><br>";}
190                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlu."<br>$1=".$parmtyp." = '".$parmval."'</p>";}
191        }
192}
[128]193
[123]194switch ($ftyp) { // Unterschiede Historisch/Aktuell
195        case 'a':
196                $wert = "aktuell";
197                $ico= "Flurstueck.ico";
198                $cls= "kennzfs";       
199        break;
200        case 'h':
201                $wert = "historisch<br>(mit Raumbezug)";
202                $ico= "Flurstueck_Historisch.ico"; //
203                $cls= "kennzfsh";
204        break;
[128]205        case 'o':
[123]206                $wert = "historisch<br>ohne Raumbezug";
207                $ico= "Flurstueck_Historisch_oR.ico";
208                $cls= "kennzfsh";
209        break;
[128]210        default:
[123]211                $wert = "<b>nicht gefunden: ".$parmtyp." = '".$parmval."'</b>";
212                $ico= "Flurstueck_Historisch.ico";
213                $cls= "kennzfsh";
214        break;
215}
216 // Balken
217echo "<p class='fshis'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
218echo "\n<h2><img src='ico/".$ico."' width='16' height='16' alt=''> Flurst&uuml;ck Historie</h2>\n";
219
220echo "\n<table class='outer'>\n<tr>\n\t<td>"; // linke Seite
221        // darin Tabelle Kennzeichen         echo "\n\t<table class='".$cls."' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>";
222                echo "\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>";
223                echo "\n\t<tr>\n\t\t<td title='Gemarkung'>";
224                if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
225                echo $gemkname."&nbsp;</td>";
226                echo "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>";
227                echo "\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>";
228        echo "\n\t</table>";
229echo "\n\t</td>\n\t<td>"; // rechte Seite         // FS-Daten 2 Spalten
230        echo "\n\t<table class='fsd'>";
231                echo "\n\t<tr>\n\t\t<td>Entstehung</td>";
232                        echo "\n\t\t<td>".$entsteh."</td>";
233                echo "\n\t</tr>";
[128]234                echo "\n\t<tr>";
[123]235                        echo "\n\t\t<td>letz. Fortf</td>";
236                        echo "\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
237                                foreach($arrn AS $val) { // Zeile f. jedes Element
[128]238                                        echo trim($val, '"')."<br>";
239                                }
240                        echo "</td>";
241                echo "\n\t</tr>";
242        echo "\n\t</table>";
243        if ($idanzeige) {linkgml($gkz, $gmlid, "Flurst&uuml;ck"); }
244echo "\n\t</td>\n</tr>\n</table>";
245
246if ($ftyp == "a") { // Aktuell -> Historie
247        echo "\n<p class='nwlink noprint'>weitere Auskunft: ";
[123]248                echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=n";
249                        if ($idanzeige) {echo "&amp;id=j";}
[128]250                        if ($showkey)   {echo "&amp;showkey=j";}
251                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
252                        echo "<img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''>";
253                echo "</a>";
254}
255echo "\n<hr>";
256
257echo "<table class='outer'>";
258        echo "\n<tr>
259                <td class='head'>Flurst&uuml;ck</td>
260                <td class='head'>Vorg&auml;nger</td>
[123]261                <td class='head'>Nachfolger</td>
262        </tr>"; // Head
263       
264        // Spalte 1: F l u r s t ÃŒ c k
265        echo "\n<tr>\n\t<td>";
266                echo "<img src='ico/".$ico."' width='16' height='16' alt=''> ".$wert;
267                echo "<br>Fl&auml;che <span class='flae'>".$flae."</span>";
268        echo "</td>";
[128]269
270        // Spalte 2: V o r g À n g e r
[123]271        echo "\n\t<td>";
[128]272        switch ($ftyp) { // Unterschiede Historisch/Aktuell
273                case 'a':
[123]274                        such_vor_arr($fskenn);
[128]275                break;
276                case 'h':
[123]277                        if ($vor == "") {
[128]278                                echo "Geometrische Suche<br>(noch nicht m&ouml;glich)";
279                        } else {
280                                vornach($vor);
281                        }
282                break;
283                case 'o':
284                        vornach($vor);
285                break;
286        }
287        echo"</td>";
288
289        // Spalte 3: N a c h f o l g e r
290        echo "\n\t<td>";
291                vornach($nach);
[123]292        echo "</td>\n</tr>";
[128]293echo "\n</table>";
294
295if ($debug > 1) {
296        $z=1;
297        while($rowu = pg_fetch_array($resu)) {
[123]298                $ftyp=$rowu["ftyp"];
299                echo "<p class='dbg'>Mehr als EIN Eintrag gefunden: '".$ftyp."' (".$z.")</p>";
300                $z++;
301        }
302}
303?>
304
[128]305<form action=''>
[123]306        <div class='buttonbereich noprint'>
307        <hr>
308                <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
309                <a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
310<!--    <a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="16" height="16" alt="Export" /></a>&nbsp;
311                <a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>     -->
312        </div>
[198]313</form>
314
315<?php footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig); ?>
316
317</body>
[123]318</html>
Note: See TracBrowser for help on using the repository browser.