Ignore:
Timestamp:
06/24/21 15:59:16 (3 years ago)
Author:
frank.jaeger
Message:

Aktualisierungen der ALKIS-Buchauskunft, neues Modul für Bauwerke, Härtung

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/info/info/alkisn/alkisgebaeudenw.php

    r418 r422  
    55        Version: 
    66        2016-02-24 Version fuer norGIS-ALKIS-Import 
    7         2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermöglichen 
    8         2016-12-05 Array-Behandlung ax_gebaeude.name 
    9         2017-06-08 Validierung Eingabeparameter, Feinkorrekturen 
    10         2017-06-19 Tool-Tip GebÀudefunktion 
    11         2018-04-23 Kennzeichen eingerÃŒckt, &nodebug 
    12         2018-11-09 Umstellung Full-Schema 
    13         2018-11-21 Korrektur LEFT Join Bauweise 
     7        .... 
     8        2020-02-20 Authentifizierung ausgelegert in Function darf_ich() 
     9        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] 
     10        2020-12-15 Verschneidung mit "sonstige Bauwerke", Input-Validation und Strict Comparisation 
     11        2021-03-09 Verschneidung mit weiteren Bauwerks-Tabellen. 
     12        2021-03-11 Adresse(n) des gehörtZu-Haus zum Bauwerk nicht mehr hier anzeigen sondern im neuen Bauwerk-Modul. 
    1413*/ 
     14 
     15// Kopf fÃŒr die Anzeige der GebÀude. Nur wenn tatsÀchlich GebÀude vorkommen. 
     16function geb_tab_head() { 
     17        // Überschrift 
     18        echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>" 
     19        ."\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>"; 
     20 
     21        // Tabellen-Kopf 
     22        echo "\n<hr>\n<table class='geb'>"; 
     23        echo "\n<tr>" 
     24                ."\n\t<td class='head' title='ggf. Geb&auml;udename'>Name</td>" 
     25                ."\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>" 
     26                ."\n\t<td class='head' title='gesamte Geb&auml;udefl&auml;che, liegt teilweise auf Nachbar-Flurst&uuml;ck'>&nbsp;</td>" 
     27                ."\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>" 
     28                ."\n\t<td class='head' title='Bauweise ist die Beschreibung der Art der Bauweise'>Bauweise</td>" 
     29                ."\n\t<td class='head' title='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.'>Zustand</td>" 
     30                ."\n\t<td class='head nwlink' title='Lagebezeichnung mit Stra&szlig;e und Hausnummer'>Lage</td>" 
     31                ."\n\t<td class='head nwlink' title='Link zu den kompletten Hausdaten'>Haus</td>" 
     32        ."\n</tr>"; 
     33} 
     34         
     35// Kopf fÃŒr die Anzeige der Bauwerke. Nur wenn tatsÀchlich Bauwerke vorkommen. 
     36function bauw_tab_head() { 
     37        // Überschrift 
     38        echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Bauwerke</h3>" 
     39        ."\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>"; 
     40 
     41        // Tabellen-Kopf 
     42        echo "\n<hr>\n<table class='geb'>"; 
     43        echo "<tr><td colspan=3></td><td colspan=3 class='heads gw'><img src='ico/sort.png' width='10' height='10' alt='' title='Sortierung'>Bauwerks-Typ</td></tr>"; 
     44        echo "\n<tr>"; 
     45        echo "\n\t<td class='head' title='Bezeichnung und/oder Bauwerksname'>Name</td>" 
     46                ."\n\t<td class='heads fla' title='Schnittfl&auml;che zwischen Flurst&uuml;ck und Bauwerk'><img src='ico/sortd.png' width='10' height='10' alt='' title='Sortierung (absteigend)'>Fl&auml;che</td>" 
     47                ."\n\t<td class='head' title='gesamte Bauwerksfl&auml;che, liegt teilweise auf Nachbar-Flurst&uuml;ck'>&nbsp;</td>" 
     48                ."\n\t<td class='head' title='Bauwerksfunktion'>Funktion</td>" 
     49                ."\n\t<td class='head nwlink' title='Daten des zugehörigen Geb&auml;udes'>zum Haus</td>" 
     50                ."\n\t<td class='head nwlink' title='Detaillierte Daten zu diesem Bauwerk'>Bauwerk</td>" 
     51        ."\n</tr>"; 
     52} 
     53 
     54// S T A R T 
     55 
     56ini_set("session.cookie_httponly", 1); 
    1557session_start(); 
    16 $showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren 
    17 $cntget = extract($_GET); // Parameter in Variable umwandeln 
     58$showkey="n"; $nodebug="";      // Var. aus Parameter initalisieren 
     59$cntget = extract($_GET);       // Parameter in Variable umwandeln 
    1860 
    1961// strikte Validierung aller Parameter 
    20 if (!isset($gmlid) or !preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");} 
    21 if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} 
     62if (isset($gmlid)) { 
     63        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");} 
     64} else { 
     65        die("Fehlender Parameter"); 
     66} 
     67if (isset($gkz)) { 
     68        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} 
     69} else { 
     70        die("Fehlender Parameter"); 
     71} 
    2272if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");} 
    23 if ($showkey == "j") {$showkey=true;} else {$showkey=false;} 
     73if ($showkey === "j") {$showkey=true;} else {$showkey=false;} 
    2474if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");} 
    2575 
    26 require_once("alkis_conf_location.php"); 
    27 if ($auth == "mapbender") {require_once($mapbender);} 
    28 include("alkisfkt.php"); 
     76include "alkis_conf_location.php"; 
     77include "alkisfkt.php"; 
     78 
    2979echo <<<END 
    3080<!doctype html> 
     
    3989<body> 
    4090END; 
     91 
     92$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); } 
     93 
    4194// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten. 
    4295// Manuell an die URL anfÃŒgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht. 
    43 if ($nodebug == "j") {$debug=0;}  
     96if ($nodebug === "j") {$debug=0;}  
    4497 
    4598$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgebaeudenw.php'"); 
     
    55108if (!$resf) { 
    56109        echo "\n<p class='err'>Fehler bei Flurst&uuml;cksdaten.</p>"; 
    57         if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlf."<br>$1 = gml_id = '".$gmlid."'</p>";} 
     110        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlf)."'</p>";} 
     111        if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resf)."</p>";} 
    58112} 
    59113if ($rowf = pg_fetch_assoc($resf)) { 
     
    70124        echo "\n<p class='err'>Fehler! Kein Treffer fuer gml_id=".$gmlid."</p>"; 
    71125} 
    72 echo "<p class='geb'>ALKIS Flurst&uuml;ck (Geb&auml;ude) ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"; // Balken 
    73 echo "\n<h2>Flurst&uuml;ck (Geb&auml;ude)</h2>"; 
     126echo "<p class='balken geb'>ALKIS Flurst&uuml;ck (Geb&auml;ude und Bauwerke) ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"; // Balken 
     127echo "\n<h2>Flurst&uuml;ck (Geb&auml;ude und Bauwerke)</h2>"; 
    74128echo "\n<table class='outer'>" // Kopf 
    75129        ."\n<tr>" 
     
    84138                                ."\n\t\t</tr>\n\t\t<tr>" 
    85139                                        ."\n\t\t\t<td title='Gemarkung'>"; 
    86                                         if  ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";} 
     140                                        if ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";} 
    87141                                        echo $gemkname."&nbsp;</td>" 
    88142                                        ."\n\t\t\t<td title='Flurnummer'>".$flurnummer."</td>" 
     
    104158pg_free_result($resf); 
    105159 
    106 echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>" 
    107 ."\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>"; 
    108  
    109160// G e b a e u d e 
     161 
    110162$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, h.beschreibung AS bauweise_beschreibung, u.beschreibung AS bezeichner, u.dokumentation AS gfktd, g.zustand, z.beschreibung AS bzustand,  
    111 round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-Flaeche komplett auch die Fl. ausserhalb des FS 
     163round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-Flaeche, auch ausserhalb des FS 
    112164$sqlg.="round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae, "; // wie viel vom GEB liegt im FS? 
    113 $sqlg.="st_within(g.wkb_geometry,f.wkb_geometry) as drin "; // liegt das GEB komplett im FS? 
    114 $sqlg.="FROM ax_flurstueck f, ax_gebaeude g  
    115 LEFT JOIN ax_bauweise_gebaeude h ON g.bauweise = h.wert 
    116 LEFT JOIN ax_gebaeudefunktion u ON g.gebaeudefunktion = u.wert 
    117 LEFT JOIN ax_zustand_gebaeude z ON g.zustand = z.wert 
    118 WHERE f.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL "; // ID des akt. FS 
     165$sqlg.="st_within(g.wkb_geometry,f.wkb_geometry) as drin  
     166 FROM ax_flurstueck f, ax_gebaeude g  
     167 LEFT JOIN ax_bauweise_gebaeude h ON g.bauweise = h.wert 
     168 LEFT JOIN ax_gebaeudefunktion u ON g.gebaeudefunktion = u.wert 
     169 LEFT JOIN ax_zustand_gebaeude z ON g.zustand = z.wert  
     170WHERE f.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL "; 
    119171 
    120172// "within" -> nur Geb., die komplett im FS liegen. "intersects" -> auch teil-ueberlappende Flst. 
     
    129181if (!$resg) { 
    130182        echo "\n<p class='err'>Fehler bei Geb&auml;ude-Verschneidung.</p>"; 
    131         if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";} 
     183        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlg)."'</p>";} 
     184        if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resg)."</p>";} 
    132185} 
    133186$gebnr=0; 
    134187$gebflsum=0; 
    135 echo "\n<hr>\n<table class='geb'>"; 
    136         echo "\n<tr>" // T-Header 
    137                 ."\n\t<td class='head' title='ggf. Geb&auml;udename'>Name</td>" 
    138                 ."\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>" 
    139                 ."\n\t<td class='head' title='gesamte Geb&auml;udefl&auml;che, liegt teilweise auf Nachbar-Flurst&uuml;ck'>&nbsp;</td>" 
    140                 ."\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>" 
    141                 ."\n\t<td class='head' title='Bauweise ist die Beschreibung der Art der Bauweise'>Bauweise</td>" 
    142                 ."\n\t<td class='head' title='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.'>Zustand</td>" 
    143                 ."\n\t<td class='head nwlink' title='Lagebezeichnung mit Stra&szlig;e und Hausnummer'>Lage</td>" 
    144                 ."\n\t<td class='head nwlink' title='Link zu den kompletten Hausdaten'>Haus</td>" 
     188while($rowg = pg_fetch_assoc($resg)) { 
     189        $gebnr++; 
     190        if ($gebnr === 1) {geb_tab_head();} // Tab.-Kopf 
     191        $ggml=$rowg["gml_id"]; 
     192        $gebflsum=$gebflsum + $rowg["schnittflae"]; 
     193        $gnam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array in der DB: '{"A","B"}' 
     194        // Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum!? 
     195        /* SELECT name FROM ax_gebaeude WHERE NOT name IS NULL AND array_length(name, 1) > 1; */ 
     196        $gfktk=htmlentities($rowg["gebaeudefunktion"], ENT_QUOTES, "UTF-8");  // Geb.-Funktion Key 
     197        $gfktv=htmlentities($rowg["bezeichner"], ENT_QUOTES, "UTF-8"); // Geb.Funktion Value 
     198        $gfktd=htmlentities($rowg["gfktd"], ENT_QUOTES, "UTF-8"); // GebÀude-Funktion-Description 
     199 
     200        $gbauw=$rowg["bauweise"]; 
     201        $gbauwb=htmlentities($rowg["bauweise_beschreibung"], ENT_QUOTES, "UTF-8"); 
     202 
     203        $gzus=$rowg["zustand"]; 
     204        $gzustand=htmlentities($rowg["bzustand"], ENT_QUOTES, "UTF-8"); 
     205 
     206        // 3 FÀlle unterscheiden: 
     207        if ($rowg["drin"] === "t") { // GebÀude liegt komplett in FlurstÃŒck 
     208                $f1=$rowg["schnittflae"]." m&#178;"; 
     209                $f2="&nbsp;"; 
     210                $gstyle="gin"; // siehe .css 
     211        } else { 
     212                if ($rowg["schnittflae"] === "0.00") { // GebÀude angrenzend (Grenzbebauung) 
     213                        $gstyle="gan"; 
     214                        $f1="&nbsp;"; 
     215                        $f2="angrenzend"; 
     216                } else { // Teile des GebÀudes stehen auf dem FlurstÃŒck 
     217                        $gstyle="gtl"; 
     218                        $f1=$rowg["schnittflae"]." m&#178;"; 
     219                        $f2="(von ".$rowg["gebflae"]." m&#178;)"; 
     220                } 
     221        } 
     222 
     223        echo "\n<tr>" 
     224                ."\n\t<td>"; 
     225                if ($gnam != "") {echo "<span title='Geb&auml;udename'>".$gnam."</span><br>";} 
     226                echo "</td>"; 
     227 
     228                echo "\n\t<td class='fla'>".$f1."</td>" 
     229                ."\n\t<td class='".$gstyle."'>".$f2."</td>"; // FlÀchenangaben 
     230 
     231                echo "\n\t<td title='".$gfktd."'>"; // Funktion 
     232                        if ($showkey) {echo "<span class='key'>(".$gfktk.")</span>&nbsp;";} 
     233                        echo $gfktv; 
     234                echo "</td>"; 
     235 
     236                echo "\n\t<td>"; 
     237                if ($gbauw != "") { 
     238                        if ($showkey) {echo "<span class='key'>(".$gbauw.")</span>&nbsp;";} 
     239                        echo $gbauwb; 
     240                } 
     241                echo "</td>"; 
     242 
     243                echo "\n\t<td>"; 
     244                if ($gzus != "") { 
     245                        if ($showkey) {echo "<span class='key'>(".$gzus.")</span>&nbsp;";} 
     246                        echo $gzustand; 
     247                } 
     248                echo "</td>"; 
     249 
     250                // 2 Spalten mit Links zu anderen Nachweisen: 1. Lage, 2. GebÀude 
     251                echo "\n\t<td class='nwlink noprint'>"; // Link Lage 
     252 
     253                // Zu EINEM GebÀude mehrere Lagebezeichnungen mit Haus- oder Pseudo-Nummer möglich, alle in ein TD  
     254                // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere) 
     255                $sqll="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer " 
     256                ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) " 
     257                ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " 
     258                ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; 
     259 
     260                // UNION - oder NEBENgebÀude  Geb >hat> Pseudo 
     261                $sqll.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer " 
     262                ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat " 
     263                ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " 
     264                ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses" 
     265         
     266                $sqll.="ORDER BY bezeichnung, hausnummer, laufendenummer;"; 
     267                $v = array($ggml); 
     268                $resl = pg_prepare("", $sqll); 
     269                $resl = pg_execute("", $v); 
     270                if (!$resl) { 
     271                        echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>"; 
     272                        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqll)."'</p>";} 
     273                        if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resl)."</p>";} 
     274                } 
     275                while($rowl = pg_fetch_assoc($resl)) { // LOOP: Lagezeilen 
     276                        $ltyp=$rowl["ltyp"]; // Lagezeilen-Typ 
     277                        $skey=$rowl["lage"]; // Str.-Schluessel 
     278                        $snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); //-Name 
     279                        $hsnr=$rowl["hausnummer"]; 
     280                        $hlfd=$rowl["laufendenummer"]; 
     281                        $gmllag=$rowl["lgml"]; 
     282                        if ($ltyp === "p") { 
     283                                $lagetitl="Nebengeb&auml;ude - Pseudonummer"; 
     284                                $lagetxt="Nebengeb. ".$hlfd; // + HausNr?? 
     285                        } else { 
     286                                $lagetitl="HauptgebÀude - Hausnummer"; 
     287                                $lagetxt=$snam." ".$hsnr; 
     288                        } 
     289                        echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp; 
     290                                if ($showkey) {echo "&amp;showkey=j";} 
     291                                echo "'>"; 
     292                                if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";} 
     293                        echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a><br>"; 
     294                } // Ende Loop Lage m.H. 
     295                pg_free_result($resl); 
     296                echo "\n\t</td>"; 
     297 
     298                echo "\n\t<td class='nwlink noprint'>" // Link Haus 
     299                        ."\n\t\t<a title='Daten zum Geb&auml;ude-Objekt' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml; 
     300                        if ($showkey) {echo "&amp;showkey=j";} 
     301                        echo "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>" 
     302                ."\n\t</td>" 
    145303        ."\n</tr>"; 
    146         while($rowg = pg_fetch_assoc($resg)) { // T-Body 
    147                 $gebnr = $gebnr + 1; 
    148                 $ggml=$rowg["gml_id"]; 
    149                 $gebflsum=$gebflsum + $rowg["schnittflae"]; 
    150                 $gnam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array in der DB: '{"A","B"}' 
    151                 // Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum!? 
    152                 /* SELECT name FROM ax_gebaeude WHERE NOT name IS NULL AND array_length(name, 1) > 1; */ 
    153                 $gfktk=htmlentities($rowg["gebaeudefunktion"], ENT_QUOTES, "UTF-8");  // Geb.-Funktion Key 
    154                 $gfktv=htmlentities($rowg["bezeichner"], ENT_QUOTES, "UTF-8"); // Geb.Funktion Value 
    155                 $gfktd=htmlentities($rowg["gfktd"], ENT_QUOTES, "UTF-8"); // GebÀude-Funktion-Description 
    156                 $gzus=htmlentities($rowg["zustand"], ENT_QUOTES, "UTF-8"); 
    157                 $gzustand=htmlentities($rowg["bzustand"], ENT_QUOTES, "UTF-8"); 
    158  
    159                 // 3 FÀlle unterscheiden: 
    160                 if ($rowg["drin"] == "t") { // GebÀude liegt komplett in FlurstÃŒck 
    161                         $f1=$rowg["schnittflae"]." m&#178;"; 
    162                         $f2="&nbsp;"; 
    163                         $gstyle="gin"; // siehe .css 
    164                 } else { 
    165                 if ($rowg["schnittflae"] == "0.00") { // GebÀude angrenzend (Grenzbebauung) 
    166                                 $gstyle="gan"; 
    167                                 $f1="&nbsp;"; 
    168                                 $f2="angrenzend"; 
    169                         } else { // Teile des GebÀudes stehen auf dem FlurstÃŒck 
    170                                 $gstyle="gtl"; 
    171                                 $f1=$rowg["schnittflae"]." m&#178;"; 
    172                                 $f2="(von ".$rowg["gebflae"]." m&#178;)"; 
    173                         } 
    174                 } 
    175  
    176                 echo "\n<tr>" 
    177                         ."\n\t<td class='".$gstyle."'>"; // Sp. 1 Name 
    178                         if ($gnam != "") {echo "<span title='Geb&auml;udename'>".$gnam."</span><br>";} 
    179                         echo "</td>"; 
    180  
    181                         echo "\n\t<td class='fla'>".$f1."</td>" // Sp. 2 
    182                         ."\n\t<td class='".$gstyle."'>".$f2."</td>"; // FlÀchenangaben 
    183  
    184                         echo "\n\t<td class='".$gstyle."' title='".$gfktd."'>"; // Sp. 3 Funktion 
    185                         if ($showkey) {echo "<span class='key'>".$gfktk."</span>&nbsp;";} 
    186                         echo $gfktv."</td>"; 
    187  
    188                         echo "\n\t<td class='".$gstyle."'>"; 
    189                         if ($showkey) {echo "<span class='key'>".$rowg["bauweise"]."</span>&nbsp;";} 
    190                         echo $rowg["bauweise_beschreibung"]."&nbsp;</td>"; 
    191  
    192                         echo "\n\t<td class='".$gstyle."'>"; 
    193                         if ($showkey) {echo "<span class='key'>".$gzus."</span>&nbsp;";} 
    194                         echo $gzustand."&nbsp;</td>"; 
    195  
    196                         // 2 Spalten mit Links zu anderen Nachweisen: 1. Lage, 2. GebÀude 
    197                         echo "\n\t<td class='nwlink noprint'>"; // Link Lage 
    198  
    199                         // Zu EINEM GebÀude mehrere Lagebezeichnungen mit Haus- oder Pseudo-Nummer möglich, alle in ein TD  
    200                         // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere) 
    201                         $sqll="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer " 
    202                         ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) " 
    203                         ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " 
    204                         ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; 
    205  
    206                         // UNION - oder NEBENgebÀude  Geb >hat> Pseudo 
    207                         $sqll.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer " 
    208                         ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat " 
    209                         ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " 
    210                         ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses" 
    211                  
    212                         $sqll.="ORDER BY bezeichnung, hausnummer;"; 
    213                         $v = array($ggml); 
    214                         $resl = pg_prepare("", $sqll); 
    215                         $resl = pg_execute("", $v); 
    216                         if (!$resl) { 
    217                                 echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>"; 
    218                                 if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";} 
    219                         } 
    220                         while($rowl = pg_fetch_assoc($resl)) { // LOOP: Lagezeilen 
    221                                 $ltyp=$rowl["ltyp"]; // Lagezeilen-Typ 
    222                                 $skey=$rowl["lage"]; // Str.-Schluessel 
    223                                 $snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); //-Name 
    224                                 $hsnr=$rowl["hausnummer"]; 
    225                                 $hlfd=$rowl["laufendenummer"]; 
    226                                 $gmllag=$rowl["lgml"]; 
    227                                 if ($ltyp == "p") { 
    228                                         $lagetitl="NebengebÀude - Pseudonummer"; 
    229                                         $lagetxt="Nebengeb&auml;ude Nr. ".$hlfd; 
    230                                 } else { 
    231                                         $lagetitl="HauptgebÀude - Hausnummer"; 
    232                                         $lagetxt=$snam."&nbsp;".$hsnr; 
    233                                 } 
    234                                 echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp; 
    235                                         if ($showkey) {echo "&amp;showkey=j";} 
    236                                         echo "'>"; 
    237                                         if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";} 
    238                                 echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a><br>"; 
    239                         } // Ende Loop Lage m.H. 
    240             pg_free_result($resl); 
    241                         echo "\n\t</td>"; 
    242  
    243                         echo "\n\t<td class='nwlink noprint'>" // Link Haus 
    244                                 ."\n\t\t<a title='Daten zum Geb&auml;ude-Objekt' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml; 
    245                                 if ($showkey) {echo "&amp;showkey=j";} 
    246                                 echo "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>" 
    247                         ."\n\t</td>" 
    248                 ."\n</tr>"; 
    249         } // Ende GebÀude 
    250  
    251         // Footer 
    252         if ($gebnr == 0) { 
    253                 echo "\n</table>" 
    254                 ."<p class='err'><br>Keine Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>"; 
    255                 //if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";} 
    256         } else { 
    257                 echo "\n<tr>" 
    258                         ."\n\t<td>Summe:</td>" 
    259                         ."\n\t<td class='fla sum' title='von Geb&auml;uden &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($gebflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>" 
    260                         ."\n\t<td colspan='6'>&nbsp;</td>" 
    261                 ."\n</tr>" 
     304} 
     305// Footer GebÀude 
     306if ($gebnr === 0) { 
     307        echo "<p><br>Kein Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>"; 
     308        //if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";} 
     309} else { 
     310        echo "\n<tr>" 
     311                ."\n\t<td>Summe:</td>" 
     312                ."\n\t<td class='fla sum' title='von Geb&auml;uden &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($gebflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>" 
     313                ."\n\t<td colspan='6'>&nbsp;</td>" 
     314        ."\n</tr>" 
    262315        ."\n</table>"; 
    263316        $unbebaut = number_format(($flstflaeche - $gebflsum),0,",",".") . " m&#178;"; 
     
    265318} 
    266319pg_free_result($resg); 
     320 
     321// B a u w e r k e 
     322 
     323// Konstanten fÃŒr Sortierung und Gruppierung 
     324$btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5; 
     325$btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9; 
     326 
     327// Tabllen-Alias, 2stellig. 1. Stelle: f_=FlurstÃŒck, b_=Bauwerk, k_=Key = SchlÃŒsseltabelle. // 2. Stelle: wie Konstante 
     328 
     329// 1 -V e r k e h r 
     330$sqlb="SELECT ".$btyp_verkehr." AS bwtyp, b1.gml_id,  
     331 b1.bauwerksfunktion, k1.beschreibung AS bezeichner, k1.dokumentation AS bfktd, b1.bezeichnung, b1.name, NULL AS gehoertzu,  
     332 round(st_area(b1.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b1.wkb_geometry,f1.wkb_geometry))::numeric,2) AS schnittflae,  
     333 st_within(b1.wkb_geometry,f1.wkb_geometry) as drin, GeometryType(b1.wkb_geometry) as bgeotyp  
     334 FROM ax_flurstueck f1  
     335 JOIN ax_bauwerkimverkehrsbereich b1 ON st_intersects(b1.wkb_geometry,f1.wkb_geometry) = true 
     336 LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion = k1.wert  
     337 WHERE f1.gml_id = $1 AND f1.endet IS NULL AND b1.endet IS NULL "; 
     338// 2 - G e w À s s e r 
     339$sqlb.="UNION 
     340 SELECT ".$btyp_gewaesser." AS bwtyp, b2.gml_id, b2.bauwerksfunktion, ug.beschreibung AS bezeichner, ug.dokumentation AS bfktd,  
     341 b2.bezeichnung, b2.name, NULL AS gehoertzu,  
     342 round(st_area(b2.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b2.wkb_geometry,f2.wkb_geometry))::numeric,2) AS schnittflae,  
     343 st_within(b2.wkb_geometry,f2.wkb_geometry) as drin, GeometryType(b2.wkb_geometry) as bgeotyp  
     344 FROM ax_flurstueck f2  
     345 JOIN ax_bauwerkimgewaesserbereich b2 ON st_intersects(b2.wkb_geometry,f2.wkb_geometry) = true 
     346 LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion = ug.wert  
     347 WHERE f2.gml_id = $1 AND f2.endet IS NULL AND b2.endet IS NULL "; 
     348// 3 - S o n s t i g e  Bauwerke 
     349$sqlb.="UNION 
     350 SELECT ".$btyp_sonst." AS bwtyp, b3.gml_id, b3.bauwerksfunktion, k3.beschreibung AS bezeichner, k3.dokumentation AS bfktd,  
     351 b3.bezeichnung, b3.name, b3.gehoertzu,  
     352 round(st_area(b3.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b3.wkb_geometry,f3.wkb_geometry))::numeric,2) AS schnittflae,  
     353 st_within(b3.wkb_geometry,f3.wkb_geometry) as drin, GeometryType(b3.wkb_geometry) as bgeotyp  
     354 FROM ax_flurstueck f3  
     355 JOIN ax_sonstigesbauwerkodersonstigeeinrichtung b3 ON st_intersects(b3.wkb_geometry,f3.wkb_geometry) = true 
     356 LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion = k3.wert  
     357 WHERE f3.gml_id = $1 AND f3.endet IS NULL AND b3.endet IS NULL "; 
     358// 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe 
     359$sqlb.="UNION 
     360 SELECT ".$btyp_indu." AS bwtyp, b4.gml_id, b4.bauwerksfunktion, k4.beschreibung AS bezeichner, k4.dokumentation AS bfktd,  
     361 b4.bezeichnung, b4.name, NULL AS gehoertzu,  
     362 round(st_area(b4.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b4.wkb_geometry,f4.wkb_geometry))::numeric,2) AS schnittflae,  
     363 st_within(b4.wkb_geometry,f4.wkb_geometry) as drin, GeometryType(b4.wkb_geometry) as bgeotyp  
     364 FROM ax_flurstueck f4  
     365 JOIN ax_bauwerkoderanlagefuerindustrieundgewerbe b4 ON st_intersects(b4.wkb_geometry,f4.wkb_geometry) = true 
     366 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion = k4.wert  
     367 WHERE f4.gml_id = $1 AND f4.endet IS NULL AND b4.endet IS NULL "; 
     368// 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung 
     369$sqlb.="UNION 
     370 SELECT ".$btyp_sport." AS bwtyp, b5.gml_id, b5.bauwerksfunktion, k5.beschreibung AS bezeichner, k5.dokumentation AS bfktd,  
     371 NULL AS bezeichnung, b5.name, NULL AS gehoertzu,  
     372 round(st_area(b5.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b5.wkb_geometry,f5.wkb_geometry))::numeric,2) AS schnittflae,  
     373 st_within(b5.wkb_geometry,f5.wkb_geometry) as drin, GeometryType(b5.wkb_geometry) as bgeotyp  
     374 FROM ax_flurstueck f5  
     375 JOIN ax_bauwerkoderanlagefuersportfreizeitunderholung b5 ON st_intersects(b5.wkb_geometry,f5.wkb_geometry) = true 
     376 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion = k5.wert  
     377 WHERE f5.gml_id = $1 AND f5.endet IS NULL AND b5.endet IS NULL "; 
     378// 6 - L e i t u n g 
     379$sqlb.="UNION 
     380 SELECT ".$btyp_leitg." AS bwtyp, b6.gml_id, b6.bauwerksfunktion, k6.beschreibung AS bezeichner, k6.dokumentation AS bfktd,  
     381 NULL AS bezeichnung, b6.name, NULL AS gehoertzu,  
     382 round(st_area(b6.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b6.wkb_geometry,f6.wkb_geometry))::numeric,2) AS schnittflae,  
     383 st_within(b6.wkb_geometry,f6.wkb_geometry) as drin, GeometryType(b6.wkb_geometry) as bgeotyp  
     384 FROM ax_flurstueck f6  
     385 JOIN ax_leitung b6 ON st_intersects(b6.wkb_geometry,f6.wkb_geometry) = true 
     386 LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion = k6.wert  
     387 WHERE f6.gml_id = $1 AND f6.endet IS NULL AND b6.endet IS NULL "; 
     388// 7 - T r a n s p o r t a n l a g e 
     389$sqlb.="UNION 
     390 SELECT ".$btyp_trans." AS bwtyp, b7.gml_id, b7.bauwerksfunktion, k7.beschreibung AS bezeichner, k7.dokumentation AS bfktd,  
     391 NULL AS bezeichnung, NULL AS name, NULL AS gehoertzu,  
     392 round(st_area(b7.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b7.wkb_geometry,f7.wkb_geometry))::numeric,2) AS schnittflae,  
     393 st_within(b7.wkb_geometry,f7.wkb_geometry) as drin, GeometryType(b7.wkb_geometry) as bgeotyp  
     394 FROM ax_flurstueck f7  
     395 JOIN ax_transportanlage b7 ON st_intersects(b7.wkb_geometry,f7.wkb_geometry) = true 
     396 LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion = k7.wert  
     397 WHERE f7.gml_id = $1 AND f7.endet IS NULL AND b7.endet IS NULL "; 
     398// 8 - T u r m  (Sonderfall Array) 
     399$sqlb.="UNION 
     400 SELECT ".$btyp_turm." AS bwtyp, b8.gml_id, k8.wert AS bauwerksfunktion, k8.beschreibung AS bezeichner, k8.dokumentation AS bfktd,  
     401 NULL AS bezeichnung, b8.name, NULL AS gehoertzu,  
     402 round(st_area(b8.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b8.wkb_geometry,f8.wkb_geometry))::numeric,2) AS schnittflae,  
     403 st_within(b8.wkb_geometry,f8.wkb_geometry) as drin, GeometryType(b8.wkb_geometry) as bgeotyp  
     404 FROM ax_flurstueck f8  
     405 JOIN ax_turm b8 ON st_intersects(b8.wkb_geometry,f8.wkb_geometry) = true 
     406 LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion) 
     407 WHERE f8.gml_id = $1 AND f8.endet IS NULL AND b8.endet IS NULL "; 
     408// 9 -  V o r r a t s b e h À l t e r ,  S p e i c h e r b a u w e r k 
     409$sqlb.="UNION 
     410 SELECT ".$btyp_vorrat." AS bwtyp, b9.gml_id, b9.bauwerksfunktion, k9.beschreibung AS bezeichner, k9.dokumentation AS bfktd,  
     411 NULL AS bezeichnung, b9.name, NULL AS gehoertzu,  
     412 round(st_area(b9.wkb_geometry)::numeric,2) AS gebflae, round(st_area(ST_Intersection(b9.wkb_geometry,f9.wkb_geometry))::numeric,2) AS schnittflae,  
     413 st_within(b9.wkb_geometry,f9.wkb_geometry) as drin, GeometryType(b9.wkb_geometry) as bgeotyp  
     414 FROM ax_flurstueck f9  
     415 JOIN ax_vorratsbehaelterspeicherbauwerk b9 ON st_intersects(b9.wkb_geometry,f9.wkb_geometry) = true 
     416 LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion = k9.wert  
     417 WHERE f9.gml_id = $1 AND f9.endet IS NULL AND b9.endet IS NULL "; 
     418 
     419// Generell ... 
     420$sqlb.="ORDER BY bwtyp, schnittflae DESC;"; 
     421 
     422$v=array($gmlid); 
     423$resb=pg_prepare("", $sqlb); 
     424$resb=pg_execute("", $v); 
     425if (!$resb) { 
     426        echo "\n<p class='err'>Fehler bei Bauwerke-Verschneidung.</p>"; 
     427        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."</p>";} 
     428        if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";} 
     429} 
     430$baunr=0; // ZÀhler 
     431$bauflsum=0; // FlÀchensumme 
     432$gwbwtyp=0; // Gruppen-Wechsel Bauwerks-Typ 
     433 
     434while($rowb = pg_fetch_assoc($resb)) { 
     435        $baunr++; 
     436        $btyp=$rowb["bwtyp"]; // Tabelle 
     437        $bgml=$rowb["gml_id"]; 
     438        $bauflsum=$bauflsum + $rowb["schnittflae"]; 
     439        $bbez=htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8"); 
     440        $bfktk=htmlentities($rowb["bauwerksfunktion"], ENT_QUOTES, "UTF-8"); 
     441        $bfktv=htmlentities($rowb["bezeichner"], ENT_QUOTES, "UTF-8"); 
     442        $bfktd=htmlentities($rowb["bfktd"], ENT_QUOTES, "UTF-8"); 
     443        $bnam=htmlentities($rowb["name"], ENT_QUOTES, "UTF-8"); 
     444        $bgeb=$rowb["gehoertzu"]; 
     445        $drin=$rowb["drin"]; 
     446        $bgeotyp=$rowb["bgeotyp"]; 
     447 
     448        // Lage des Bauwerks zum FlurstÃŒck 
     449        if ($bgeotyp === "LINESTRING") { 
     450                if ($drin === "t") { 
     451                        $bstyle="gin"; 
     452                } else { 
     453                        $bstyle="gtl"; 
     454                } 
     455                $f1="&nbsp;"; 
     456                $f2="Linie"; 
     457        } elseif ($bgeotyp === "POINT") { 
     458                if ($drin === "t") { 
     459                        $bstyle="gin"; 
     460                } else { 
     461                        $bstyle="gtl"; 
     462                } 
     463                $f1="&nbsp;"; 
     464                $f2="Punkt";             
     465        } else { // FlÀche / Multi- 
     466                if ($drin === "t") { // komplett IM FlurstÃŒck 
     467                        $f1=$rowb["schnittflae"]." m&#178;"; 
     468                        $f2="&nbsp;"; 
     469                        $bstyle="gin"; // siehe .css 
     470                } else { 
     471                        if ($rowb["schnittflae"] === "0.00") { // nur angrenzend 
     472                                $bstyle="gan"; 
     473                                $f1="&nbsp;"; 
     474                                $f2="angrenzend"; 
     475                        } else { // Teile auf FlurstÃŒck 
     476                                $bstyle="gtl"; 
     477                                $f1=$rowb["schnittflae"]." m&#178;"; 
     478                                $f2="(von ".$rowb["gebflae"]." m&#178;)"; 
     479                        } 
     480                }        
     481        } 
     482 
     483        // Gruppenwechsel Bauwerks-Typ (Quell-Tabelle) - Zwischen-Überschrift 
     484        If ($btyp != $gwbwtyp) { 
     485                $gwbwtyp = $btyp; 
     486                if ($baunr === 1) {bauw_tab_head();} // Tab.-Kopf 
     487                switch ($btyp) { 
     488                        case $btyp_verkehr: 
     489                                $btyptitle='Bauwerk im Verkehrsbereich'; break; 
     490                        case $btyp_gewaesser: 
     491                                $btyptitle='Bauwerk im GewÀsserbereich'; break; 
     492                        case $btyp_sonst:  
     493                                $btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung'; break; 
     494                        case $btyp_indu: 
     495                                $btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe"; break; 
     496                        case $btyp_sport: 
     497                                $btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung"; break; 
     498                        case $btyp_leitg: 
     499                                $btyptitle="Leitung"; break; 
     500                        case $btyp_trans: 
     501                                $btyptitle="Transportanlage"; break; 
     502                        case $btyp_turm: 
     503                                $btyptitle="Turm"; break; 
     504                        case $btyp_vorrat: 
     505                                $btyptitle="VorratsbehÀlter, Speicherbauwerk"; break; 
     506                        default: 
     507                                $btyptitle='Fehler'; break; 
     508                } 
     509                echo "<tr><td colspan=3></td><td colspan=2 class='gw'>".$btyptitle."</td></tr>"; // ++ Symbol? 
     510        } 
     511 
     512        echo "\n<tr>"; 
     513                echo "\n\t<td>"; 
     514                if ($bbez != "") {echo "<span title='Bezeichnung'>".$bbez."</span> ";} 
     515                if ($bnam != "") {echo "<span title='Name'>".$bnam."</span> ";} 
     516                echo "</td>"; 
     517                echo "\n\t<td class='fla'>".$f1."</td>" 
     518                ."\n\t<td class='".$bstyle."'>".$f2."</td>"; // FlÀchenangaben 
     519                echo "\n\t<td>"; 
     520                if ($showkey) {echo "<span class='key'>(".$bfktk.")</span>&nbsp;";} // Bauwerksfunktion 
     521                echo "<span title='".$bfktd ."'>".$bfktv."</span>"; 
     522                echo "</td>"; 
     523 
     524                // Lage / Haus (nur bei Typ 3 sonstige) 
     525                echo "\n\t<td class='nwlink noprint'>"; // Link 
     526                if ($bgeb != "") { // gehört zu GebÀude 
     527                //      bw_gz_lage($bgeb); // Function: Lage (Adresse) ausgeben 
     528                        echo "\n\t\t<a title='gehört zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$bgeb; 
     529                        if ($showkey) {echo "&amp;showkey=j";} 
     530                        echo "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>"; 
     531                } 
     532                echo "\n\t</td>"; 
     533 
     534                // Bauwerk Details 
     535                echo "\n\t<td class='nwlink noprint'>"; // Link 
     536                echo "\n\t\t<a title='Bauwerksdaten' href='alkisbauwerk.php?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$bgml; 
     537                if ($showkey) {echo "&amp;showkey=j";} 
     538                echo "'>Bauwerk&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";  // +++ Icon fÃŒr Bauwerk schaffen +++ 
     539                echo "\n\t</td>" 
     540        ."\n</tr>"; 
     541} 
     542 
     543// Footer Bauwerk 
     544if ($baunr === 0) { 
     545        echo "\n<p>Kein Bauwerk auf diesem Flurst&uuml;ck.</p><br>"; 
     546        // if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlb."<br>$1 = gml_id = '".$gmlid."'</p>";} 
     547} else { 
     548        echo "\n<tr>" 
     549                ."\n\t<td>Summe:</td>" 
     550                ."\n\t<td class='fla sum' title='von Bauwerken &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($bauflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>" 
     551                ."\n\t<td colspan='6'>&nbsp;</td>" 
     552        ."\n</tr>" 
     553        ."\n</table>\n"; 
     554} 
     555pg_free_result($resb); 
    267556?> 
    268557  
     
    273562</div> 
    274563 
    275 <?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?> 
     564<?php footer($gmlid, selbstverlinkung()."?", ""); ?> 
    276565 
    277566</body> 
Note: See TracChangeset for help on using the changeset viewer.