source: trunk/info/info/alkisn/alkishaus.php @ 431

Revision 430, 19.9 KB checked in by frank.jaeger, 21 months ago (diff)

ALKIS-Auskunft angepasst an PHP 8

Line 
1<?php
2/*      alkishaus.php
3
4        ALKIS-Auskunft
5        Author: Frank JÀger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
6
7        Daten zu EINEM ALKIS-GebÀude-Objekt
8
9        Version:
10        2016-02-24 Version fÃŒr norGIS-ALKIS-Import
11        ....
12        2020-12-01 Darstellung der Datenerhebung, Klammern um SchlÃŒsselwerte
13        2020-12-02 Verschnitt GebÀude / FlurstÃŒcke
14        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
15        2020-12-15 Input-Validation und Strict Comparisation (===)
16        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche). Gemeinde in Adresse
17        2022-01-13 Neue Functions LnkStf(), DsKy()
18        2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
19ToDo:
20        - per Relation dazugehörige Bauwerke (z.B. Überdachung) suchen, ax_sonstigesbauwerkodersonstigeeinrichtung.gehoertzu
21        - Template im WMS auf Ebene GebÀude hierhin verknÃŒpfen.
22*/
23ini_set("session.cookie_httponly", 1);
24session_start();
25$allfld = "n"; $showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
26$cntget = extract($_GET); // Parameter in Variable umwandeln
27
28// strikte Validierung aller Parameter
29if (isset($gmlid)) {
30        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
31} else {
32        die("Fehlender Parameter");
33}
34if (isset($gkz)) {
35        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
36} else {
37        die("Fehlender Parameter");
38}
39if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
40if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
41if (!preg_match('#^[j|n]{0,1}$#', $allfld)) {die ("Eingabefehler allfld");}
42if ($allfld === "j") {$allefelder=true;} else {$allefelder=false;}
43if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
44
45include "alkis_conf_location.php";
46include "alkisfkt.php";
47
48echo <<<END
49<!doctype html>
50<html lang="de">
51<head>
52        <meta charset="utf-8">
53        <meta name="viewport" content="width=device-width, initial-scale=1.0">
54        <title>ALKIS Daten zum Haus</title>
55        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
56        <link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
57        <style type='text/css' media='print'> td.mittelspalte {width: 190px;} </style>
58</head>
59<body>
60END;
61
62$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
63$dbg=$debug;
64if ($nodebug === "j") {$dbg=0;}
65
66$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkishaus.php'");
67if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
68
69// G e b À u d e
70// ... g.qualitaetsangaben,
71$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, g.anzahlderunterirdischengeschosse AS aug,
72g.lagezurerdoberflaeche, g.dachgeschossausbau, g.zustand, array_to_string(g.weiteregebaeudefunktion, ',') AS wgf, g.dachform, g.hochhaus, g.objekthoehe,
73g.geschossflaeche, g.grundflaeche, g.umbauterraum, g.baujahr, g.dachart,
74h.beschreibung AS bbauw, h.dokumentation AS dbauw, u.beschreibung AS bfunk, u.dokumentation AS dfunk, z.beschreibung AS zustandv, z.dokumentation AS zustandd, d.beschreibung AS bdach,
75a.beschreibung AS dgaus, o.beschreibung AS oflv, o.dokumentation AS ofld,
76round(st_area(g.wkb_geometry)::numeric,2) AS gebflae
77FROM ax_gebaeude g
78LEFT JOIN ax_bauweise_gebaeude h ON g.bauweise = h.wert
79LEFT JOIN ax_gebaeudefunktion u ON g.gebaeudefunktion = u.wert
80LEFT JOIN ax_zustand_gebaeude z ON g.zustand = z.wert
81LEFT JOIN ax_dachform d ON g.dachform = d.wert
82LEFT JOIN ax_dachgeschossausbau_gebaeude a ON g.dachgeschossausbau = a.wert
83LEFT JOIN ax_lagezurerdoberflaeche_gebaeude o ON g.lagezurerdoberflaeche = o.wert
84WHERE g.gml_id= $1 AND g.endet IS NULL;";
85
86$v = array($gmlid);
87$resg = pg_prepare($con, "", $sqlg);
88$resg = pg_execute($con, "", $v);
89if (!$resg) {
90        echo "\n<p class='err'>Fehler bei Geb&auml;ude.<br>".pg_last_error()."</p>";
91        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
92}
93if ($dbg > 0) {
94        $zeianz=pg_num_rows($resg);
95        if ($zeianz > 1){
96                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Geb&auml;ude-Objekt!</p>";
97                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlg), ENT_QUOTES, "UTF-8")."</p>";}
98        }
99}
100
101// Balken
102echo "\n<p class='balken geb'>ALKIS Haus ".$gmlid."&nbsp;</p>"
103."\n<h2><img src='ico/Haus.png' width='16' height='16' alt=''> Haus (Geb&auml;ude)</h2>\n<hr>";
104
105echo "<p class='nwlink noprint'>" // Umschalter: auch leere Felder
106."Umschalten: <a class='nwlink' href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf();
107if ($allefelder) {
108        echo "&amp;allfld=n'>nur Felder mit Inhalt";
109} else {
110        echo "&amp;allfld=j'>auch leere Felder";
111}
112echo "</a></p>";
113
114if (!($rowg = pg_fetch_assoc($resg))) {
115        echo "\n<p class='err'><br>Kein Geb&auml;ude gefunden</p>";
116        die ("Abbruch");
117}
118
119echo "\n<table class='geb'>"
120."\n<tr>\n"
121        ."\n\t<td class='head' title=''>Attribut</td>"
122        ."\n\t<td class='head mittelspalte' title=''>Wert</td>"
123        ."\n\t<td class='head' title=''>"
124                ."\n\t\t<p class='erklk'>Erkl&auml;rung Kategorie</p>"
125                ."\n\t\t<p class='erkli'>Erkl&auml;rung Inhalt</p>"
126        ."\n\t</td>"
127."\n</tr>";
128
129$aog=$rowg["aog"];
130$aug=$rowg["aug"];
131$hoh=$rowg["hochhaus"];
132if (is_null($rowg["name"])) {
133        $nam="";
134} else {
135        $nam=trim(trim($rowg["name"], "{}"), '"'); // GebÀude-Name ist ein Array.
136}
137
138// Mehrfachbelegung theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum.
139$kfunk=$rowg["gebaeudefunktion"];
140$bfunk=$rowg["bfunk"];
141$dfunk=$rowg["dfunk"];
142
143$baw=$rowg["bauweise"];
144$bbauw=$rowg["bbauw"];
145$dbauw=$rowg["dbauw"];
146
147$ofl=$rowg["lagezurerdoberflaeche"];
148$oflv=$rowg["oflv"];
149$ofld=$rowg["ofld"];
150
151$dga=$rowg["dachgeschossausbau"]; // Key
152$dgav=$rowg["dgaus"];           // Value
153
154$zus=$rowg["zustand"];          // Key
155$zusv=$rowg["zustandv"];        // Value
156$zusd=$rowg["zustandd"];        // Description
157
158$wgf=$rowg["wgf"];                      // Array-> kommagetr. Liste
159
160$daf=$rowg["dachform"];         // Key
161$dach=$rowg["bdach"];           // Value
162
163$hho=$rowg["objekthoehe"];
164$gfl=$rowg["geschossflaeche"];
165$grf=$rowg["grundflaeche"];
166$ura=$rowg["umbauterraum"];
167$bja=$rowg["baujahr"];
168$daa=$rowg["dachart"];
169
170if (($nam != "") OR $allefelder) {
171        echo "\n<tr>"
172                ."\n\t<td class='li'>Name</td>"
173                ."\n\t<td>".$nam."</td>"
174                ."\n\t<td>"
175                        ."\n\t\t<p class='erklk'>'Name' ist der Eigenname oder die Bezeichnung des Geb&auml;udes."
176                ."\n\t</td>"
177        ."\n</tr>";
178}
179
180// 0 bis N   L a g e bezeichnungen mit Haus- oder Pseudo-Nummer
181
182// HAUPTgebÀude
183$sqll ="SELECT 'm' AS ltyp, lh.gml_id AS gmllag, sh.lage, sh.bezeichnung, lh.hausnummer, '' AS laufendenummer, ph.bezeichnung AS gemeinde
184FROM ax_gebaeude gh
185JOIN ax_lagebezeichnungmithausnummer lh ON lh.gml_id=ANY(gh.zeigtauf)
186JOIN ax_lagebezeichnungkatalogeintrag sh ON lh.kreis=sh.kreis AND lh.gemeinde=sh.gemeinde AND lh.lage=sh.lage
187LEFT JOIN ax_gemeinde ph ON lh.land=ph.land AND lh.regierungsbezirk=ph.regierungsbezirk AND lh.kreis=ph.kreis AND lh.gemeinde=ph.gemeinde ".UnqKatAmt("lh","ph")
188."WHERE gh.gml_id= $1 AND gh.endet IS NULL AND lh.endet IS NULL AND sh.endet IS NULL";
189
190// oder NEBENgebÀude
191$sqll.=" UNION
192SELECT 'p' AS ltyp, ln.gml_id AS gmllag, sn.lage, sn.bezeichnung, ln.pseudonummer AS hausnummer, ln.laufendenummer, pn.bezeichnung AS gemeinde
193FROM ax_gebaeude gn
194JOIN ax_lagebezeichnungmitpseudonummer ln ON ln.gml_id=gn.hat
195JOIN ax_lagebezeichnungkatalogeintrag sn ON ln.kreis=sn.kreis AND ln.gemeinde=sn.gemeinde AND ln.lage=sn.lage
196LEFT JOIN ax_gemeinde pn ON ln.land=pn.land AND ln.regierungsbezirk=pn.regierungsbezirk AND ln.kreis=pn.kreis AND ln.gemeinde=pn.gemeinde ".UnqKatAmt("ln","pn")
197."WHERE gn.gml_id= $1 AND gn.endet IS NULL AND ln.endet IS NULL AND sn.endet IS NULL ";
198
199$sqll.="ORDER BY bezeichnung, hausnummer ;";
200
201$v = array($gmlid);
202$resl = pg_prepare($con, "", $sqll);
203$resl = pg_execute($con, "", $v);
204if (!$resl) {
205        echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>";
206        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";}
207}
208$zhsnr=0;
209while($rowl = pg_fetch_assoc($resl)) { // LOOP: Lagezeilen
210        $zhsnr++;
211        $ltyp=$rowl["ltyp"]; // Lagezeilen-Typ
212        $skey=$rowl["lage"]; // Str.-Schluessel
213        $snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); // -Name
214        $hsnr=$rowl["hausnummer"];
215        $hlfd=$rowl["laufendenummer"];
216        $gemeinde=$rowl["gemeinde"];
217        $gmllag=$rowl["gmllag"];
218
219        if ($zhsnr === 1) {
220                echo "\n<tr>"
221                        ."\n\t<td class='li' title='Lage mit Hausnummer oder Pseudonummer'>Adresse</td>"
222                        ."\n\t<td class='fett'>";
223        }
224        echo "\n\t\t<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''>&nbsp;".DsKy($skey, 'Stra&szlig;en-*');             
225        echo "\n\t\t<a title='Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp.LnkStf()."'>".$snam."&nbsp;".$hsnr;
226                if ($ltyp === "p") {echo ", lfd.Nr ".$hlfd;}
227        echo "</a>, ".$gemeinde."<br>";
228} // Ende Loop Lagezeilen m.H.
229if ($zhsnr > 0) {echo "\n\t</td>\n\t<td>&nbsp;</td>\n</tr>";}
230pg_free_result($resl);
231
232// GebÀudefunktion
233echo "\n<tr>"
234        ."\n\t<td class='li'>Geb&auml;udefunktion</td>"
235        ."\n\t<td class='fett'>".DsKy($kfunk, 'Geb&auml;udefunktion-*').$bfunk."</td>"
236        ."\n\t<td>"
237                ."\n\t\t<p class='erklk'>'Geb&auml;udefunktion' ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'</p>"
238                ."\n\t\t<p class='erkli'>".$dfunk."</p>"
239        ."</td>"
240."\n</tr>";
241
242// Bauweise
243if ($baw != "" OR $allefelder) {
244        echo "\n<tr>"
245        ."\n\t<td class='li'>Bauweise</td>"
246        ."\n\t<td class='fett'>".DsKy($baw, 'Bauweise-*').$bbauw."</td>"
247        ."\n\t<td>"
248                ."\n\t\t<p class='erklk'>'Bauweise' ist die Beschreibung der Art der Bauweise.</p>"
249                ."\n\t\t<p class='erkli'>".$dbauw."</p>"
250        ."\n\t</td>\n</tr>";
251}
252
253// Geschosse
254if ($aog != "" OR $allefelder) {
255        echo "\n<tr>"
256        ."\n\t<td class='li'>Geschosse</td>"
257        ."\n\t<td class='fett'>".$aog."</td>"
258        ."\n\t<td>"
259                ."\n\t\t<p class='erklk'>Anzahl oberirdischer Geschosse.</p>"
260        ."\n\t</td>\n</tr>";
261}
262
263// U-Geschosse
264if ($aug != "" OR $allefelder) {
265        echo "\n<tr>"
266        ."\n\t<td class='li'>U-Geschosse</td>"
267        . "\n\t<td class='fett'>".$aug."</td>"
268        ."\n\t<td>"
269                ."\n\t\t<p class='erklk'>Anzahl unterirdischer Geschosse.</p>"
270        ."\n\t</td>\n</tr>";
271}
272
273// Hochhaus
274if ($hoh != "" OR $allefelder) {
275        echo "\n<tr>"
276        ."\n\t<td class='li'>Hochhaus</td>"
277        ."\n\t<td class='fett'>".$hoh."</td>"
278        ."\n\t<td>"
279                ."\n\t\t<p class='erklk'>'Hochhaus' ist ein Geb&auml;ude, das nach Geb&auml;udeh&ouml;he und Auspr&auml;gung als Hochhaus zu bezeichnen ist. F&uuml;r Geb&auml;ude im Geschossbau gilt dieses i.d.R. ab 8 oberirdischen Geschossen, f&uuml;r andere Geb&auml;ude ab einer Geb&auml;udeh&ouml;he von 22 m."
280        ."\n\t</td>\n</tr>";
281}
282
283// Lage zur ErdoberflÀche
284if ($ofl != "" OR $allefelder) {
285        echo "\n<tr>"
286        ."\n\t<td class='li'>Lage zur Erdoberfl&auml;che</td>"
287        ."\n\t<td class='fett'>".DsKy($ofl, '* f&uuml;r Lage zur Erdoberfl&auml;che').$oflv."</td>"
288        ."\n\t<td>"
289                ."\n\t\t<p class='erklk'>'Lage zur Erdoberfl&auml;che' ist die Angabe der relativen Lage des Geb&auml;udes zur Erdoberfl&auml;che. Diese Attributart wird nur bei nicht ebenerdigen Geb&auml;uden gef&uuml;hrt.<br>"
290                ."\n\t\t<p class='erkli'>".$ofld."</p>"
291        ."\n\t</td>\n</tr>";
292}
293
294// Dachgeschossausbau, Spalte dokumentation ist immer leer
295if ($dga != "" OR $allefelder) {
296        echo "\n<tr>"
297        ."\n\t<td class='li'>Dachgeschossausbau</td>"
298        ."\n\t<td class='fett'>".DsKy($dga, '* Dachgeschossausbau').$dgav."</td>"
299        ."\n\t<td>"
300                ."\n\t\t<p class='erklk'>'Dachgeschossausbau' ist ein Hinweis auf den Ausbau bzw. die Ausbauf&auml;higkeit des Dachgeschosses."
301        ."\n\t</td>\n</tr>";
302}
303
304// Zustand
305if ($zus != "" OR $allefelder) {
306        echo "\n<tr>"
307        ."\n\t<td class='li'>Zustand</td>"
308        ."\n\t<td class='fett'>";
309        echo DsKy($zus, 'Zustand-*').$zusv."</td>"
310        ."\n\t<td>"
311                ."\n\t\t<p class='erklk'>'Zustand' beschreibt die Beschaffenheit oder die Betriebsbereitschaft von 'Geb&auml;ude'. Diese Attributart wird nur dann optional gef&uuml;hrt, wenn der Zustand des Geb&auml;udes vom nutzungsf&auml;higen Zustand abweicht.</p>"
312                ."\n\t\t<p class='erkli'>".$zusd."</p>"
313        ."\n\t</td>\n</tr>";
314}
315
316// Weitere GebÀudefunktionen
317if ($wgf != "" OR $allefelder) { // ... ist ein Array
318        echo "\n<tr>"
319        ."\n\t<td class='li'>Weitere Geb&auml;udefunktionen</td>"
320        ."\n\t<td>";
321        if ($wgf != "") { // Kommagetrennte Liste aus Array
322                $sqlw="SELECT wert, beschreibung, dokumentation FROM ax_gebaeudefunktion WHERE wert IN ( $1 ) ORDER BY wert;";
323                $v = array($wgf);
324                $resw = pg_prepare($con, "", $sqlw);
325                $resw = pg_execute($con, "", $v);
326                if (!$resw) {
327                        echo "\n<p class='err'>Fehler bei Geb&auml;ude - weitere Funktion.</p>";
328                        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlw."<br>$1 = Werteliste = '".$wgf."'</p>";}
329                }
330                $zw=0;
331                while($roww = pg_fetch_assoc($resw)) { // LOOP Funktion
332                        if ($zw > 0) {echo "<br>";}
333                        echo DsKy($roww["wert"], 'Geb&auml;udefunktionen-*')."<span title='".$roww["dokumentation"]."'>".$roww["beschreibung"]."</span>";
334                        $zw++;
335           }
336           pg_free_result($resw);
337        }
338        echo "</td>"
339        ."\n\t<td>"
340                ."\n\t\t<p class='erklk'>'Weitere Geb&auml;udefunktion' ist die Funktion, die ein Geb&auml;ude neben der dominierenden Geb&auml;udefunktion hat."
341        ."\n\t</td>\n</tr>";
342}
343
344// Dachform, Spalte dokumentation ist immer leer
345if ($daf != "" OR $allefelder) {
346        echo "\n<tr>"
347        ."\n\t<td class='li'>Dachform</td>"
348        ."\n\t<td class='fett'>".DsKy($daf, 'Dachform-*').$dach."</td>"
349        ."\n\t<td>"
350                ."\n\t\t<p class='erklk'>'Dachform' beschreibt die charakteristische Form des Daches."
351        ."\n\t</td>\n</tr>";
352}
353
354// Objekthöhe
355if ($hho != "" OR $allefelder) {
356        echo "\n<tr>"
357        ."\n\t<td class='li'>Objekth&ouml;he</td>"
358        ."\n\t<td class='fett'>".$hho."</td>"
359        ."\n\t<td>"
360                ."\n\t\t<p class='erklk'>'Objekth&ouml;he' ist die H&ouml;hendifferenz in [m] zwischen dem h&ouml;chsten Punkt der Dachkonstruktion und der festgelegten Gel&auml;ndeoberfl&auml;che des Geb&auml;udes."
361        ."\n\t</td>\n</tr>";
362}
363
364// GeschossflÀche
365if ($gfl != "" OR $allefelder) {
366        echo "\n<tr>"
367        ."\n\t<td class='li'>Geschossfl&auml;che</td>"
368        ."\n\t<td class='fett'>";
369        if ($gfl != "") {echo $gfl." m&#178;";}
370        echo "</td>"
371        ."\n\t<td>"
372                ."\n\t\t<p class='erklk'>'Geschossfl&auml;che' ist die Geb&auml;udegeschossfl&auml;che in [qm]."
373        ."\n\t</td>\n</tr>";
374}
375
376// GrundflÀche
377if ($grf != "" OR $allefelder) {
378        echo "\n<tr>"
379        ."\n\t<td class='li'>Grundfl&auml;che</td>"
380        ."\n\t<td class='fett'>";
381        if ($grf != "") {echo $grf." m&#178;";}
382        echo "\n\t<td>"
383                ."\n\t\t<p class='erklk'>'Grundfl&auml;che' ist die Geb&auml;udegrundfl&auml;che in [qm]."
384        ."\n\t</td>\n</tr>";
385}
386
387// Umbauter Raum
388if ($ura != "" OR $allefelder) {
389        echo "\n<tr>"
390        ."\n\t<td class='li'>Umbauter Raum</td>"
391        ."\n\t<td class='fett'>".$ura."</td>"
392        ."\n\t<td>"
393                ."\n\t\t<p class='erklk'>'Umbauter Raum' ist der umbaute Raum [Kubikmeter] des Geb&auml;udes."
394        ."\n\t</td>\n</tr>";
395}
396
397// Baujahr
398if ($bja != "" OR $allefelder) {
399        echo "\n<tr>"
400        ."\n\t<td class='li'>Baujahr</td>"
401        ."\n\t<td class='fett'>".$bja."</td>"
402        ."\n\t<td>"
403                ."\n\t\t<p class='erklk'>'Baujahr' ist das Jahr der Fertigstellung oder der baulichen Ver&auml;nderung des Geb&auml;udes."
404        ."\n\t</td>\n</tr>";
405}
406
407// Dachart
408if ($daa != "" OR $allefelder) {
409        echo "\n<tr>"
410        ."\n\t<td class='li'>Dachart</td>"
411        ."\n\t<td class='fett'>".$daa."</td>"
412        ."\n\t<td>"
413                ."\n\t\t<p class='erklk'>'Dachart' gibt die Art der Dacheindeckung (z.B. Reetdach) an."
414        ."\n\t</td>\n</tr>";
415}
416
417// D a t e n e r h e b u n g  (QualitÀt der Einmessung)
418$sqle ="SELECT g.gml_id, e.wert, e.beschreibung, e.dokumentation FROM ax_gebaeude g
419LEFT JOIN ax_datenerhebung e ON cast(e.wert AS varchar) = any(g.herkunft_source_source_ax_datenerhebung)
420WHERE g.gml_id= $1 AND g.endet IS NULL;";
421$v = array($gmlid);
422$rese = pg_prepare($con, "", $sqle);
423$rese = pg_execute($con, "", $v);
424if (!$rese) {
425        echo "\n<p class='err'>Fehler bei Datenerhebung.<br>".pg_last_error()."</p>";
426        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqle."<br>$1 = gml_id = '".$gmlid."'</p>";}
427}
428while($rowe = pg_fetch_assoc($rese)) { // Schleife weil array-Feld, meist aber leer
429        $erheb =$rowe["wert"];
430        $berheb=$rowe["beschreibung"];
431        $derheb=$rowe["dokumentation"]; // immer leer, oder
432        if ($derheb == '' AND $erheb != '') { // Wert ohne Doku
433                if ( $erheb >= 2000) { // selbst was dazu sagen
434                        $derheb = 'nicht eingemessenes Geb&auml;ude'; // so hieß das in der ALK
435                }
436        }
437        if ($erheb != "" OR $allefelder) {
438                echo "\n<tr>"
439                ."\n\t<td class='li'>Datenerhebung</td>"
440                ."\n\t<td class='fett'>".DsKy($erheb, 'Datenerhebung-*').$berheb."</td>"
441                ."\n\t<td>"
442                        ."\n\t\t<p class='erklk'>'Datenerhebung' beschreibt Qualit&auml;tsangaben, Herkunft.</p>"
443                        ."\n\t\t<p class='erkli'>".$derheb."</p>"
444                ."</td>\n</tr>";
445        }
446}
447echo "\n</table>";
448pg_free_result($rese);
449
450$gfla=$rowg["gebflae"]; // bei Flurstck. gebraucht
451pg_free_result($resg);
452
453echo "\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>"
454."\n<p>.. auf dem das Geb&auml;ude steht. Ermittelt durch Verschneidung der Geometrie.</p>";
455
456// F l u r s t Ì c k
457$sqlf ="SELECT f.gml_id, round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae,
458st_within(g.wkb_geometry,f.wkb_geometry) as drin, o.gemarkungsnummer, o.bezeichnung, f.flurnummer, f.zaehler, f.nenner
459FROM ax_gebaeude g, ax_flurstueck f LEFT JOIN ax_gemarkung o ON f.land=o.land AND f.gemarkungsnummer=o.gemarkungsnummer ".UnqKatAmt("f","o")
460."WHERE g.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL
461AND st_intersects(g.wkb_geometry,f.wkb_geometry) = true ORDER BY schnittflae DESC;";
462
463$v=array($gmlid);
464$resf=pg_prepare($con, "", $sqlf);
465$resf=pg_execute($con, "", $v);
466if (!$resf) {
467        echo "\n<p class='err'>Fehler bei FS-Verschneidung.</p>";
468        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".$sqlf."<br>$1 = gml_id = '".$gmlid."'</p>";}
469}
470
471echo "\n<hr>\n<table class='geb'>"
472."\n<tr>"
473        ."\n\t<td class='heads fla' title='Schnittfl&auml;che zwischen Flurst&uuml;ck und Geb&auml;ude'><img src='ico/sortd.png' width='10' height='10' alt='' title='Sortierung (absteigend)'>Fl&auml;che</td>"
474        ."\n\t<td class='head' title='Verh&auml;ltnis Geb&auml;udefl&auml;che zur FlurstÃŒcksfl&auml;che'>Verh&auml;ltnis</td>"
475        ."\n\t<td class='head' title='Flurst&uuml;ckskennzeichen Ortsteil'>Gemarkung</td>"
476        ."\n\t<td class='head' title='Flurst&uuml;ckskennzeichen Flur-Nummer'>Flur</td>"
477        ."\n\t<td class='heads fsnr' title='Flurst&uuml;ckskennzeichen Flurst&uuml;cks-Nummer'>Flurst&uuml;ck</td>"
478        ."\n\t<td class='head nwlink' title='Flurst&uuml;cks-Nachweis'>weitere Auskunft</td>"
479."\n</tr>";
480
481while($rowf = pg_fetch_assoc($resf)) {
482        $fgml=$rowf["gml_id"];
483        $drin=$rowf["drin"];
484        $schni=$rowf["schnittflae"];
485        $flur= $rowf["flurnummer"];
486        $fskenn=$rowf["zaehler"];
487        if ($rowf["nenner"] != "") { $fskenn.="/".$rowf["nenner"];}
488
489        // 3 FÀlle:
490        if ($drin === "t") { // Geb. komplett in FS
491                $gstyle="gin"; // siehe .css   
492                $f1=number_format($schni,2,",",".") . " m&#178;";
493                $f2="vollst&auml;ndig";
494        } else {
495                if ($schni === "0.00") { // GebÀude angrenzend (Grenzbebauung)
496                        $gstyle="gan";
497                        $f1="&nbsp;";
498                        $f2="angrenzend";
499                } else { // Teile des Geb. auf dem FS
500                        $gstyle="gtl";
501                        $f1=number_format($schni,2,",",".") . " m&#178;";
502                        $f2="teilweise";
503                }
504        }
505        echo "\n<tr>"
506                ."\n\t<td class='fla'>".$f1."</td>"
507                ."\n\t<td class='".$gstyle."'>".$f2."</td>"
508                ."\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer').$rowf["bezeichnung"]."</td>"
509                ."\n\t<td>".$flur."</td>"
510                ."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>";
511
512        echo "\n\t<td class='nwlink noprint'>" // Link FS
513                ."\n\t\t<a title='Flurst&uuml;ck' href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fgml.LnkStf()
514                ."'>Flurst&uuml;ck&nbsp;<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
515                ."\n\t</td>"
516        ."\n</tr>";
517}
518
519$gfla=number_format($gfla,2,",",".") . " m&#178;";
520echo "\n<tr>\n\t<td class='fla sum'>".$gfla."</td>\n\t<td>Geb&auml;udefl&auml;che</td>\n\t<td></td>\n</tr>";
521echo "\n</table>";
522
523echo "<div class='buttonbereich noprint'>\n<hr>"
524        ."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
525if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
526echo "\n</div>";
527
528footer($gmlid, selbstverlinkung()."?", "");
529?>
530</body>
531</html>
Note: See TracBrowser for help on using the repository browser.