source: trunk/var/www/info/alkis/alkisgebaeudenw.php @ 131

Revision 131, 11.8 KB checked in by frank.jaeger, 9 years ago (diff)

Buchauskunft-Anpassungen an geändertes Datenbank-Schema

Line 
1<?php
2/*      alkisgebaeudenw.php - Gebaeudenachweis
3        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
4
5        Version:
6        07.02.2011  *Left* Join - Fehlertoleranz bei unvollstaendigen Schluesseltabellen
7        25.07.2011  PostNAS 0.5/0.6 Versionen unterscheiden
8        26.07.2011  debug, SQL nur im Testmodus anzeigen
9        22.11.2011  Feld ax_gebaeude.description ist entfallen
10       
11        ToDo: lfd.Nr. der NebengebÀude alternativ zur Hausnummer anzeigen.
12                Dazu aber Join auf ax_lagebezeichnungmitpseudonummer notwendig.
13*/
14ini_set('error_reporting', 'E_ALL & ~ E_NOTICE');
15session_start();
16$gkz=urldecode($_REQUEST["gkz"]);
17require_once("alkis_conf_location.php");
18if ($auth == "mapbender") {
19        // Bindung an Mapbender-Authentifizierung
20        require_once($mapbender);
21} include("alkisfkt.php");
22?>
23<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
24<html>
25<head>
26        <meta name="author" content="F. Jaeger krz" >
27        <meta http-equiv="cache-control" content="no-cache">
28        <meta http-equiv="pragma" content="no-cache">
29        <meta http-equiv="expires" content="0">
30        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
31        <title>ALKIS Geb&auml;udenachweis</title>
32        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
33        <link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
34        <style type='text/css' media='print'>
35                .noprint {visibility: hidden;}
36        </style>
37</head>
38<body>
39<?php
40$gmlid=urldecode($_REQUEST["gmlid"]);
41$id = isset($_GET["id"]) ? $_GET["id"] : "n";
42if ($id == "j") {
43        $idanzeige=true;
44} else {
45        $idanzeige=false;
46}
47$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
48if ($keys == "j") {
49        $showkey=true;
50} else {
51        $showkey=false;
52}
53$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
54if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
55
56// Flurstueck
57$sqlf ="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, f.zeitpunktderentstehung, ";
58$sqlf.="g.gemarkungsnummer, g.bezeichnung ";
59$sqlf.="FROM ax_flurstueck f ";
60$sqlf.="LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
61$sqlf.="WHERE f.gml_id= $1;";
62$v = array($gmlid);
63$resf = pg_prepare("", $sqlf);
64$resf = pg_execute("", $v);
65if (!$resf) {
66        echo "\n<p class='err'>Fehler bei Flurst&uuml;cksdaten.</p>\n";
67        if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlf."<br>$1 = gml_id = '".$gmlid."'</p>";}
68}
69
70if ($rowf = pg_fetch_array($resf)) {
71        $gemkname=htmlentities($rowf["bezeichnung"], ENT_QUOTES, "UTF-8");
72        $gmkgnr=$rowf["gemarkungsnummer"];
73        $flurnummer=$rowf["flurnummer"];
74        $flstnummer=$rowf["zaehler"];
75        $nenner=$rowf["nenner"];
76        if ($nenner > 0) { // BruchNr
77                $flstnummer.="/".$nenner;
78        }
79        $flstflaeche = $rowf["amtlicheflaeche"] ;
80} else {
81        echo "<p class='err'>Fehler! Kein Treffer fuer gml_id=".$gmlid."</p>";
82}
83
84// Balken echo "<p class='geb'>ALKIS Flurst&uuml;ck (Geb&auml;ude) ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n";
85
86echo "\n<h2><img src='ico/Flurstueck.ico' width='16' height='16' alt=''> Flurst&uuml;ck (Geb&auml;ude)</h2>\n";
87
88// Kennzeichen in Rahmen
89echo "\n<table class='outer'>\n<tr>\n<td>";
90        echo "\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>";
91                echo "\n\t<tr>";
92                        echo "\n\t\t<td class='head'>Gmkg</td>";
93                        echo "\n\t\t<td class='head'>Flur</td>";
94                        echo "\n\t\t<td class='head'>Flurst-Nr.</td>";
95                echo "\n\t</tr>";
96                echo "\n\t<tr>";
97                        echo "\n\t\t<td title='Gemarkung'>";
98                        if  ($showkey) {
99                                echo "<span class='key'>".$gmkgnr."</span><br>";
100                        }
101                        echo $gemkname."&nbsp;</td>";
102                        echo "\n\t\t<td title='Flurnummer'>".$flurnummer."</td>";
103                        echo "\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>";
104                echo "\n\t</tr>";
105        echo "\n\t</table>";
106echo "\n</td>\n<td>";
107
108// Links zu anderen Nachweisen
109echo "\n\t<p class='nwlink noprint'>";
110        echo "\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
111        if ($idanzeige) {echo "&amp;id=j";}
112        if ($showkey)   {echo "&amp;showkey=j";}         echo "&amp;eig=n' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck <img src='ico/Flurstueck_Link.ico' width='16' height='16' alt=''></a>";
113echo "\n\t</p>";
114
115if ($idanzeige) {linkgml($gkz, $gmlid, "Flurst&uuml;ck"); }
116echo "\n\t</td>\n</tr>\n</table>";
117// Ende Seitenkopf
118
119echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".number_format($flstflaeche,0,",",".") . " m&#178;</b></p>";
120
121echo "\n\n<h3><img src='ico/Haus.ico' width='16' height='16' alt=''> Geb&auml;ude</h3>";
122echo "\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>";
123
124// G e b a e u d e
125// $sqlg ="SELECT g.gml_id, g.name, g.description, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, "; $sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, ";
126$sqlg.="h.bauweise_beschreibung, u.bezeichner, v.beziehungsart, v.beziehung_zu, s.lage, s.bezeichnung, l.hausnummer, ";
127
128// Gebaeudeflaeche komplett auch ausserhalb des FS
129$sqlg.="round(area(g.wkb_geometry)::numeric,2) AS gebflae, ";
130
131// wie viel vom GEB liegt im FS?
132$sqlg.="round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae, ";
133
134// liegt das GEB komplett im FS?
135$sqlg.="st_within(g.wkb_geometry,f.wkb_geometry) as drin ";
136
137// FS und GEB geometrisch verschneiden
138$sqlg.="FROM ax_flurstueck f, ax_gebaeude g ";
139
140// Entschluesseln
141$sqlg.="LEFT JOIN ax_gebaeude_bauweise h ON g.bauweise = h.bauweise_id ";
142$sqlg.="LEFT JOIN ax_gebaeude_funktion u ON g.gebaeudefunktion = u.wert ";
143
144// Weitere SchlÃŒsseltabellen (ab 11.2011)
145// ++ ax_gebaeude_zustand
146// ++ ax_gebaeude_weiterefunktion
147// ++ ax_gebaeude_dachform
148
149// Beziehungen verfolgen (holt die Hausnummer Hauptgeb.)
150$sqlg.="LEFT JOIN alkis_beziehungen v ON g.gml_id=v.beziehung_von ";
151$sqlg.="LEFT JOIN ax_lagebezeichnungmithausnummer l ON v.beziehung_zu=l.gml_id ";
152// Straßen-Name
153$sqlg.="LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde ";
154if ($dbvers=="05") {
155        $sqlg.="AND to_char(l.lage, 'FM00000') = lpad(s.lage,5,'0') ";
156} else { // ab PostNAS 06.
157        $sqlg.="AND l.lage=s.lage ";
158}
159// Alternativ zur Hauptgebaeude-Hausnummer auch die Nebengebaeude-Pseudo-Nummern suchen?
160// $sqlg.="LEFT JOIN ax_lagebezeichnungmitpseudonummer p ON ... ";
161// oder in Loop: Wenn HsNr leer ist, eine kurze Abfrage auf NebengebÀude-Nr.
162
163$sqlg.="WHERE f.gml_id= $1 "; // ID des akt. FS
164
165// "within" liefert nur Gebaeude, die komplett im Flurstueck liegen
166// "intersects" liefert ueberlappende Flaechen
167$sqlg.="AND st_intersects(g.wkb_geometry,f.wkb_geometry) = true ";
168
169// RLP: keine Relationen zu Nebengebaeuden:
170// auf Qualifizierung verzichten, sonst werden NebengebÀude nicht angezeigt
171        //$sqlg.="AND (v.beziehungsart='zeigtAuf' OR v.beziehungsart='hat') ";
172$sqlg.="ORDER BY schnittflae DESC;";
173
174$v = array($gmlid);
175$resg = pg_prepare("", $sqlg);
176$resg = pg_execute("", $v);
177if (!$resg) {
178        echo "\n<p class='err'>Keine Geb&auml;ude ermittelt.</p>\n";
179        if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
180}
181$gebnr=0;
182echo "\n<hr>\n<table class='geb'>";
183        // Header
184        echo "\n<tr>\n";
185                //echo "\n\t<td class='head' title='laufende Nummer'>Lfd. Nr.</td>";
186                echo "\n\t<td class='head' title='ggf. Hausnummer und/oder Geb&auml;udename'>Nr/Name</td>";
187                echo "\n\t<td class='head fla' title='Schnittsfl&auml;che'>Fl&auml;che</td>";
188                echo "\n\t<td class='head' title='Geb&auml;udefl&auml;che'>&nbsp;</td>";
189                echo "\n\t<td class='head' title='Anzahl oberirdischer Geschosse'>Gesch.</td>";
190                echo "\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>";
191                echo "\n\t<td class='head' title='Bauweise (Schl&uuml;ssel und Beschreibung)'>Bauweise</td>";
192                echo "\n\t<td class='head nwlink' title='Typ von .. und Link zur Lagebezeichnung'>Lage</td>";
193        echo "\n</tr>";
194        // Body
195        while($rowg = pg_fetch_array($resg)) {
196                $gebnr = $gebnr + 1;
197                $gebflsum = $gebflsum + $rowg["schnittflae"];
198                $skey=$rowg["lage"]; // Strassenschluessel             
199                $gnam=$rowg["name"];
200                echo "\n<tr>";
201                        if ($skey.$gnam != "") {        // Hausnummer und Strassenname oder Gebaeudename
202                                echo "\n\t<td title='Hauptgeb&auml;ude'>";
203                                        if ($showkey) {
204                                                echo "<span class='key'>(".$skey.")</span>&nbsp;";
205                                        }
206                                        echo htmlentities($rowg["bezeichnung"], ENT_QUOTES, "UTF-8")."&nbsp;"; // Str.-Name
207                                        echo $rowg["hausnummer"]."&nbsp;".$gnam;
208                                        if ($idanzeige) {
209                                                linkgml($gkz, $rowg["gml_id"], "Geb&auml;ude");
210                                        }
211                                echo "</td>";
212                        } else {
213                                echo "\n\t<td title='Nebengeb&auml;ude'>";
214                                        echo "(Nebengeb&auml;ude)"; // +++ nur vorlaeufiger Platzhalter! Hier kommt lfd-Nr hin.
215                                        // +++ SQL-Abfrage auf ax_LagebezeichnungMitPseudonummer
216                                echo "</td>";           
217                        }
218
219                        if ($rowg["drin"] == "t") { // 3 komplett enthalten
220                                echo "\n\t<td class='fla'>".$rowg["schnittflae"]." m&#178;</td>";
221                                echo "\n\t<td>&nbsp;</td>";
222                        } else {
223                if ($rowg["schnittflae"] == "0.00") { // angrenzend
224                                        echo "\n\t<td class='fla'>&nbsp;</td>";
225                                        echo "\n\t<td>angrenzend</td>";
226                                } else { // Teile enthalten
227                                        echo "\n\t<td class='fla'>".$rowg["schnittflae"]." m&#178;</td>";
228                                        echo "\n\t<td>(von ".$rowg["gebflae"]." m&#178;)</td>";
229                                }
230                        }
231
232                        echo "\n\t<td>".$rowg["aog"]."&nbsp;</td>";
233
234                        echo "\n\t<td>";
235                        if ($showkey) {
236                                echo "<span class='key'>".$rowg["gebaeudefunktion"]."</span>&nbsp;";
237                        }
238                        echo $rowg["bezeichner"]."</td>";
239
240                        echo "\n\t<td>";
241                        if ($showkey) {
242                                echo "<span class='key'>".$rowg["bauweise"]."</span>&nbsp;";
243                        }
244                        echo $rowg["bauweise_beschreibung"]."&nbsp;</td>";
245
246                        echo "\n\t<td class='nwlink noprint'>";
247                        $bezieh=$rowg["beziehungsart"];
248                        if (!$bezieh == "" ) {
249                                $gmllag=$rowg["beziehung_zu"];
250                                switch ($bezieh) {
251                                        case "hat":                     // *P*seudonummer
252                                                echo "\n\t\t<a title='Lagebezeichnung' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag;
253                                                if ($idanzeige) {echo "&amp;id=j";}
254                                                echo "&amp;ltyp=p'>lfd-Nr <img src='ico/Lage_mit_Haus.ico' width='16' height='16' alt=''></a>";
255                                                break;
256                                        case "zeigtAuf":        // *M*it HausNr
257                                                echo "\n\t\t<a title='Lagebezeichnung' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag;
258                                                if ($idanzeige) {echo "&amp;id=j";}
259                                                echo "&amp;ltyp=m'>Haus-Nr <img src='ico/Lage_mit_Haus.ico' width='16' height='16' alt=''></a>";
260                                                break;
261                                        default:
262                                                echo "<p>unbekannte Beziehungsart ".$bezieh."</p>";
263                                                break;
264                                }
265                        }
266                        echo "\n\t</td>";
267                echo "\n</tr>";
268        } // Footer
269        if ($gebnr == 0) {
270                echo "\n</table>";
271                echo "<p class='err'><br>Keine Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>";
272        } else {
273                echo "\n<tr>";
274                        echo "\n\t<td>Summe:</td>"; // 1
275                        echo "\n\t<td class='fla sum'>".number_format($gebflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>";
276                        echo "\n\t<td>&nbsp;</td>"; // 3
277                        echo "\n\t<td>&nbsp;</td>"; // 4
278                        echo "\n\t<td>&nbsp;</td>"; // 5
279                        echo "\n\t<td>&nbsp;</td>"; // 6
280                        echo "\n\t<td>&nbsp;</td>"; // 7
281                echo "\n</tr>";
282        echo "\n</table>";
283        $unbebaut = number_format(($flstflaeche - $gebflsum),0,",",".") . " m&#178;";         echo "\n<p>Flurst&uuml;cksfl&auml;che abz&uuml;glich Geb&auml;udefl&auml;che: <b>".$unbebaut."</b></p><br>";
284}
285
286?>
287<form action=''>
288        <div class='buttonbereich noprint'>
289        <hr>
290                <input type='button' name='back'  value='&lt;&lt;' title='Zur&uuml;ck'  onClick='javascript:history.back()'>&nbsp;
291                <input type='button' name='print' value='Druck' title='Seite Drucken' onClick='window.print()'>&nbsp;
292                <input type='button' name='close' value='X' title='Fenster schlie&szlig;en' onClick='window.close()'>
293        </div>
294</form>
295
296<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
297
298</body>
299</html>
Note: See TracBrowser for help on using the repository browser.