source: trunk/info/info/alkisn/alkisfsnw.php @ 419

Revision 419, 32.9 KB checked in by frank.jaeger, 5 years ago (diff)

Auskunft Modul Flurstückshistorie nun auch mit Flurstückskennzeichen aufzurufen alternativ zu gmlid.

Line 
1<?php
2/*      Modul: alkisfsnw.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        FlurstÃŒcksnachweis fuer ein FlurstÃŒckskennzeichen aus ALKIS PostNAS
6
7        Version:
8        2016-02-24 Version fuer norGIS-ALKIS-Import
9        2016-03-14 Korrekturen
10        2016-12-01 HTML5, Gemeinsam genutzte Datenbanken ermöglichen
11        2016-12-05 Nutzungsart-Kategorie ist nun in Text enthalten, nicht mehr aus der Definition ausschneiden
12        2017-06-08 optional "berechtigte Buchungen" anzeigen, Function "eigentuemer" ohne Parameter $con,
13                                Validierung Eingabeparameter, Feinkorrekturen
14        2017-10-11 Sauber filtern auf 'endet IS NULL', Ausgabe der BodenschÀtzung
15        2017-10-11 Nachbesserung Formatierung der SchÀtzungs-Zeilen
16        2017-10-17 Zeitpunkt der Entstehung in deutschen Datumsformat
17        2017-11-03 Wertelisten fÃŒr Arrays in BodenschÀtzung ausgeben.
18        2017-12-08 Planung (Kommentare) der Erweiterung fÃŒr Berechtigte GrundbÃŒcher
19        2017-12-20 Links auf Lagebezeichnung verbessert.
20        2018-04-11 Variable "gmlid" an Function "ALKISexport" ÃŒbergeben. Ist beim Schreiben des Headers noch unbekannt, wenn mit "&fskennz=" aufgerufen.
21        2018-04-23 Umfangreiche Überarbeitung der "Buchungsstellen"
22        2018-05-03 Anpassung fÃŒr GrundstÃŒcksnachweis
23        2018-11-09 Umstellung Full-Schema
24        2018-11-19 EntschlÃŒsseln "zeigtaufexternes_art" mit function fortfuehrungen().
25        2018-12-18 function fskenn_dbformat
26
27++ToDo:
28        - Buchung auf "fiktives Blatt" ist nur mit debug zu sehen: die <tr> in .css grau hinterlegen
29        - Umschalter (gleiches Modul) anders darstellen als Links zu anderen Nachweisen
30        - Parameter zum Umschalten mit/ohne BodenschÀtzung?
31        - Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen)
32*/
33session_start();
34$eig="n"; $showkey="n"; $nodebug=""; // Var. initalisieren
35$cntget = extract($_GET); // alle Parameter in Variable umwandeln
36
37// strikte Validierung aller Parameter
38if (isset($gmlid)) {
39        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
40        $fskennz='';
41} else { // Alternativ
42        $gmlid='';
43        if (isset($fskennz)) { // llgggg-fff-11111/222 oder z.B.'052647002001910013__' oder '05264700200012______'
44                if (!preg_match('#^[0-9\-_/]{8,20}$#', $fskennz)) {die ("Eingabefehler fskennz");}
45        } else {
46                $fskennz='';
47        }
48}
49if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
50if (!preg_match('#^[j|n]{0,1}$#', $eig)) {die("Eingabefehler eig");}
51if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
52if ($showkey == "j") {$showkey=true;} else {$showkey=false;} // "j"/"n" als boolean umwandeln, ist praktischer abzufragen, wird oft gebraucht
53if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
54
55require_once("alkis_conf_location.php");
56if ($auth == "mapbender") {require_once($mapbender);}
57include("alkisfkt.php");
58?>
59<!doctype html>
60<html lang="de">
61<head>
62        <meta charset="utf-8">
63        <meta name="viewport" content="width=device-width, initial-scale=1.0">
64        <title>ALKIS Flurst&uuml;cksnachweis</title>
65        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
66        <link rel="shortcut icon" type="image/x-icon" href="ico/Flurstueck.ico">
67        <script>
68                function ALKISexport(gmlid) {
69                        window.open('alkisexport.php?gkz=<?php echo $gkz;?>&tabtyp=flurstueck&gmlid=' + gmlid);
70                }
71        </script>
72</head>
73<body>
74<?php
75// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten. Blendet z.B. "fiktives Blatt" aus.
76// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
77if ($nodebug == "j") {$debug=0;}
78
79$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfsnw.php'");
80if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
81
82// Ein FlurstÃŒcks-Kennzeichen wurde alternativ zur gml_id ÃŒbermittelt
83if ($fskennz != '') {
84/*
85        $arr=explode("-", $fskennz, 4); // zerlegen
86        $zgemkg=trim($arr[0]);
87        if (strlen($zgemkg) == 20 and !isset($arr[1])) {
88                $fskzdb=$zgemkg; // Datenbank-Feldformat
89        } else { // Format "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
90                // Das Kennzeichen auseinander nehmen.
91                if (strlen($zgemkg) == 6) {
92                        $land=substr($zgemkg, 0, 2);
93                        $zgemkg=substr($zgemkg, 2, 4);
94                } else { // kein schöner Land ..
95                        $land=$defland; // Default-Land aus config
96                }
97                $zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
98                $zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
99                $zn=explode("/", $zfsnr, 2); // Bruch?
100                $zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
101                if (isset($zn[1])) {
102                        $znenner=trim($zn[1]);
103                } else {
104                        $znenner="";
105                }
106                if (trim($znenner, " 0.") == "") { // kein Bruch oder nur Nullen
107                        $znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
108                } else {
109                        $zn=explode(".", $znenner, 2); // .00 wegwerfen
110                        $znenner=str_pad($zn[0], 4 , "0", STR_PAD_LEFT);
111                }
112                // nun die Teile stellengerecht wieder zusammen setzen         
113                $fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
114        }
115        $v = array($fskzdb);
116*/
117        // Spalte "flurstueckskennzeichen" ist in DB indiziert
118        // Format z.B.'052647002001910013__' oder '05264700200012______'
119        $sql ="SELECT gml_id FROM ax_flurstueck WHERE flurstueckskennzeichen= $1 AND endet IS NULL ;";
120
121        $v=array(fskenn_dbformat($fskennz));
122
123        $res = pg_prepare("", $sql);
124        $res = pg_execute("", $v);
125        if ($row = pg_fetch_assoc($res)) {
126                $gmlid=$row["gml_id"];
127        } else {
128                echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
129                echo "<p>Kennzeichen veraltet? <a href='./alkisfshist.php?gkz=".$gkz."&fskennz=".$fskennz."'>Suche in der Flurst&uuml;cks-Historie</a></p>";
130                echo "\n</body>\n</html>";
131                return;
132        }
133        pg_free_result($res);
134}
135
136// F L U R S T U E C K  m. Gebiet
137$sql ="SELECT f.zeigtaufexternes_art, f.zeigtaufexternes_name, f.flurnummer, f.zaehler, f.nenner, f.gemeindezugehoerigkeit_regierungsbezirk, f.gemeindezugehoerigkeit_kreis, f.gemeindezugehoerigkeit_gemeinde, f.amtlicheflaeche, st_area(f.wkb_geometry) AS fsgeomflae,
138to_char(cast(f.zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, f.istgebucht, g.gemarkungsnummer, g.bezeichnung, r.bezeichnung AS rbez, k.bezeichnung AS kbez, m.bezeichnung AS mbez
139FROM ax_flurstueck f
140LEFT JOIN ax_gemarkung g ON f.gemeindezugehoerigkeit_land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
141LEFT JOIN ax_regierungsbezirk r ON f.gemeindezugehoerigkeit_regierungsbezirk=r.regierungsbezirk
142LEFT JOIN ax_kreisregion k ON f.gemeindezugehoerigkeit_regierungsbezirk=k.regierungsbezirk AND f.gemeindezugehoerigkeit_kreis=k.kreis
143LEFT JOIN ax_gemeinde m ON m.regierungsbezirk=f.gemeindezugehoerigkeit_regierungsbezirk AND m.kreis=f.gemeindezugehoerigkeit_kreis AND m.gemeinde=f.gemeindezugehoerigkeit_gemeinde
144WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL AND m.endet IS NULL AND k.endet IS NULL AND r.endet IS NULL;";
145
146$v = array($gmlid); // mit gml_id suchen
147$res = pg_prepare("", $sql);
148$res = pg_execute("", $v);
149if (!$res) {
150        echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>";
151        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
152}
153if ($row = pg_fetch_assoc($res)) {
154        $gemkname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
155        $gmkgnr=$row["gemarkungsnummer"];
156        $bezirk=$row["gemeindezugehoerigkeit_regierungsbezirk"];
157        $rbez=htmlentities($row["rbez"], ENT_QUOTES, "UTF-8");
158        $kreis=$row["gemeindezugehoerigkeit_kreis"];
159        $kbez=htmlentities($row["kbez"], ENT_QUOTES, "UTF-8");
160        $gemeinde=$row["gemeindezugehoerigkeit_gemeinde"];
161        $mbez=htmlentities($row["mbez"], ENT_QUOTES, "UTF-8");
162        $flurnummer=$row["flurnummer"];
163        $zaehler=$row["zaehler"];
164        $nenner=$row["nenner"];
165        $flstnummer=$zaehler;
166        if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
167        $fsbuchflae=$row["amtlicheflaeche"]; // amtliche Fl. aus DB-Feld
168        $fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÀche
169        $the_Xfactor = $fsbuchflae / $fsgeomflae; // Multiplikator zur Umrechnung geometrische AbschnittsflÀchen in BuchflÀche
170        $fsbuchflaed=number_format($fsbuchflae,0,",",".") . " m&#178;"; // Display-Format dazu
171        $fsgeomflaed=number_format($fsgeomflae,0,",",".") . " m&#178;";
172        $gml_buchungsstelle=$row["istgebucht"]; // wird erst im GB-Teil benötigt
173        $entsteh=$row["zeitpunktderentstehung"];
174        $zeart=$row["zeigtaufexternes_art"];
175        $zename=$row["zeigtaufexternes_name"];
176} else {
177        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
178        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
179        echo "\n</body>\n</html>";
180        return;
181}
182pg_free_result($res);
183
184if ($eig=="j") { // Balken
185        echo "<p class='fsei'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
186        ."\n\n<h2>Flurst&uuml;ck mit Eigent&uuml;mer</h2>";
187} else {
188        echo "<p class='fskennz'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
189        ."\n\n<h2>Flurst&uuml;ck</h2>";
190}
191
192// PrÃŒfung der Gebiets-Berechtigung bei gemeinsam genutzten Datenbanken (Kreis und Gemeinde)
193// FÃŒr das gkz (z.B. aus dem Mapfile-Namen) wird in der Konfiguration ein Filter gesetzt.
194if ( ($filtkreis != '' and $filtkreis != $kreis) or ($filtgem != '' and $filtgem != $gemeinde) ) {
195        // Einer der gesetzten Filter passt nicht
196        if ($debug > 2) { //++ Schönes Bild? Stop-Zeichen?
197                echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
198                ."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
199        }
200        echo "\n<br><p class='stop1'>Zugriff nicht erlaubt</p>"
201        ."\n<br><p class='stop2'>Dies Flurst&uuml;ck liegt ausserhalb der zust&auml;ndigen Stadt oder Gemeinde.</p>\n</body>\n</html>";
202        exit;
203}
204
205echo "\n<table class='outer'>"
206        ."\n\t<tr>\n\t\t<td class='ll'><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Kennzeichen:</td>" // Links
207        ."\n\t\t<td>" // Mitte
208        ."\n\t\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t\t\t\t<tr>" // darin Tabelle Kennzeichen
209                ."\n\t\t\t\t\t<td class='head'>Gemarkung</td>\n\t\t\t\t\t<td class='head'>Flur</td>\n\t\t\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t\t\t</tr>"
210                ."\n\t\t\t\t<tr>\n\t\t\t\t\t<td title='Gemarkung'>";
211                        if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
212                        echo $gemkname."&nbsp;</td>"
213                ."\n\t\t\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
214                ."\n\t\t\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t\t\t\t</tr>"
215        ."\n\t\t\t</table>"
216        ."\n\t\t</td>\n\t\t<td>"; // Rechts
217        fortfuehrungen($entsteh, $zeart, $zename);
218echo "\n\t\t</td>\n\t</tr>\n</table>";
219
220echo "\n<hr>\n<table class='fs'>"; // FS-Teil 6 Spalten
221echo "\n<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>" // 1-5 in erster Zeile kein "colspan" verwenden
222        ."\n\t\t<td>\n\t\t<p class='nwlink noprint'>weitere Auskunft:</p></td>" // 6
223."\n</tr>";
224
225echo "\n<tr>" // Zeile: G e b i e t s z u g e h o e r i g k e i t  Gemeinde / Kreis / Regierungsbezirk
226        ."\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>" // 1
227        ."\n\t<td>Gemeinde<br>Kreis<br>Regierungsbezirk</td>" // 2
228        ."\n\t<td class='lr' colspan='3'>"; // 3-5
229                if ($showkey) {echo "<span class='key'>(".$gemeinde.")</span> ";}
230                echo $mbez."<br>";
231                if ($showkey) {echo "<span class='key'>(".$kreis.")</span> ";}
232                echo $kbez."<br>";
233                if ($showkey) {echo "<span class='key'>(".$bezirk.")</span> ";}
234                echo $rbez
235        ."</td>"
236        ."\n\t<td class='nwlink'>" // 5
237                ."\n\t\t<p class='nwlink noprint'>"
238                ."\n\t\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
239                if ($showkey) {echo "&amp;showkey=j";}
240                echo "' title='Vorg&auml;nger-Flurst&uuml;cke'>Historie "
241                ."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
242                ."</a>"
243                ."\n\t\t</p>"
244        ."\n\t</td>" // 6
245."\n</tr>";
246
247// ** L a g e b e z e i c h n u n g **
248
249// Lagebezeichnung  M I T  Hausnummer
250// ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
251$sql="SELECT DISTINCT l.gml_id, l.gemeinde, l.lage, l.hausnummer, s.bezeichnung, s.gml_id AS kgml
252FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf) 
253JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
254WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL   
255ORDER BY l.gemeinde, l.lage, l.hausnummer;";
256
257$v = array($gmlid);
258$res = pg_prepare("", $sql);
259$res = pg_execute("", $v);
260
261if (!$res) {
262        echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
263        if ($debug > 1) {
264                echo "\n<p class='dbg'>Fehler:".pg_last_error()."</p>";
265                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
266        }
267} else {
268        $j=0;
269        $kgmlalt="";
270        while($row = pg_fetch_assoc($res)) {
271                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
272                if (substr($sname, strlen($sname) -3, 3) == 'weg') { // Versuch fuer korrekten Satzbau
273                        $slink=" am ".$sname;
274                } else {
275                        $slink=" an der ".$sname;
276                }
277                $hsnr=$row["hausnummer"];
278                echo "\n<tr>";
279                        if ($j == 0) { // 1
280                                echo "\n\t<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
281                        } else {
282                                echo "\n\t<td>&nbsp;</td>";
283                        }
284                        echo "\n\t<td>&nbsp;</td>" // 2
285                        ."\n\t<td class='lr' colspan='3'>"; // 3-5
286                                if ($showkey) {echo "<span class='key' title='Straßenschl&uuml;ssel'>(".$row["lage"].")</span>&nbsp;";}
287                                echo $sname."&nbsp;".$hsnr."</td>";
288                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"; // 6
289
290                        // +++ davor auch Link "Straße"
291                        $kgml=$row["kgml"]; // Wiederholung vermeiden
292                        if ($kgml != $kgmlalt) { // NEUE Strasse vor Lage
293                                $kgmlalt=$kgml; // Katalog GML-ID
294                                echo "\n\t\t\t<a title='Flurst&uuml;cke mit oder ohne Hausnummer".$slink."' "
295                                ."href='alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."'>Stra&szlig;e "
296                                ."<img src='ico/Strassen.png' width='16' height='16' alt='STRA'></a> ";
297                        }
298
299                        echo "\n\t\t\t<a title='Flurst&uuml;cke und Geb&auml;ude mit Hausnummer ".$hsnr."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"];
300                                if ($showkey) {echo "&amp;showkey=j";}
301                                echo "'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>"
302                        ."\n\t\t</p>\n\t</td>"  // 6
303                ."\n</tr>";
304                $j++;
305        }
306        $cnt_adressen=$j;
307        pg_free_result($res);
308}
309
310// Lagebezeichnung  O H N E  Hausnummer  (Gewanne oder nur Strasse)
311// ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
312$sql ="SELECT l.gml_id, l.unverschluesselt, l.gemeinde, l.lage, s.bezeichnung
313FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf)
314LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
315WHERE f.gml_id = $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL;";
316
317$v = array($gmlid);
318$res = pg_prepare("", $sql);
319$res = pg_execute("", $v);
320if (!$res) {
321        echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
322        //if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
323        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
324}
325$j=0;
326while($row = pg_fetch_assoc($res)) {
327        $skey=$row["lage"]; // Strassenschl.
328        $lgml=$row["gml_id"]; // key der Lage
329        $gewann = htmlentities($row["unverschluesselt"], ENT_QUOTES, "UTF-8");
330        if ($gewann != "") {
331                echo "\n<tr>"
332                        ."\n\t<td class='ll' title='unverschl&uuml;sselte Lagebezeichnung'><img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''> Gewanne:</td>" // 1
333                        ."\n\t<td></td>" // 2
334                        ."\n\t<td class='lr' colspan='3'>".$gewann."</td>" // 3-5
335                        ."\n\t<td>\n\t\t<p class='nwlink noprint'>" // 6
336                                ."\n\t\t\t<a title='Flurst&uuml;cke mit der Gewanne ".$gewann."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
337                                if ($showkey) {echo "&amp;showkey=j";}                         
338                                echo "'>\n\t\t\tLage <img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''></a>"
339                        ."\n\t\t</p>\n\t</td>" // 6
340                ."\n</tr>";
341        } elseif ($skey > 0) {
342                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
343                if (substr($sname, strlen($sname) -3, 3) == 'weg') { // Versuch fuer korrekten Satzbau
344                        $slink=" am ".$sname;
345                } else {
346                        $slink=" an der ".$sname;
347                }
348                echo "\n<tr>"
349                        ."\n\t<td class='ll'><img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''> Stra&szlig;e:</td>" // 1
350                        ."\n\t<td></td>" // 2
351                        ."\n\t<td class='lr' colspan='3'>"; // 3-5
352                                if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
353                                echo $sname."</td>";
354                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>" // 6
355                                ."\n\t\t\t<a title='FlurstÃŒcke ".$slink."' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
356                                if ($showkey) {echo "&amp;showkey=j";}                         
357                                echo "'>\n\t\t\tLage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''>\n\t\t\t</a>"
358                        ."\n\t\t</p>\n\t</td>" // 6
359                ."\n</tr>";
360        }
361        $j++;
362}
363pg_free_result($res);
364
365/* Status "N u t z u n g":
366Die Classic-Tabelle "nutzung" ist eine Zusammenfassung aller Tabellen mit Nutzungs-FlÀchen
367Die Classic-Tabelle "nutzung_meta" zeigt die Kategorie und Gruppe des Nutzungs-Abschnitts an.
368
369Aus der norGIS-Struktur wird ersatzweise VORLÄUFIG die Tabelle "nutz_21" verwendet,
370die das alte ALB-Format der Nutzungs-Abschnitte von FlurstÃŒcken simuliert.
371Hier finden sich bereits verschnittene FlÀchen, aber die gml_id fehlt.
372
373Die EntschlÃŒsselung der Nutzungsart in den verschiedenen ALKIS-Varianten ist darin unterentwickelt.
374Diese ist eigentlich fÃŒr jede der getrennten Tabellen der Gruppe Nutzungsart individuell.
375Die Classic-Lösung mit 2 Zusatzfeldern war schon sehr pauschalisiert, aber
376durch die RÃŒck-Konvertierung in ALB-Strukturen in der norGIS-Version ist das zu stark vereinfacht.
377z.B. wird "WohnbauflÀche" mit der Zusatzeigenschaft "Art der Bebauung": 'Offen'
378nun zur Nutzungsart "Offen".
379Durch JOIN auf die "alkis_elemente" mit einem Teil des SchlÌssels wird das zur "WohnbauflÀche, Offen".
380Es sollte eine Tabellen-Struktur bereit gestellt werden, die auch aussagt, dass der Wert "Offen" zur
381Zusatz-Eigenschaft "Art der Bebauung" gehört. Dazu muss das PostProcessing erweitert werden. */
382
383$sql="SELECT e.definition, trim(both FROM n.nutzsl) AS nutzsl, trim(both FROM n.fl) AS fl, trim(both FROM s.nutzung) AS nutzung
384 FROM nutz_21 n JOIN nutz_shl s ON n.nutzsl = s.nutzshl
385 JOIN alkis_elemente e ON e.kennung = substring(n.nutzsl from 1 for 5)
386WHERE n.flsnr = $1 ORDER BY cast(n.fl AS integer) DESC;";
387// Flurstueckskennzeichen mit Trennzeichen im ALB-Format wie 'llgggg-fff-zzzzz/nnn'
388$fskennzalb=$defland.$gmkgnr."-".str_pad($flurnummer,3,"0",STR_PAD_LEFT)."-".str_pad($zaehler,5,"0",STR_PAD_LEFT)."/".str_pad($nenner,3,"0",STR_PAD_LEFT);
389$v = array($fskennzalb);
390$res = pg_prepare("", $sql);
391$res = pg_execute("", $v);
392if (!$res) {
393        echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
394        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = FS-Kennz = '".$fskennzalb."'</p>";}
395}
396$j=0;
397while($row = pg_fetch_assoc($res)) {
398        $flae=$row["fl"]; // BuchflÀche
399        $nutzsl=$row["nutzsl"]; // SchlÃŒssel
400        $nutzung=$row["nutzung"]; // Bezeichnung aus ALB-Tabelle, "fein"
401        $defi=$row["definition"]; // Langer Text mit Beschreibung
402        $title=htmlentities($defi, ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
403        echo "\n<tr>\n\t";
404                if ($j == 0) { // 1
405                        echo "<td class='ll' title='Abschnitt der tats&auml;chlichen Nutzung'><img src='ico/Abschnitt.png' width='16' height='16' alt=''> Nutzung:</td>";
406                } else {
407                        echo "<td>&nbsp;</td>";
408                }
409                $absflaebuch = number_format($flae,0,",",".") . " m&#178;"; // Formatierte Abschnitts-Buch-FlÀche
410                echo "\n\t<td></td>"; // 2
411                echo "\n\t<td class='fla' title='Buchfl&auml;che des Abschnitts'>".$absflaebuch."</td>"; // 3 - gleiche Spalte wie Fl. in BodenschÀtzg.
412                echo "\n\t<td></td>"; // 4
413                echo "\n\t<td class='lr' title='".$title."'>"; // 5 - gleiche Sp. wie Zustandsstufe usw.
414                        if ($showkey) {echo "<span class='key'>(".$nutzsl.")</span> ";}
415                        echo $nutzung
416                ."</td>"
417                ."\n\t<td>"; // 6
418/*              // Derzeit ist keine Gruppe zugeordnet
419                        switch ($grupp) { // Icon nach 4 Objektartengruppen
420                                case "Siedlung":   $ico = "Abschnitt.png"; break;
421                                case "Verkehr":    $ico = "Strassen_Klassifikation.png"; break;
422                                case "Vegetation": $ico = "Wald.png"; break;
423                                case "GewÀsser":   $ico = "Wasser.png";        break;
424                                default:        $ico = "Abschnitt.png"; break;
425                        }
426                        // Icon ist auch im Druck sichtbar, class='noprint' ?           
427                        echo "<p class='nwlink'><img title='".$title."' src='ico/".$ico."' width='16' height='16' alt='NUA'></p>"; */
428                echo "</td>" // 6
429        ."\n</tr>";
430        $j++;
431}
432pg_free_result($res);
433
434echo "\n<tr>" // FlÀchen-Summenzeile
435        ."\n\t<td class='re' title='amtliche Fl&auml;che (Buchfl&auml;che)'>Fl&auml;che:</td>" // 1
436        ."\n\t<td>&nbsp;</td>" // 2
437        ."\n\t<td class='fla sum'>" // 3 Flaeche
438                ."<span title='geometrisch berechnete Fl&auml;che = ".$fsgeomflaed."' class='flae'>".$fsbuchflaed."</span></td>"
439        ."\n\t<td>&nbsp;</td>" // 4
440        ."\n\t<td>&nbsp;</td>" // 5
441        ."\n\t<td>" // 6 Link auf GebÀude-Auswertung
442                ."\n\t\t<p class='nwlink noprint'>" // Gebaeude-Verschneidung
443                ."\n\t\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
444                if ($showkey) {echo "&amp;showkey=j";}
445                if ($cnt_adressen > 0) { // wenn Adresse vorgekommen ist
446                        echo "' title='Geb&auml;ude auf oder an dem Flurst&uuml;ck'>Geb&auml;ude ";
447                } else { // GebÀude mit Adresse gibt es NICHT, das ist klar
448                        echo "' title='Suche Geb&auml;ude ohne Adresse auf dem Flurst&uuml;ck oder angrenzende Geb&auml;ude'>Suche ";
449                }
450                echo "<img src='ico/Haus.png' width='16' height='16' alt=''></a>"
451                ."\n\t\t</p>"
452        ."\n\t</td>" // 6
453        ."\n</tr>";
454
455// B o d e n s c h À t z u n g
456// ---------------------------
457// Tabelle "klas_3x" (norbit-ALB): Dort fehlen Bodenart und Zustandsstufe, es ist aber bereits auf BuchflÀche umgerechnet.
458
459// BodenschÀtzungs-Abschnitte mit FlurstÌcken verschneiden, Spalten entschlÌsseln
460$sql="SELECT b.kulturart AS kulturartk, kulturart.beschreibung AS kulturartv,
461 b.bodenart AS bodenartk, bodenart.beschreibung AS bodenartv, zustbod.beschreibung AS zustbodv,
462 b.entstehungsartoderklimastufewasserverhaeltnisse AS entsteh, b.sonstigeangaben,
463 b.bodenzahlodergruenlandgrundzahl as bodenzahl, b.ackerzahlodergruenlandzahl AS ackerzahl,
464 b.jahreszahl, st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) AS schnittflae
465FROM ax_flurstueck f
466JOIN ax_bodenschaetzung b ON st_intersects(b.wkb_geometry, f.wkb_geometry) AND st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) > 0.05
467LEFT JOIN ax_bodenart_bodenschaetzung bodenart ON b.bodenart = bodenart.wert
468LEFT JOIN ax_kulturart_bodenschaetzung kulturart ON b.kulturart = kulturart.wert
469LEFT JOIN ax_zustandsstufeoderbodenstufe_bodenschaetzung zustbod ON b.zustandsstufeoderbodenstufe = zustbod.wert
470WHERE f.gml_id = $1 AND f.endet IS NULL AND b.endet IS NULL ORDER BY schnittflae DESC";
471
472$v = array($gmlid);
473$res = pg_prepare("", $sql);
474$res = pg_execute("", $v);
475if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Boden</p>\n";}
476$gesertragsmz = 0; // Gesamt-ErtragsMesszahl
477$klasflae = 0; // Summe klassifizierte FlÀche
478$j=0;
479if(!empty($res) && pg_num_rows($res) > 0) {
480        while ($row = pg_fetch_assoc($res)) {
481                $kulturartk=$row['kulturartk']; // Key  -
482                $kulturartv=$row['kulturartv']; //              - Value
483                // 1000="Ackerland (A)", 2000="Acker-GrÃŒnland (AGr)", 3000="GrÃŒnland (Gr)", 4000="GrÃŒnland-Acker (GrA)"             
484                if (substr($kulturartv, 0, 3) == 'Ack') { // A
485                        $kbez1="Bodenzahl";
486                        $kbez2="Ackerzahl";
487                } else { // Gr
488                        $kbez1="Gr&uuml;nlandgrundzahl";
489                        $kbez2="Gr&uuml;nlandzahl";
490                }
491                $absflae = $row['schnittflae'];
492                $absbuchflae = $absflae * $the_Xfactor;
493                $klasflae+=$absbuchflae;
494                $ertragszahl = intval($absbuchflae * $row['ackerzahl'] / 100);
495                $gesertragsmz+=$ertragszahl;
496        //      $absflaedis = number_format($absflae,0,",",".")." m&#178;";  // als Tool-Tip ?
497                $absbuchflaedis = number_format($absbuchflae,0,",",".")." m&#178;";
498                $boedenzahl=ltrim($row['bodenzahl'], '0');
499                $ackerzahl=ltrim($row['ackerzahl'], '0');
500                $jahr=$row['jahreszahl'];
501
502                // 2x Array mit SchlÃŒsseln. PostNAS fÃŒllt es nicht, wenn als "integer[]" definiert.
503                $entsteh=$row['entsteh'];
504                $sonst=$row['sonstigeangaben'];
505                if ($j == 0) { // 1
506                        echo "\n<tr>\n\t<td class='ll' title='Abschnitt Bodensch&auml;tzung'><img src='ico/Landwirt.png' width='16' height='16' alt=''> Bodensch&auml;tzung:</td>";
507                } else {
508                        echo "\n<tr>\n\t<td>&nbsp;</td>";
509                }
510                echo "\n\t<td class='fla' title='Ertragsmesszahl: Produkt von ".$kbez2."/100 und Fl&auml;che.'>EMZ ".$ertragszahl."</td>"; // 2
511                echo "\n\t<td class='re' title='Fl&auml;che des Sch&auml;tzungsabschnitts'>".$absbuchflaedis."</td>"; // 3
512                echo "\n\t<td class='lr'><span title='".$kbez1."'>".$boedenzahl."</span>/<span title='".$kbez2."'>".$ackerzahl."</span></td>"; // 4
513                echo "\n\t<td class='lr'>"; // 5
514
515                        if ($showkey) {echo "\n\t\t<span class='key'>(".$kulturartk.")</span> ";}
516                        echo "\n\t\t<span title='Kulturart'>".$kulturartv."</span> ";
517
518                        if ($showkey) {echo "\n\t\t<span class='key'>(".$row['bodenartk'].")</span> ";}
519                        echo "\n\t\t<span title='Bodenart'>".$row['bodenartv']."</span> ";
520
521                        echo "\n\t\t<span title='Zustandsstufe'>".$row['zustbodv']."</span> ";
522
523                        // ARRAYs auflösen ohne den SchÀtzungs-Abschnitt mehrfach aufzulisten
524                        if ($entsteh <> '') {
525                                $ent="'".str_replace(",", "','", trim($entsteh, "{}"))."'"; // als Liste fÃŒr SQL "WHERE IN ()"
526                                echo "\n\t\t <span title='Enststehungsart oder Klimastufe, Wasserverh&auml;ltnisse'>";
527                                        if ($showkey) {echo "\n\t\t <span class='key'>(".$ent.")</span> ";}
528                                        werteliste ('ax_bodenschaetzung', 'entstehungsartoderklimastufewasserverhaeltnisse', $ent);
529                                echo "</span>";
530                        }
531                        if ($sonst <> '') {
532                                $son="'".str_replace(",", "','", trim($sonst, "{}"))."'";
533                                echo "\n\t\t <span title='Sonstige Angaben'>";
534                                        if ($showkey) {echo "\n\t\t <span class='key'>(".$son.")</span> ";}
535                                        werteliste ('ax_bodenschaetzung', 'sonstigeangaben', $son);
536                                echo "</span>";
537                        }
538
539                        if ($jahr <> '') {
540                                echo "\n\t\t<span title='Jahreszahl'>".$jahr."</span>";
541                        }
542                echo "\n\t</td>"; // 5
543                echo "\n\t<td>&nbsp;</td>\n</tr>"; // 6
544                $j++;
545        }
546        // Summenzeile
547        $klasflaedis = number_format($klasflae,0,",",".")." m&#178;";
548        echo "\n<tr>\n\t<td class='re'>Ertragsmesszahl:</td>" // 1
549        ."\n\t<td class='fla sum' title='Summe der Ertragsmesszahlen f&uuml;r dies Flurst&uuml;ck'>".$gesertragsmz."</td>" // 2
550        ."\n\t<td class='re'>".$klasflaedis."</td>" // 3
551        ."\n\t<td colspan='3'>&nbsp;</td>\n</tr>"; // 4-6
552}
553
554// H i n w e i s  auf Bodenneuordnung oder eine strittige Grenze
555$sql_boden ="SELECT b.artderfestlegung AS wert, a.beschreibung AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez,
556b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key
557FROM ax_bauraumoderbodenordnungsrecht b
558LEFT JOIN ax_artderfestlegung_bauraumoderbodenordnungsrecht a ON b.artderfestlegung = a.wert
559LEFT JOIN ax_dienststelle d ON b.stelle=d.stelle
560WHERE b.endet IS NULL AND d.endet IS NULL 
561AND (ST_Within((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL ), wkb_geometry)
562 OR ST_Overlaps((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL), wkb_geometry));";
563
564pg_prepare($con, "bodeneuordnung", $sql_boden);
565$res_bodeneuordnung = pg_execute($con, "bodeneuordnung", array($gmlid));
566if (!$res_bodeneuordnung) {
567        echo "\n<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>";
568        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_boden."<br>$1 = gml_id = '".$gmlid."'</p>";}
569}
570$sql_str="SELECT gml_id FROM ax_besondereflurstuecksgrenze WHERE endet IS NULL AND 1000 = ANY(artderflurstuecksgrenze)
571AND ST_touches((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL),wkb_geometry);";
572
573pg_prepare($con, "strittigeGrenze", $sql_str);
574$res_strittigeGrenze = pg_execute($con, "strittigeGrenze", array($gmlid));
575if (!$res_strittigeGrenze) {
576        echo "\n<p class='err'>Fehler bei strittige Grenze</p>";
577        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_str."<br>$1 = gml_id = '".$gmlid."'</p>";}
578}
579if (pg_num_rows($res_bodeneuordnung) > 0 OR pg_num_rows($res_strittigeGrenze) > 0) {
580        echo "\n<tr>"
581        ."\n\t<td title='Hinweise zum Flurst&uuml;ck'><h6><img src='ico/Hinweis.png' width='16' height='16' alt=''> " // 1
582        ."Hinweise:</h6></td>\n\t<td colspan='5'>&nbsp;</td>\n</tr>";// 2-6
583        if (pg_num_rows($res_bodeneuordnung) > 0) {
584                while ($row = pg_fetch_assoc($res_bodeneuordnung)) { // 3 Zeilen je Verfahren
585                        echo "\n<tr title='Bau-, Raum- oder Bodenordnungsrecht'>" // Zeile 1 - kommt immer, darum hier den Link
586                                ."\n\t<td>Bodenrecht</td>" // 1
587                                ."\n\t<td class='re'>Festlegung: </td>" // 2 "Art der Festlegung" zu lang
588                                ."\n\t<td colspan='3'>"; // 3-5
589                                        if ($showkey) {echo "<span class='key'>(".$row['wert'].")</span> ";}
590                                        echo $row['art_verf']
591                                ."</td>";
592                                echo "\n\t<td>" // 6 LINK:
593                                        ."\n\t\t<p class='nwlink noprint'>"
594                                        ."\n\t\t\t<a href='alkisbaurecht.php?gkz=".$gkz."&amp;gmlid=".$row['verf_gml'];
595                                        if ($showkey) {echo "&amp;showkey=j";}
596                                        echo "' title='Bau-, Raum- oder Bodenordnungsrecht'>Recht <img src='ico/Gericht.png' width='16' height='16' alt=''></a>"
597                                        ."\n\t\t</p>"           
598                                ."\n\t</td>"
599                        ."\n</tr>";
600                        $dstell=$row['stelle_key']; // Zeile 2
601                        if ($dstell != "") { // Kann auch leer sein
602                                echo "\n<tr title='Flurbereinigungsbeh&ouml;rde'>"
603                                        ."\n\t<td>&nbsp;</td>" // 1
604                                        ."\n\t<td class='re'>Dienststelle: </td>" // 2
605                                        ."\n\t<td colspan='3'>"; // 3-5
606                                                if ($showkey) {echo "<span class='key'>(".$dstell.")</span> ";}
607                                                echo $row['stelle_bez']
608                                        ."</td>"
609                                        ."\n\t<td>&nbsp;</td>" // 6
610                                ."\n</tr>";
611                        }
612                        $vbez=$row['verf_bez']; // Zeile 3, ist nicht immer gefÃŒllt
613                        $vnam=$row['verf_name']; // noch seltener
614                        if ($vbez != "") {
615                                echo "\n<tr title='Verfahrensbezeichnung'>"
616                                        ."\n\t<td>&nbsp;</td>"
617                                        ."\n\t<td class='re'>Verfahren: </td>"
618                                        ."\n\t<td colspan='3'>";
619                                                if ($vnam == "") {
620                                                        echo $vbez; // nur die Nummer
621                                                } else {        // Name oder beides
622                                                        if ($showkey) {echo "<span class='key'>(".$vbez.")</span> ";}
623                                                        echo $vnam;
624                                                }
625                                        echo "</td>"
626                                        ."\n\t<td>&nbsp;</td>"
627                                ."\n</tr>";
628                        }
629                }
630        }
631        if (pg_num_rows($res_strittigeGrenze) > 0) { // 1 Zeile
632                echo "\n<tr>\n<td>Strittige Grenze:</td>"
633                ."<td colspan=4>Mindestens eine Flurst&uuml;cksgrenze ist als <b>strittig</b> zu bezeichnen. Sie kann nicht festgestellt werden, weil die Beteiligten sich nicht &uuml;ber den Verlauf einigen. Nach sachverst&auml;ndigem Ermessen der Katasterbeh&ouml;rde ist anzunehmen, dass das Liegenschaftskataster nicht die rechtm&auml;&szlig;ige Grenze nachweist.</td>"
634                ."\n<td>&nbsp;</td>\n</tr>";
635        }
636}
637echo "\n</table>";
638
639// B U C H U N G S S T E L L E N  zum FS
640$bartgrp="";    // Buchungsart
641$barttypgrp=""; // Buchungsart Typ
642if ($gml_buchungsstelle == '') {echo "\n<p class='err'>Keine Buchungstelle zum Flurst&uuml;ck gefunden.</p>";}
643echo "\n<table class='outer'>"; // ALLE Buchungen und EigentÃŒmer in 4 Spalten EINER Tabelle ausgeben
644        $stufe=1; // SchleifenzÀhler Tiefe
645        $gezeigt=buchung_anzg($gml_buchungsstelle, $eig, false, $gmlid, 1); // die ("dienende") Buchung anzeigen, wenn nicht fiktiv. Liefert true/false
646
647        $anzber=ber_bs_zaehl($gml_buchungsstelle); // Anzahl berechtigte Buchungen (nÀchste Stufe) zu dieser Buchung ermitteln
648        $verf_next = array($gml_buchungsstelle); // Start Recursion mit einem Element
649        //if ($debug > 2) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
650
651        while ($anzber > 0 ) { // Stufe - recursiv in die Tiefe, solange es was zu verfolgen gibt
652                $verf_akt=$verf_next; // die nÀchste Stufe als aktuell ÃŒbernehmen ..
653                $verf_next=array(); // .. und zum AuffÃŒllen leeren
654                $stufe++;
655                $i=0; // SchleifenzÀhler Elemente
656                foreach($verf_akt as $gml_ber_bs) {
657                        $i++;
658                        if (ber_bs_zaehl($gml_ber_bs) > 0) {
659                                $verf_neu=ber_bs_anzg($gml_ber_bs, $eig, false, $gmlid, ""); // Anzeige ber. Buchungst., ggf. mit EigentÃŒmer.
660                                $anz_neu=count($verf_neu); // Das Ergebnis zÀhlen
661                        //      if ($debug > 2) {echo "<p class='dbg'>Weiter zu verfolgen: Stufe ".$stufe.", Element ".$i.", Anzahl: ".$anz_neu."</p>";}
662                                if ($anz_neu > 0) { // wenn neue geliefert
663                                        $verf_next=array_merge($verf_next, $verf_neu); // die neuen an die Sammlung heften
664                                }
665                        }
666                } // Ende Buchungs-Array in der Stufe
667                $anzber=count($verf_next); // Sammlung auf Stufe zÀhlen, Steuert die Schleife.
668                //if ($debug > 2) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
669        } // Ende Stufe
670echo "\n</table>\n\n";
671
672pg_close($con);
673echo <<<END
674<div class='buttonbereich noprint'>
675<hr>
676        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
677        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
678END;
679echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"" . $gmlid . "\")'><img src='ico/download_fs.png' width='32' height='16' alt='Export'></a>&nbsp;\n</div>";
680
681footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig);
682?>
683</body>
684</html>
Note: See TracBrowser for help on using the repository browser.