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

Revision 394, 44.4 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Buchauskunft, im Flurstücksnachweis, Abschnitt Bodenschätzung: Ausgabe Enststehungsart, Klimastufe + Wasserverhältnisse (Arrays)

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
19        ToDo:
20        - Parameter zum Umschalten mit/ohne BodenschÀtzung?
21        - Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen)
22*/
23session_start();
24
25// Var. aus Parameter initalisieren
26$eig="n";
27$berbu="n";
28$showkey="n";
29
30// alle Parameter in Variable umwandeln
31$cntget = extract($_GET);
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}$#', $berbu)) {die ("Eingabefehler berbu");}
48if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
49if ($showkey == "j") {$showkey=true;} else {$showkey=false;} // "j"/"n" als boolean umwandeln, ist praktischer abzufragen, wird oft gebraucht
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 type="text/javascript">
64                function ALKISexport() {
65                        window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=flurstueck&gmlid=".$gmlid."'"; ?>);
66                }
67        </script>
68</head>
69<body>
70<?php
71// S t a r t
72$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfsnw.php'");
73if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
74
75// Ein (ALB- ?) FlurstÃŒcks-Kennzeichen wurde alternativ zur gml_id ÃŒbermittelt
76if ($fskennz != '') {
77        // Übergabe Format z.B. "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
78        $arr=explode("-", $fskennz, 4);
79        $zgemkg=trim($arr[0]);
80        if (strlen($zgemkg) == 20 and !isset($arr[1])) { // Oh, ist wohl schon das Datenbank-Feldformat
81                $fskzdb=$zgemkg;
82        } else { // Nö, ist wohl eher ALB-Format
83                // Das Kennzeichen auseinander nehmen.
84                if (strlen($zgemkg) == 6) {
85                        $land=substr($zgemkg, 0, 2);
86                        $zgemkg=substr($zgemkg, 2, 4);
87                } else { // kein schöner Land ..
88                        $land=$defland; // Default-Land aus config
89                }
90                $zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
91                $zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
92                $zn=explode("/", $zfsnr, 2); // Bruch?
93                $zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
94                if (isset($zn[1])) {
95                        $znenner=trim($zn[1]);
96                } else {
97                        $znenner="";
98                }
99                if (trim($znenner, " 0.") == "") { // kein Bruch oder nur Nullen
100                        $znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
101                } else {
102                        $zn=explode(".", $znenner, 2); // .00 wegwerfen
103                        $znenner=str_pad($zn[0], 4 , "0", STR_PAD_LEFT);
104                }
105                // nun die Teile stellengerecht wieder zusammen setzen         
106                $fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
107        }
108        // Spalte "flurstueckskennzeichen" ist in DB indiziert
109        // Format z.B.'052647002001910013__' oder '05264700200012______'
110        $sql ="SELECT gml_id FROM ax_flurstueck WHERE flurstueckskennzeichen= $1 AND endet IS NULL ;";
111
112        $v = array($fskzdb);
113        $res = pg_prepare("", $sql);
114        $res = pg_execute("", $v);
115        if ($row = pg_fetch_array($res)) {
116                $gmlid=$row["gml_id"];
117        } else {
118                echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
119                echo "<p>Kennzeichen veraltet? <a href='./alkisfshist.php?gkz=".$gkz."&fskennz=".$fskennz."'>Suche in der Flurst&uuml;cks-Historie</a></p>";
120                echo "\n</body>\n</html>";
121                return;
122        }
123        pg_free_result($res);
124}
125
126// F L U R S T U E C K
127$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,
128to_char(cast(f.zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung
129FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
130WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
131
132$v = array($gmlid); // mit gml_id suchen
133$res = pg_prepare("", $sql);
134$res = pg_execute("", $v);
135
136if (!$res) {
137        echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>";
138        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
139}
140if ($row = pg_fetch_array($res)) {
141        $gemkname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
142        $gmkgnr=$row["gemarkungsnummer"];
143        $bezirk=$row["regierungsbezirk"];
144        $kreis=$row["kreis"];
145        $gemeinde=$row["gemeinde"];
146        $flurnummer=$row["flurnummer"];
147        $zaehler=$row["zaehler"];
148        $nenner=$row["nenner"];
149        $flstnummer=$zaehler;
150        if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
151        $fsbuchflae=$row["amtlicheflaeche"]; // amtliche Fl. aus DB-Feld
152        $fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÀche
153        $the_Xfactor = $fsbuchflae / $fsgeomflae; // Multiplikator zur Umrechnung geometrische AbschnittsflÀchen in BuchflÀche
154        $fsbuchflaed=number_format($fsbuchflae,0,",",".") . " m&#178;"; // Display-Format dazu
155        $fsgeomflaed=number_format($fsgeomflae,0,",",".") . " m&#178;";
156        $entsteh=$row["zeitpunktderentstehung"];
157        $name=$row["name"]; // Fortfuehrungsnummer(n)
158        $arrn = explode(",", trim($name, "{}") ); // PHP-Array
159} else {
160        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
161        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
162        echo "\n</body>\n</html>";
163        return;
164}
165pg_free_result($res);
166
167// Balken
168if ($eig=="j") {
169        echo "<p class='fsei'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
170        ."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck mit Eigent&uuml;mer</h2>";
171} else {
172        echo "<p class='fskennz'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
173        ."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck</h2>";
174}
175
176// PrÃŒfung der Gebiets-Berechtigung bei gemeinsam genutzten Datenbanken (Kreis und Gemeinde)
177// FÃŒr das gkz (z.B. aus dem Mapfile-Namen) wird in der Konfiguration ein Filter gesetzt.
178if ( ($filtkreis != '' and $filtkreis != $kreis) or ($filtgem != '' and $filtgem != $gemeinde) ) {
179        // Einer der gesetzten Filter passt nicht
180        if ($debug > 2) {
181        //++ Schönes Bild? Stop-Zeichen?
182                echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
183                ."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
184        }
185        echo "\n<br><p class='stop1'>Zugriff nicht erlaubt</p>"
186        ."\n<br><p class='stop2'>Dies Flurst&uuml;ck liegt ausserhalb der zust&auml;ndigen Stadt oder Gemeinde.</p>\n</body>\n</html>";
187        exit;
188}
189
190echo "\n<table class='outer'>\n<tr>\n\t<td>" // linke Seite
191        ."\n\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t\t<tr>" // darin Tabelle Kennzeichen
192                ."\n\t\t\t<td class='head'>Gmkg</td>\n\t\t\t<td class='head'>Flur</td>\n\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t</tr>"
193                ."\n\t\t<tr>\n\t\t\t<td title='Gemarkung'>";
194                if ($showkey) {
195                        echo "<span class='key'>".$gmkgnr."</span><br>";
196                }
197                echo $gemkname."&nbsp;</td>"
198                ."\n\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
199                ."\n\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t\t</tr>"
200        ."\n\t\t</table>"
201."\n\t</td>\n\t<td>" // rechte Seite
202        ."\n\t\t<table class='fsd'>" // FS-Daten 2 Spalten
203                ."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
204                ."\n\t\t\t<td>".$entsteh."</td>\n\t\t</tr>"
205                ."\n\t\t<tr>"
206                        ."\n\t\t\t<td>letz. Fortf</td>"
207                        ."\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
208                                foreach($arrn AS $val) { // Zeile f. jedes Element des Array
209                                        echo trim($val, '"')."<br>";
210                                }
211                        echo "</td>"
212                ."\n\t\t</tr>"
213        ."\n\t\t</table>"
214."\n\t</td>\n</tr>\n</table>";
215//      echo "\n<tr>\n\t<td>Finanzamt</td>\n\t<td>".$finanzamt." ".$finame  . "</td>\n</tr>";
216// Ende Seitenkopf
217
218echo "\n<hr>"
219."\n<p class='nwlink noprint'>weitere Auskunft:</p>" // oben rechts von der Tabelle
220."\n<table class='fs'>";
221
222// ** G e b i e t s z u g e h o e r i g k e i t **
223// eine Tabellenzeile mit der Gebietszugehoerigkeit eines Flurstuecks wird ausgegeben
224// Schluessel "land" wird nicht verwendet, gibt es Bestaende wo das nicht einheitlich ist?
225echo "\n<tr>\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>";
226
227// G e m e i n d e
228$sql="SELECT bezeichnung FROM ax_gemeinde WHERE regierungsbezirk= $1 AND kreis= $2 AND gemeinde= $3 AND endet IS NULL;";
229
230$v = array($bezirk,$kreis,$gemeinde);
231$res = pg_prepare("", $sql);
232$res = pg_execute("", $v);
233if (!$res) {
234        echo "\n<p class='err'>Fehler bei Gemeinde</p>";
235        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
236}
237$row = pg_fetch_array($res);
238$gnam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
239echo "\n\t<td class='lr'>Gemeinde</td>\n\t<td class='lr' colspan='3'>";
240if ($showkey) {echo "<span class='key'>(".$gemeinde.")</span> ";}
241// Link zur FS-Historie (passt nicht ganz in die Zeile "Gemeinde", aber gut unter "weitere Auskunft")
242echo $gnam."</td>\n\t<td class='nwlink'>"
243        ."\n\t\t<p class='nwlink noprint'>"
244                ."\n\t\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
245                        if ($showkey) {echo "&amp;showkey=j";}
246                        echo "' title='Vorg&auml;nger-Flurst&uuml;cke'>Historie "
247                        ."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
248                ."</a>"
249        ."\n\t\t</p>"
250. "\n\t</td>\n</tr>";
251pg_free_result($res);
252
253// K r e i s
254$sql="SELECT bezeichnung FROM ax_kreisregion WHERE regierungsbezirk= $1 AND kreis= $2 AND endet IS NULL;";
255$v = array($bezirk,$kreis);
256$res = pg_prepare("", $sql);
257$res = pg_execute("", $v);
258if (!$res) {
259        echo "\n<p class='err'>Fehler bei Kreis</p>";
260        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
261}
262$row = pg_fetch_array($res);
263$knam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
264echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>Kreis</td>\n\t<td class='lr' colspan='3'>";
265if ($showkey) {echo "<span class='key'>(".$kreis.")</span> ";}
266echo $knam."</td>\n\t<td>&nbsp;</td>\n</tr>";
267pg_free_result($res);
268
269// R e g - B e z
270$sql="SELECT bezeichnung FROM ax_regierungsbezirk WHERE regierungsbezirk= $1 AND endet IS NULL;";
271$v = array($bezirk);
272$res = pg_prepare("", $sql);
273$res = pg_execute("", $v);
274if (!$res) {
275        echo "\n<p class='err'>Fehler bei Regierungsbezirk</p>";
276        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
277}
278$row=pg_fetch_array($res);
279$bnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
280echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>Regierungsbezirk</td>\n\t<td class='lr' colspan='3'>";
281if ($showkey) {echo "<span class='key'>(".$bezirk.")</span> ";}
282echo $bnam."</td>\n\t<td>&nbsp;</td>\n</tr>";
283pg_free_result($res);
284// ENDE G e b i e t s z u g e h o e r i g k e i t
285
286// ** L a g e b e z e i c h n u n g **
287
288// Lagebezeichnung MIT Hausnummer
289// ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
290$sql="SELECT DISTINCT l.gml_id, l.gemeinde, l.lage, l.hausnummer, s.bezeichnung
291FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf) 
292JOIN 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
293WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL   
294ORDER BY l.gemeinde, l.lage, l.hausnummer;";
295
296$v = array($gmlid);
297$res = pg_prepare("", $sql);
298$res = pg_execute("", $v);
299
300if (!$res) {
301        echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
302        if ($debug > 1) {
303                echo "\n<p class='dbg'>Fehler:".pg_last_error()."</p>";
304                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
305        }
306} else {
307        $j=0;
308        while($row = pg_fetch_array($res)) {
309                $sname = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); // Str.-Name
310                echo "\n<tr>\n\t";
311                        if ($j == 0) {
312                                echo "\n\t<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
313                        } else {
314                                echo "\n\t<td>&nbsp;</td>";
315                        }
316                        echo "\n\t<td>&nbsp;</td>"
317                        ."\n\t<td class='lr' colspan='3'>";
318                        if ($showkey) {
319                                echo "<span class='key' title='Straßenschl&uuml;ssel'>(".$row["lage"].")</span>&nbsp;";
320                        }
321                        echo $sname."&nbsp;".$row["hausnummer"]."</td>"
322                        ."\n\t<td>\n\t\t<p class='nwlink noprint'>"
323                                ."\n\t\t\t<a title='Lagebezeichnung mit Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=m&amp;gmlid=".$row["gml_id"];
324                                if ($showkey) {echo "&amp;showkey=j";}
325                                echo "'>Lage <img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>"
326                        ."\n\t\t</p>\n\t</td>"
327                ."\n</tr>";
328                $j++;
329        }
330        $cnt_adressen=$j;
331        pg_free_result($res);
332}
333// +++ Verbesserung: mehrere HsNr zur gleichen Straße als Liste?
334
335// Lagebezeichnung OHNE Hausnummer  (Gewanne oder nur Strasse)
336// ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
337$sql ="SELECT l.gml_id, l.unverschluesselt, l.gemeinde, l.lage, s.bezeichnung
338FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf)
339LEFT 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
340WHERE f.gml_id = $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL;";
341
342$v = array($gmlid);
343$res = pg_prepare("", $sql);
344$res = pg_execute("", $v);
345if (!$res) {
346        echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
347        //if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
348        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
349}
350$j=0;
351// Es wird auch eine Zeile ausgegeben, wenn kein Eintrag gefunden!
352while($row = pg_fetch_array($res)) {
353        $gewann = htmlentities($row["unverschluesselt"], ENT_QUOTES, "UTF-8");
354        $skey=$row["lage"]; // Strassenschl.
355        $lgml=$row["gml_id"]; // key der Lage
356        if (!$gewann == "") {
357                echo "\n<tr>"
358                        ."\n\t<td class='ll' title='Lagebezeichnung'><img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''> Gewanne:</td>"
359                        ."\n\t<td></td>"
360                        ."\n\t<td class='lr' colspan='3'>".$gewann."</td>"
361                        ."\n\t<td>\n\t\t<p class='nwlink noprint'>"
362                                ."\n\t\t\t<a title='Lagebezeichnung Ohne Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
363                                if ($showkey) {echo "&amp;showkey=j";}                         
364                                echo "'>\n\t\t\tLage <img src='ico/Lage_Gewanne.png' width='16' height='16' alt=''></a>"
365                        ."\n\t\t</p>\n\t</td>"
366                ."\n</tr>";
367        }
368        // Gleicher DB-Eintrag in zwei HTML-Zeilen, besser nur ein Link
369        if ($skey > 0) {
370                echo "\n<tr>"
371                        ."\n\t<td class='ll'><img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''> Stra&szlig;e:</td>"
372                        ."\n\t<td></td>"
373                        ."\n\t<td class='lr' colspan='3'>";
374                        if ($showkey) {
375                                echo "<span class='key'>(".$skey.")</span>&nbsp;";
376                        }
377                        echo $row["bezeichnung"]."</td>"
378                        ."\n\t<td>\n\t\t<p class='nwlink noprint'>"
379                                ."\n\t\t\t<a title='Lagebezeichnung Ohne Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;ltyp=o&amp;gmlid=".$lgml;
380                                if ($showkey) {echo "&amp;showkey=j";}                         
381                                echo "'>\n\t\t\tLage <img src='ico/Lage_an_Strasse.png' width='16' height='16' alt=''>\n\t\t\t</a>"
382                        ."\n\t\t</p>\n\t</td>"
383                ."\n</tr>";
384        }
385        $j++;
386}
387pg_free_result($res);
388// ENDE  L a g e b e z e i c h n u n g
389
390// ** N U T Z U N G ** Gemeinsame FlÀche von NUA und FS
391// Tabellenzeilen (3 Spalten) mit tats. Nutzung zu einem FS ausgeben
392
393/* N U T Z U N G   C l a s s i c (alt)
394$sql ="SELECT m.title, m.fldclass, m.fldinfo, n.gml_id, n.nutz_id, n.class, n.info, n.zustand, n.name, n.bezeichnung, m.gruppe,
395st_area(st_intersection(n.wkb_geometry,f.wkb_geometry)) AS schnittflae, c.label, c.blabla
396FROM ax_flurstueck f, nutzung n JOIN nutzung_meta m ON m.nutz_id=n.nutz_id
397LEFT JOIN nutzung_class c ON c.nutz_id=n.nutz_id AND c.class=n.class
398WHERE f.gml_id= $1 AND st_intersects(n.wkb_geometry,f.wkb_geometry) = true
399AND st_area(st_intersection(n.wkb_geometry,f.wkb_geometry)) > 0.05
400AND f.endet IS NULL ORDER BY schnittflae DESC;";
401
402$v = array($gmlid);
403$res = pg_prepare("", $sql);
404$res = pg_execute("", $v);
405if (!$res) {
406        echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
407        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
408}
409$the_Xfactor=$fsbuchflae / $fsgeomflae; // geom. ermittelte FlÀche auf amtl. BuchflÀche angleichen
410$j=0;
411while($row = pg_fetch_array($res)) {
412        $grupp=$row["gruppe"]; // 4 Gruppen
413        $nutzid=$row["nutz_id"]; // 27 Tabellen, num. Key
414        $title=htmlentities($row["title"], ENT_QUOTES, "UTF-8"); // Titel der 27 Tabellen
415        $fldclass=$row["fldclass"]; // Name 1. Zusatzfeld
416        $fldinfo= $row["fldinfo"];  // Name 2. Zus.
417        $gml=$row["gml_id"];
418        $class=$row["class"]; // 1. Zusatzfeld verschlÃŒsselt -> nutzung_class
419        $info=$row["info"]; // 2. Zus. verschlÃŒsselt (noch keine Info zum entschl.)
420        $schnittflae=$row["schnittflae"];
421        $label=$row["label"]; // Nutzungsart entschlÃŒsselt
422        $zus=$row["zustand"]; // im Bau
423        $nam=$row["name"]; // Eigenname
424        $bez=$row["bezeichnung"]; // weiterer Name (unverschl.)
425        $blabla=htmlentities($row["blabla"], ENT_QUOTES, "UTF-8");
426        $label=str_replace("/", "<br>", $label); // Ersetzt "/" durch html-Zeilenwechsel
427
428        echo "\n<tr>\n\t";
429                if ($j == 0) {
430                        echo "<td class='ll' title='Abschnitt der tats&auml;chlichen Nutzung'><img src='ico/Abschnitt.png' width='16' height='16' alt=''> Nutzung:</td>";
431                } else {
432                        echo "<td>&nbsp;</td>";
433                }
434                $absflaebuch = $schnittflae * $the_Xfactor; // angleichen geometrisch an amtliche FlÀche
435                $schnittflae = number_format($schnittflae,1,",",".") . " m&#178;"; // geometrisch
436                $absflaebuch = number_format($absflaebuch,0,",",".") . " m&#178;"; // Abschnitt an BuchflÀche angeglichen
437                echo "\n\t<td class='fla' title='geometrisch berechnet: ".$schnittflae."'>".$absflaebuch."</td>";
438
439                echo "\n\t<td class='lr' colspan='3'>";
440                        if ($class == 0) {
441                                if ($showkey) {echo "<span class='key'>(".$nutzid.")</span> ";}
442                                echo $title; // Name der Tabelle
443                        } elseif ( ($fldclass == "Funktion" OR $fldclass == "Vegetationsmerkmal") AND $label != "") { // Kurze Anzeige
444                                if ($showkey) {echo "<span class='key' title='".$fldclass."'>(".$nutzid."-".$class.")</span> ";}
445                                if ($blabla = "") {
446                                        echo $label;
447                                } else {
448                                        echo "<span title='".$blabla."'>".$label."</span>";
449                                }
450                        } else { // ausfuehrlichere Anzeige
451                                echo $title; // NUA-Tabelle
452                                if ($class != "") { // NUA-SchlÃŒssel
453                                        echo ", ".$fldclass.": "; // Feldname
454                                        if ($showkey) {echo "<span class='key' title='".$fldclass."'>(".$nutzid."-".$class.")</span> ";}
455                                        if ($label != "") { // Bedeutung dazu wurde erfasst
456                                                if ($blabla = "") {
457                                                        echo $label;
458                                                } else {
459                                                        echo "<span title='".$blabla."'>".$label."</span>";
460                                                }
461                                        } else { // muss noch erfasst werden
462                                                echo $class." "; // SchlÃŒssel als Ersatz fÃŒr Bedeutung
463                                        }
464                                }
465                        }
466                        if ($info != "") { // manchmal ein zweites Zusatzfeld (wie entschlÃŒsseln?)
467                                echo ", ".$fldinfo."=".$info;
468                        }
469                        if ($zus != "") { // Zustand
470                                echo "\n\t\t<br>";
471                                if ($showkey) {echo "<span class='key'>(".$zus.")</span> ";}
472                                echo "<span title='Zustand'>";                         
473                                switch ($zus) {
474                                        case 2100: echo "Außer Betrieb, stillgelegt, verlassen"; break;
475                                        case 4000: echo "Im Bau"; break;
476                                        case 8000: echo "Erweiterung, Neuansiedlung"; break;
477                                        default: echo "Zustand: ".$zus; break;
478                                }
479                                echo "</span>";
480                        }
481                        if ($nam != "") {echo "<br>Name: ".$nam;}
482                        if ($bez != "") {echo "<br>Bezeichnung: ".$bez;}
483
484                echo "</td>";
485                echo "\n\t<td>";
486                        switch ($grupp) { // Icon nach 4 Objektartengruppen
487                                case "Siedlung":   $ico = "Abschnitt.png"; break;
488                                case "Verkehr":    $ico = "Strassen_Klassifikation.png"; break;
489                                case "Vegetation": $ico = "Wald.png"; break;
490                                case "GewÀsser":   $ico = "Wasser.png";        break;
491                                default:        $ico = "Abschnitt.png"; break;
492                        }
493                        // Icon ist auch im Druck sichtbar, class='noprint' ?           
494                        echo "<p class='nwlink'><img title='".$title."' src='ico/".$ico."' width='16' height='16' alt='NUA'></p>";
495                echo "</td>";
496        echo "\n</tr>";
497        $j++;
498}
499  E N D E   N U T Z U N G   C l a s s i c  */
500
501/* Status "Nutzung":
502
503 Die Classic-Tabelle "nutzung" ist eine Zusammenfassung aller Tabellen mit Nutzungs-FlÀchen
504 Die Classic-Tabelle "nutzung_meta" zeigt die Kategorie und Gruppe des Nutzungs-Abschnitts an.
505
506 Aus der norGIS-Struktur wird ersatzweise VORLÄUFIG die Tabelle "nutz_21" verwendet,
507 die das alte ALB-Format der Nutzungs-Abschnitte von FlurstÃŒcken simuliert.
508 Hier finden sich bereits verschnittene FlÀchen, aber die gml_id fehlt.
509
510 Die EntschlÃŒsselung der Nutzungsart in den verschiedenen ALKIS-Varianten ist darin unterentwickelt.
511 Diese ist eigentlich fÃŒr jede der getrennten Tabellen der Gruppe Nutzungsart individuell.
512 Die Classic-Lösung mit 2 Zusatzfeldern war schon sehr pauschalisiert, aber
513 durch die RÃŒck-Konvertierung in ALB-Strukturen in der norGIS-Version ist das zu stark vereinfacht.
514 z.B. wird "WohnbauflÀche" mit der Zusatzeigenschaft "Art der Bebauung": 'Offen'
515 nun zur Nutzungsart "Offen".
516 Durch JOIN auf die "alkis_elemente" mit einem Teil des SchlÃŒssels wird das zur "WohnbauflÀche, Offen".
517 Es sollte eine Tabellen-Struktur bereit gestellt werden, die auch aussagt, dass der Wert "Offen" zur
518 Zusatz-Eigenschaft "Art der Bebauung" gehört. Dazu muss das PostProcessing erweitert werden. */
519
520
521$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
522 FROM nutz_21 n JOIN nutz_shl s ON n.nutzsl = s.nutzshl
523 JOIN alkis_elemente e ON e.kennung = substring(n.nutzsl from 1 for 5)
524WHERE n.flsnr = $1 ORDER BY cast(n.fl AS integer) DESC;";
525// Flurstueckskennzeichen mit Trennzeichen im ALB-Format wie 'llgggg-fff-zzzzz/nnn'
526$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);
527$v = array($fskennzalb);
528$res = pg_prepare("", $sql);
529$res = pg_execute("", $v);
530if (!$res) {
531        echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
532        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = FS-Kennz = '".$fskennzalb."'</p>";}
533}
534
535$j=0;
536while($row = pg_fetch_array($res)) {
537        $flae=$row["fl"]; // BuchflÀche
538        $nutzsl=$row["nutzsl"]; // SchlÃŒssel
539        $nutzung=$row["nutzung"]; // Bezeichnung aus ALB-Tabelle, "fein"
540        $defi=$row["definition"]; // Langer Text mit Beschreibung
541        $title=htmlentities($defi, ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
542
543        echo "\n<tr>\n\t";
544                if ($j == 0) {
545                        echo "<td class='ll' title='Abschnitt der tats&auml;chlichen Nutzung'><img src='ico/Abschnitt.png' width='16' height='16' alt=''> Nutzung:</td>";
546                } else {
547                        echo "<td>&nbsp;</td>";
548                }
549                $absflaebuch = number_format($flae,0,",",".") . " m&#178;"; // Formatierte Abschnitts-Buch-FlÀche
550                echo "\n\t<td class='fla' title='Buchfl&auml;che des Abschnitts'>".$absflaebuch."</td>";
551
552                echo "\n\t<td class='lr' colspan='3' title='".$title."'>";
553                        if ($showkey) {echo "<span class='key'>(".$nutzsl.")</span> ";}
554                        echo $nutzung
555                ."</td>"
556                ."\n\t<td>";
557/*              // Derzeit ist keine Gruppe zugeordnet
558                        switch ($grupp) { // Icon nach 4 Objektartengruppen
559                                case "Siedlung":   $ico = "Abschnitt.png"; break;
560                                case "Verkehr":    $ico = "Strassen_Klassifikation.png"; break;
561                                case "Vegetation": $ico = "Wald.png"; break;
562                                case "GewÀsser":   $ico = "Wasser.png";        break;
563                                default:        $ico = "Abschnitt.png"; break;
564                        }
565                        // Icon ist auch im Druck sichtbar, class='noprint' ?           
566                        echo "<p class='nwlink'><img title='".$title."' src='ico/".$ico."' width='16' height='16' alt='NUA'></p>";
567*/
568                echo "</td>"
569        ."\n</tr>";
570        $j++;
571}
572pg_free_result($res);
573
574echo "\n<tr>" // Summenzeile
575        ."\n\t<td class='re' title='amtliche Fl&auml;che (Buchfl&auml;che)'>Fl&auml;che:</td>"
576        ."\n\t<td class='fla sum'>"
577        ."<span title='geometrisch berechnete Fl&auml;che = ".$fsgeomflaed."' class='flae'>".$fsbuchflaed."</span></td>";
578
579        // Flaeche und Link auf GebÀude-Auswertung
580        echo "\n\t<td colspan='3'>&nbsp;</td>\n\t<td>"
581                ."\n\t\t<p class='nwlink noprint'>" // Gebaeude-Verschneidung
582                        ."\n\t\t\t<a href='alkisgebaeudenw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
583                        if ($showkey) {echo "&amp;showkey=j";}
584                        if ($cnt_adressen > 0) { // wenn Adresse vorgekommen ist
585                                echo "' title='Geb&auml;udenachweis'>Geb&auml;ude ";
586                        } else { // GebÀude mit Adresse gibt es NICHT, das ist klar
587                                echo "' title='Suche Geb&auml;ude ohne Adresse auf dem Flurst&uuml;ck oder angrenzende Geb&auml;ude'>Suche ";
588                        }
589                        echo "<img src='ico/Haus.png' width='16' height='16' alt=''></a>"
590                ."\n\t\t</p>"
591        ."\n\t</td>"
592."\n</tr>";
593// ENDE  N U T Z U N G
594
595
596// K L A S S I F I Z I E R U N G
597
598// Klassifizierung nach  W a s s e rrecht
599/*
600        // Tabelle immer leer?
601$sql="SELECT h.v, w.artderfestlegung, st_area(st_intersection(w.wkb_geometry, f.wkb_geometry)) AS schnittflae, f.amtlicheflaeche, st_area(f.wkb_geometry) as fsgeomflae
602FROM ax_flurstueck f
603JOIN ax_klassifizierungnachwasserrecht w
604 ON st_intersects(w.wkb_geometry, f.wkb_geometry) AND st_area(st_intersection(w.wkb_geometry, f.wkb_geometry)) > 0.05
605LEFT JOIN alkis_wertearten h
606 ON cast(w.artderfestlegung AS character varying) = h.k AND h.element='ax_klassifizierungnachwasserrecht' AND h.bezeichnung='artderfestlegung'
607WHERE f.gml_id = $1 AND f.endet IS NULL AND w.endet IS NULL ORDER BY schnittflae DESC";
608
609$v = array($gmlid);
610$res = pg_prepare("", $sql);
611$res = pg_execute("", $v);
612if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Wasser</p>\n";}
613
614if(!empty($res) && pg_num_rows($res) > 0) {
615        echo "\n<table>";
616        while($row = pg_fetch_array($res)) {
617                $fsbuchflae=$row["amtlicheflaeche"];
618                $fsgeomflae=$row["fsgeomflae"];
619                $the_Xfactor=$fsbuchflae / $fsgeomflae; // ++ nicht in Loop, ist konst. je FS
620                $absflaebuch = $row['schnittflae'] * $the_Xfactor;
621                echo"\n<tr><td></td><td></td></tr>"
622                ."\n<tr><td><b>FlÀche</b></td><td class='klassifizerung'><span class=''>".number_format(intval($absflaebuch),0,",",".")." m²</span></td></tr>"       
623                ."\n<tr><td><b>Bezeichnung</b></td><td class='klassifizerung'><span class=''>".$row['v']."</span></td></tr>"
624                ."\n<tr><td></td><td></td></tr>";       
625        }
626        echo "</table>";
627}
628// Klassifizierung nach  S t r a ß e n recht
629        // Tabelle immer leer?
630*/
631
632// B o d e n s c h À t z u n g
633// ---------------------------
634// Tabelle "klas_3x" (norbit-ALB): Dort fehlen Bodenart und Zustandsstufe, es ist aber bereits auf BuchflÀche umgerechnet.
635
636// BodenschÀtzungs-Abschnitte mit FlurstÌcken verschneiden, Spalten entschlÌsseln
637$sql="SELECT
638 kulturart.k AS kulturartk, kulturart.v AS kulturartv,
639 bodenart.k  AS bodenartk,  bodenart.v  AS bodenartv,
640 zustbod.v AS zustbodv,
641 b.entstehungsartoderklimastufewasserverhaeltnisse AS entsteh, b.sonstigeangaben,
642 b.bodenzahlodergruenlandgrundzahl as bodenzahl, b.ackerzahlodergruenlandzahl AS ackerzahl,
643 b.jahreszahl, st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) AS schnittflae
644FROM ax_flurstueck f
645JOIN 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
646LEFT JOIN alkis_wertearten AS bodenart  ON cast(b.bodenart  AS character varying) = bodenart.k  AND bodenart.element='ax_bodenschaetzung'  AND bodenart.bezeichnung='bodenart'
647LEFT JOIN alkis_wertearten AS kulturart ON cast(b.kulturart AS character varying) = kulturart.k AND kulturart.element='ax_bodenschaetzung' AND kulturart.bezeichnung='kulturart'
648LEFT JOIN alkis_wertearten AS zustbod   ON cast(b.zustandsstufeoderbodenstufe AS character varying) = zustbod.k AND zustbod.element='ax_bodenschaetzung' AND zustbod.bezeichnung='zustandsstufeoderbodenstufe'
649WHERE f.gml_id = $1 AND f.endet IS NULL AND b.endet IS NULL ORDER BY schnittflae DESC";
650
651$v = array($gmlid);
652$res = pg_prepare("", $sql);
653$res = pg_execute("", $v);
654if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Boden</p>\n";}
655
656$gesertragsmz = 0; // Gesamt-ErtragsMesszahl
657$klasflae = 0; // Summe klassifizierte FlÀche
658$j=0;
659
660if(!empty($res) && pg_num_rows($res) > 0) {
661
662        while ($row = pg_fetch_array($res)) {
663                $kulturartk=$row['kulturartk']; // Key  -
664                $kulturartv=$row['kulturartv']; //              - Value
665                // 1000="Ackerland (A)", 2000="Acker-GrÃŒnland (AGr)", 3000="GrÃŒnland (Gr)", 4000="GrÃŒnland-Acker (GrA)"             
666                if (substr($kulturartv, 0, 3) == 'Ack') { // A
667                        $kbez1="Bodenzahl";
668                        $kbez2="Ackerzahl";
669                } else { // Gr
670                        $kbez1="Gr&uuml;nlandgrundzahl";
671                        $kbez2="Gr&uuml;nlandzahl";
672                }
673                $absflae = $row['schnittflae'];
674                $absbuchflae = $absflae * $the_Xfactor;
675                $klasflae+=$absbuchflae;
676                $ertragszahl = intval($absbuchflae * $row['ackerzahl'] / 100);
677                $gesertragsmz+=$ertragszahl;
678        //      $absflaedis = number_format($absflae,0,",",".")." m&#178;";  // als Tool-Tip ?
679                $absbuchflaedis = number_format($absbuchflae,0,",",".")." m&#178;";
680                $boedenzahl=ltrim($row['bodenzahl'], '0');
681                $ackerzahl=ltrim($row['ackerzahl'], '0');
682                $jahr=$row['jahreszahl'];
683
684                // 2x Array mit SchlÃŒsseln. PostNAS fÃŒllt es nicht, wenn als "integer[]" definiert.
685                $entsteh=$row['entsteh'];
686                $sonst=$row['sonstigeangaben'];
687
688                // Sp. 1/4
689                if ($j == 0) {
690                        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>";
691                } else {
692                        echo "\n<tr>\n\t<td>&nbsp;</td>";
693                }
694
695                // Sp. 2/4
696                echo "\n\t<td class='fla' title='Ertragsmesszahl: Produkt von ".$kbez2."/100 und Fl&auml;che.'>EMZ ".$ertragszahl."</td>";
697
698                // Sp. 3/4 - unterteilt in 3 Sp.
699                echo "\n\t<td class='re' title='Fl&auml;che des Sch&auml;tzungsabschnitts'>".$absbuchflaedis."</td>";
700                echo "\n\t<td class='lr'><span title='".$kbez1."'>".$boedenzahl."</span>/<span title='".$kbez2."'>".$ackerzahl."</span></td>";
701                echo "\n\t<td class='lr'>";
702
703                        if ($showkey) {echo "\n\t\t<span class='key'>(".$kulturartk.")</span> ";}
704                        echo "\n\t\t<span title='Kulturart'>".$kulturartv."</span> ";
705
706                        if ($showkey) {echo "\n\t\t<span class='key'>(".$row['bodenartk'].")</span> ";}
707                        echo "\n\t\t<span title='Bodenart'>".$row['bodenartv']."</span> ";
708
709                        echo "\n\t\t<span title='Zustandsstufe'>".$row['zustbodv']."</span> ";
710
711                        // ARRAYs auflösen ohne den SchÀtzungs-Abschnitt mehrfach aufzulisten
712                        if ($entsteh <> '') {
713                                $ent="'".str_replace(",", "','", trim($entsteh, "{}"))."'"; // als Liste fÃŒr SQL "WHERE IN ()"
714                                echo "\n\t\t <span title='Enststehungsart oder Klimastufe, Wasserverh&auml;ltnisse'>";
715                                        if ($showkey) {echo "\n\t\t <span class='key'>(".$ent.")</span> ";}
716                                        werteliste ('ax_bodenschaetzung', 'entstehungsartoderklimastufewasserverhaeltnisse', $ent);
717                                echo "</span>";
718                        }
719                        if ($sonst <> '') {
720                                $son="'".str_replace(",", "','", trim($sonst, "{}"))."'";
721                                echo "\n\t\t <span title='Sonstige Angaben'>";
722                                        if ($showkey) {echo "\n\t\t <span class='key'>(".$son.")</span> ";}
723                                        werteliste ('ax_bodenschaetzung', 'sonstigeangaben', $son);
724                                echo "</span>";
725                        }
726
727                        if ($jahr <> '') {
728                                echo "\n\t\t<span title='Jahreszahl'>".$jahr."</span>";
729                        }
730                echo "\n\t</td>";
731
732                // Sp. 4/4 - leer, keine Links
733                echo "\n\t<td>&nbsp;</td>\n</tr>";
734                $j++;
735        }
736
737        // Summenzeile
738        $klasflaedis = number_format($klasflae,0,",",".")." m&#178;";
739        echo "\n<tr>\n\t<td class='re'>Ertragsmesszahl:</td>"
740        ."\n\t<td class='fla sum' title='Summe der Ertragsmesszahlen f&uuml;r dies Flurst&uuml;ck'>".$gesertragsmz."</td>"
741        ."\n\t<td class='re'>".$klasflaedis."</td>\n\t<td colspan='3'>&nbsp;</td>\n</tr>";
742
743//} else { // Result ist leer
744//      if ($debug > 1) {
745//              echo "\n<p class='dbg'>Keine BodenschÀtzung gefunden</p>";
746//              if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
747//      }
748}
749
750// H i n w e i s  auf Bodenneuordnung oder eine strittige Grenze
751// b.name, b.artderfestlegung,
752$sql_boden ="SELECT a.k AS wert, a.v AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez,
753b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key
754FROM ax_bauraumoderbodenordnungsrecht b
755LEFT JOIN alkis_wertearten a ON cast(b.artderfestlegung AS character varying)=a.k AND a.element='ax_bauraumoderbodenordnungsrecht' AND a.bezeichnung='artderfestlegung'
756LEFT JOIN ax_dienststelle d ON b.stelle=d.stelle
757WHERE b.endet IS NULL AND d.endet IS NULL 
758AND (ST_Within((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL ), wkb_geometry)
759 OR ST_Overlaps((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL), wkb_geometry));";
760
761pg_prepare($con, "bodeneuordnung", $sql_boden);
762$res_bodeneuordnung = pg_execute($con, "bodeneuordnung", array($gmlid));
763if (!$res_bodeneuordnung) {
764        echo "\n<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>";
765        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_boden."<br>$1 = gml_id = '".$gmlid."'</p>";}
766}
767
768$sql_str="SELECT gml_id FROM ax_besondereflurstuecksgrenze WHERE endet IS NULL AND 1000 = ANY(artderflurstuecksgrenze)
769AND ST_touches((SELECT wkb_geometry FROM ax_flurstueck WHERE gml_id = $1 AND endet IS NULL),wkb_geometry);";
770
771pg_prepare($con, "strittigeGrenze", $sql_str);
772$res_strittigeGrenze = pg_execute($con, "strittigeGrenze", array($gmlid));
773if (!$res_strittigeGrenze) {
774        echo "\n<p class='err'>Fehler bei strittige Grenze</p>";
775        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_str."<br>$1 = gml_id = '".$gmlid."'</p>";}
776}
777
778if (pg_num_rows($res_bodeneuordnung) > 0 OR pg_num_rows($res_strittigeGrenze) > 0) {
779        echo "\n<tr>"
780        ."\n\t<td title='Hinweise zum Flurst&uuml;ck'><h6><img src='ico/Hinweis.png' width='16' height='16' alt=''> "
781        ."Hinweise:</h6></td>\n\t<td colspan='5'>&nbsp;</td>"
782        ."\n</tr>";
783
784        if (pg_num_rows($res_bodeneuordnung) > 0) {
785
786                while ($row = pg_fetch_array($res_bodeneuordnung)) { // 3 Zeilen je Verfahren
787
788                        // Zeile 1 - kommt immer, darum hier den Link
789                        echo "\n<tr title='Bau-, Raum- oder Bodenordnungsrecht'>"
790                                ."\n\t<td>Bodenrecht</td>"
791                                ."\n\t<td class='re'>Festlegung: </td>" // "Art der Festlegung" zu lang
792                                ."\n\t<td colspan='3'>";
793                                        if ($showkey) {echo "<span class='key'>(".$row['wert'].")</span> ";}
794                                        echo $row['art_verf']
795                                ."</td>";
796                                // LINK:
797                                echo "\n\t<td>"
798                                        ."\n\t\t<p class='nwlink noprint'>"
799                                        ."\n\t\t\t<a href='alkisbaurecht.php?gkz=".$gkz."&amp;gmlid=".$row['verf_gml'];
800                                        if ($showkey) {echo "&amp;showkey=j";}
801                                        echo "' title='Bau-, Raum- oder Bodenordnungsrecht'>Recht <img src='ico/Gericht.png' width='16' height='16' alt=''></a>"
802                                        ."\n\t\t</p>"           
803                                ."\n\t</td>"
804                        ."\n</tr>";
805
806                        // Zeile 2
807                        $dstell=$row['stelle_key'];
808                        if ($dstell != "") { // Kann auch leer sein
809                                echo "\n<tr title='Flurbereinigungsbeh&ouml;rde'>"
810                                        ."\n\t<td>&nbsp;</td>"
811                                        ."\n\t<td class='re'>Dienststelle: </td>"
812                                        ."\n\t<td colspan='3'>";
813                                                if ($showkey) {echo "<span class='key'>(".$dstell.")</span> ";}
814                                                echo $row['stelle_bez']
815                                        ."</td>"
816                                        ."\n\t<td>&nbsp;</td>"
817                                ."\n</tr>";
818                        }
819
820                        // Zeile 3
821                        $vbez=$row['verf_bez']; // ist nicht immer gefÃŒllt
822                        $vnam=$row['verf_name']; // noch seltener
823                        if ($vbez != "") {
824                                echo "\n<tr title='Verfahrensbezeichnung'>"
825                                        ."\n\t<td>&nbsp;</td>"
826                                        ."\n\t<td class='re'>Verfahren: </td>"
827                                        ."\n\t<td colspan='3'>";
828                                                if ($vnam == "") {
829                                                        echo $vbez; // nur die Nummer
830                                                } else {        // Name oder beides
831                                                        if ($showkey) {echo "<span class='key'>(".$vbez.")</span> ";}
832                                                        echo $vnam;
833                                                }
834                                        echo "</td>"
835                                        ."\n\t<td>&nbsp;</td>"
836                                ."\n</tr>";
837                        }
838                }
839        }
840        if (pg_num_rows($res_strittigeGrenze) > 0) { // 1 Zeile
841                echo "\n<tr>\n<td>Strittige Grenze:</td>"
842                ."<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>"
843                ."\n<td>&nbsp;</td>\n</tr>";
844        }
845}
846echo "\n</table>";
847
848// G R U N D B U C H
849echo "\n\n<table class='outer'>"
850        ."\n<tr>"
851                ."\n\t<td>"
852                        ."\n\t\t<h3 id='gb'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>"
853                ."\n\t</td>"
854                ."\n\t<td>"
855                        ."\n\t\t<p class='nwlink noprint'>"
856                                ."\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;berbu=".$berbu;
857                                if ($showkey) {echo "&amp;showkey=j";}
858
859                                // Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
860                                if ($eig=="j") {
861                                        echo "&amp;eig=n#gb' title='Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
862                                } else {
863                                        echo "&amp;eig=j#gb' title='Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
864                                        ."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
865                                }
866                        echo "\n\t\t</p>"
867                ."\n\t</td>"
868        ."\n</tr>"
869."\n</table>";
870
871// B U C H U N G S S T E L L E N  zum FS (istGebucht)
872$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer as lfd, s.zaehler, s.nenner, s.nummerimaufteilungsplan as nrpl, s.beschreibungdessondereigentums as sond, b.v AS bart, b.d AS barttitle
873FROM ax_flurstueck f JOIN ax_buchungsstelle s ON s.gml_id=f.istgebucht
874LEFT JOIN alkis_wertearten b ON cast(s.buchungsart AS character varying)=b.k AND b.element='ax_buchungsstelle' AND b.bezeichnung='buchungsart'
875WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL ORDER BY s.laufendenummer;";
876
877$v = array($gmlid);
878$ress = pg_prepare("", $sql);
879$ress = pg_execute("", $v);
880if (!$ress) {
881        echo "\n<p class='err'>Keine Buchungsstelle.</p>";
882        if ($debug > 1) {
883                echo "<p class='dbg'>Fehler:".pg_result_error($ress)."</p>";
884                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
885        }
886}
887$bs=0; // Z.BuchungsStelle
888while($rows = pg_fetch_array($ress)) {  // Schleife Buchungs-Stelle
889        $gmls=$rows["gml_id"]; // gml b-Stelle
890        $lfd=$rows["lfd"]; // BVNR
891        $barttitle=htmlentities($rows["barttitle"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
892
893        // B U C H U N G S B L A T T  zur Buchungsstelle (istBestandteilVon)
894        $sql="SELECT b.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, wb.v AS blattartv, wb.d AS blattartd, z.bezeichnung
895        FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON b.gml_id=s.istbestandteilvon
896        LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk
897        LEFT JOIN alkis_wertearten wb ON cast(b.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart'
898        WHERE s.gml_id = $1 AND s.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL
899        ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung ;";
900
901        $v=array($gmls);
902        $resg=pg_prepare("", $sql);
903        $resg=pg_execute("", $v);
904        if (!$resg) {
905                echo "\n<p class='err'>Kein Buchungsblatt.</p>";
906                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmls."'</p>";}
907        }
908        $bl=0; // Z.Blatt
909        while($rowg = pg_fetch_array($resg)) {
910                $gmlg=$rowg["gml_id"];
911                $beznam=$rowg["bezeichnung"];
912                $blattkeyg=$rowg["blattart"]; // Key
913                $blattartg=$rowg["blattartv"]; // Value
914                $blatt=$rowg["blatt"];
915                echo "\n<hr>"
916                ."\n<table class='outer'>"
917                ."\n<tr>"; // 1 row only
918                        echo "\n\t<td>"; // Outer linke Spalte:
919
920                                // Rahmen mit GB-Kennz
921                                if ($blattkeyg == 1000) {
922                                        echo "\n\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
923                                }else {
924                                        echo "\n\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // GB fiktiv = Rahmen dotted
925                                }
926                                        echo "\n\t\t<tr>\n\t\t\t<td class='head'>Bezirk</td>"
927                                                ."\n\t\t\t<td class='head' title='".$rowg["blattartd"]."'>";
928                                                if ($showkey) {echo "<span class='key'>".$blattkeyg."</span>&nbsp;";}
929                                                echo $blattartg."</td>"
930                                                ."\n\t\t\t<td class='head'>Lfd-Nr.</td>"
931                                                ."\n\t\t\t<td class='head'>Buchungsart</td>"
932                                        ."\n\t\t</tr>"
933                                        ."\n\t\t<tr>"
934                                                ."\n\t\t\t<td title='Grundbuchbezirk'>";
935                                                if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span><br>";}
936                                                echo $beznam."&nbsp;</td>"
937                                                ."\n\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
938                                                ."\n\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
939                                                ."\n\t\t\t<td title='".$barttitle."'>";
940                                                if ($showkey) {echo "<span class='key'>".$rows["buchungsart"]."</span><br>";}
941                                                echo $rows["bart"]."</td>"
942                                        ."\n\t\t</tr>"
943                                ."\n\t\t</table>";
944
945                                // Miteigentumsanteil
946                                if ($rows["zaehler"] <> "") {
947                                        echo "\n<p class='ant'>".$rows["zaehler"]."/".$rows["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
948                                }
949                        echo "\n\t</td>\n\t<td>"; // Outer rechte Spalte: NW-Links
950
951                                echo "\n\t\t<p class='nwlink noprint'>weitere Auskunft:<br>";
952                                        if ($showkey) {echo "<span class='key'>".$blattkeyg."</span> ";}
953                                        echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg;
954                                                if ($showkey) {echo "&amp;showkey=j";}
955                                                echo "#bvnr".$lfd; // Die # hinter die &-Paramter
956                                                if ($blattkeyg == 1000) {
957                                                        echo "' title='Grundbuchnachweis mit kompletter Eigent&uuml;merangabe'>";
958                                                } else {
959                                                        echo "' title='Grundbuchnachweis'>";
960                                                }
961                                                echo $blattartg." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
962                                        ."</a>"
963                                ."\n\t\t</p>";
964
965                                // berechtigte Buchungstellen (im rechten Teil der Àußeren Tab.
966                                $cnt_ber = ber_bs_hinw($gmls, $gmlid); // Hinweis ausgeben, zÀhlen
967
968                        echo "\n\t</td>" // ende aussen rechts
969                ."\n</tr>"
970                ."\n</table>";
971
972                // +++ Weitere Felder ausgeben? BeschreibungDesUmfangsDerBuchung
973                if ($rows["sond"] != "") {
974                        echo "\n<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum<br>".$rows["sond"]."</p>";
975                }
976                if ($rows["nrpl"] != "") {
977                        echo "\n<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$rows["nrpl"]."</span> im Aufteilungsplan.</p>";
978                }
979
980                // E I G E N T U E M E R, zum GB
981                // Person <-benennt< AX_Namensnummer  >istBestandteilVon-> AX_Buchungsblatt
982                if ($eig=="j") { // Wahlweise mit/ohne EigentÃŒmer
983                        $n = eigentuemer($gmlg, false, ""); // hier ohne Adresse
984                        if ($n == 0) {
985                                if ($blattkeyg == 1000) {
986                                        echo "\n<p class='err'>Keine Namensnummer gefunden.</p>";
987                                } else {
988                                        echo "\n<p>ohne Eigent&uuml;mer.</p>";
989                                }
990                        }
991                }
992
993                // B e r e c h t i g t e   B u c h u n g e n  ... zu dieser Buchungs-Stelle. Optional.
994                if ($berbu=="j") { // Wahlweise anzeigen
995                        echo "\n<hr>\n<h3 id='berbu'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Berechtigte Buchungen</h3>"
996                        ."\n<p>".$cnt_ber." Buchungen mit Rechten an der Buchung ".$lfd." auf ".$blattartg." ".$blatt." von ".$beznam.":</p>";
997                        ber_bs_anz($gmls, $eig); // berechtigte Buchungstellen und GB-BlÀtter Anzeigen, und ggf. auch mit EigentÃŒmer
998                }
999                $bl++; // ZÀhl Blatt
1000        }
1001        if ($bl == 0) {echo "\n<p class='err'>Kein Buchungsblatt zur Buchungstelle gefunden.</p>";}
1002        $bs++; // ZÀhl Buchungs-Stelle
1003}
1004
1005pg_free_result($resg);
1006if ($bs == 0) {echo "\n<p class='err'>Keine Buchungstelle zum Flurst&uuml;ck gefunden.</p>";}
1007pg_close($con);
1008echo <<<END
1009
1010<div class='buttonbereich noprint'>
1011<hr>
1012        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
1013        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
1014        <a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_fs.png" width="32" height="16" alt="Export"></a>&nbsp;
1015</div>
1016END;
1017footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig."&amp;berbu=".$berbu);
1018?>
1019</body>
1020</html>
Note: See TracBrowser for help on using the repository browser.