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

Revision 402, 33.7 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Buchauskunft überarbeitet. z.B. Flurstücksnachweis mit allen Buchungen.

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