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

Revision 399, 45.8 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Navigation für Mapbender 2: Input Validation für alle Parameter. Kleine Korrekturen.

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