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

Revision 377, 14.8 KB checked in by frank.jaeger, 7 years ago (diff)

ALKIS-Auskunft: in info/alkis/ den Stand 372 wieder hergestellt (Versionen aus "alkisn" versehendlich dort hoch geladen).
In info/alkisn/ Nachbesserungen an Gebäude-Name und Nutzungsart.

Line 
1<?php
2/*      alkishaus.php - viele Daten zu EINEM ALKIS-GebÀude-Objekt
3        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
4
5        Version:
6        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
10        ToDo:
11        - sinnvolle Sortierung und Gruppierung der Felder
12        - geometrische Suche nach FS, auf denen das Haus steht
13        - Template im WMS auf Ebene GebÀude hierhin verknÃŒpfen.
14        - Relationen abbilden:
15                ax_gebaeude >gehoertZu> ax_gebaeude  (ringförmige Verbindung GebÀudekomplex)
16                ax_gebaeude (umschliesst) ax_bauteil
17                ax_gebaeude >gehoert> ax_person (Ausnahme)
18*/
19session_start();
20$id="n";
21$allfld = "n";
22$cntget = extract($_GET);
23require_once("alkis_conf_location.php");
24if ($auth == "mapbender") {require_once($mapbender);}
25include("alkisfkt.php");
26$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
27if ($keys == "j") {$showkey=true;} else {$showkey=false;}
28if ($allfld == "j") {$allefelder=true;} else {$allefelder=false;}
29?>
30<!doctype html>
31<html lang="de">
32<head>
33        <meta charset="utf-8">
34        <title>ALKIS Daten zum Haus</title>
35        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
36        <link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
37        <style type='text/css' media='print'>
38                .noprint {visibility: hidden;}
39                td.mittelspalte {width: 190px;}
40        </style>
41</head>
42<body>
43<?php
44
45$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkishaus.php'");
46if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
47
48// G e b a e u d e
49
50$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, g.anzahlderoberirdischengeschosse AS aog, g.anzahlderunterirdischengeschosse AS aug,
51g.lagezurerdoberflaeche, g.dachgeschossausbau, g.zustand, array_to_string(g.weiteregebaeudefunktion, ',') AS wgf, g.dachform, g.hochhaus, g.objekthoehe, g.geschossflaeche, g.grundflaeche, g.umbauterraum, g.baujahr, g.dachart, g.qualitaetsangaben,
52h.v AS bbauw, h.d AS dbauw, u.v AS bfunk, u.d AS dfunk, z.v AS zustandv, z.d AS zustandd, d.v AS bdach, a.v AS dgaus, o.v AS oflv, o.d AS ofld,
53round(st_area(g.wkb_geometry)::numeric,2) AS gebflae
54FROM ax_gebaeude g
55LEFT JOIN alkis_wertearten h ON cast(g.bauweise AS character varying)=h.k AND h.element='ax_gebaeude' AND h.bezeichnung='bauweise'
56LEFT JOIN alkis_wertearten u ON cast(g.gebaeudefunktion AS character varying)=u.k AND u.element='ax_gebaeude' AND u.bezeichnung='gebaeudefunktion'
57LEFT JOIN alkis_wertearten z ON cast(g.zustand AS character varying)=z.k AND z.element='ax_gebaeude' AND z.bezeichnung='zustand'
58LEFT JOIN alkis_wertearten d ON cast(g.dachform AS character varying)=d.k AND d.element='ax_gebaeude' AND d.bezeichnung='dachform'
59LEFT JOIN alkis_wertearten a ON cast(g.dachgeschossausbau AS character varying)=a.k AND a.element='ax_gebaeude' AND a.bezeichnung='dachgeschossausbau'
60LEFT JOIN alkis_wertearten o ON cast(g.lagezurerdoberflaeche AS character varying)=o.k AND o.element='ax_gebaeude' AND o.bezeichnung='lagezurerdoberflaeche'
61WHERE g.gml_id= $1 AND g.endet IS NULL;";
62
63$v = array($gmlid);
64$resg = pg_prepare("", $sqlg);
65$resg = pg_execute("", $v);
66if (!$resg) {
67        echo "\n<p class='err'>Fehler bei Geb&auml;ude.<br>".pg_last_error()."</p>\n";
68        if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
69}
70
71// Balken
72echo "<p class='geb'>ALKIS Haus ".$gmlid."&nbsp;</p>\n"; // ++ Kennzeichen?
73
74echo "\n<h2><img src='ico/Haus.png' width='16' height='16' alt=''> Haus (Geb&auml;ude)</h2>\n";
75
76// Kennzeichen in Rahmen
77// - Welches Kennzeichen zum Haus ?
78echo "\n<hr>";
79// Umschalter: auch leere Felder ausgeben?
80echo "<p class='nwlink noprint'>";
81echo "Umschalten: <a class='nwlink' href='".$_SERVER['PHP_SELF']."?gkz=".$gkz."&amp;gmlid=".$gmlid;
82        if ($showkey) {echo "&amp;showkey=j";} else {echo "&amp;showkey=n";}
83        if ($allefelder) {
84                echo "&amp;allfld=n'>nur Felder mit Inhalt";
85        } else {
86                echo "&amp;allfld=j'>auch leere Felder";
87        }
88echo "</a></p>";
89
90$gebnr = 0;
91
92while($rowg = pg_fetch_array($resg)) { // Schleife, kann aber nur EIN Haus sein.
93        $gebnr++;
94        echo "\n<table class='geb'>"
95        ."\n<tr>\n"
96                ."\n\t<td class='head' title=''>Attribut</td>"
97                ."\n\t<td class='head mittelspalte' title=''>Wert</td>"
98                ."\n\t<td class='head' title=''>Erkl&auml;rung</td>"
99        ."\n</tr>";
100
101        $aog=$rowg["aog"];
102        $aug=$rowg["aug"];
103        $hoh=$rowg["hochhaus"];
104        $nam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array in der DB: '{"A","B"}'
105        // Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum !?
106        /* SELECT name FROM ax_gebaeude WHERE NOT name IS NULL AND array_length(name, 1) > 1; */
107        $kfunk=$rowg["gebaeudefunktion"];
108        $bfunk=$rowg["bfunk"];
109        $dfunk=$rowg["dfunk"];
110
111        $baw=$rowg["bauweise"];
112        $bbauw=$rowg["bbauw"];
113        $dbauw=$rowg["dbauw"];
114
115        $ofl=$rowg["lagezurerdoberflaeche"];
116        $oflv=$rowg["oflv"];
117        $ofld=$rowg["ofld"];
118
119        $dga=$rowg["dachgeschossausbau"]; // Key
120        $dgav=$rowg["dgaus"]; // Value
121
122        $zus=$rowg["zustand"]; // Key
123        $zusv=$rowg["zustandv"]; // Value
124        $zusd=$rowg["zustandd"]; // Description
125
126        $wgf=$rowg["wgf"]; // Array-> kommagetrennte Liste
127
128        $daf=$rowg["dachform"]; // Key
129        $dach=$rowg["bdach"]; // Value
130
131        $hho=$rowg["objekthoehe"];
132        $gfl=$rowg["geschossflaeche"];
133        $grf=$rowg["grundflaeche"];
134        $ura=$rowg["umbauterraum"];
135        $bja=$rowg["baujahr"];
136        $daa=$rowg["dachart"];
137        $qag=$rowg["qualitaetsangaben"];
138
139        if (($nam != "") OR $allefelder) {
140                echo "\n<tr>"
141                        ."\n\t<td class='li'>Name</td>"
142                        ."\n\t<td>".$nam."</td>"
143                        ."\n\t<td class='erkl'>'Name' ist der Eigenname oder die Bezeichnung des Geb&auml;udes.</td>"
144                ."\n</tr>";
145        }
146
147        // 0 bis N   L a g e bezeichnungen mit Haus- oder Pseudo-Nummer
148
149        // HAUPTgebÀude
150        $sqll ="SELECT 'm' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer FROM ax_gebaeude g
151        JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf)
152        JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
153        WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL";
154        // oder NEBENgebÀude
155        $sqll.=" UNION
156        SELECT 'p' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer
157        FROM ax_gebaeude g
158        JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat
159        JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
160        WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL ";
161
162        $sqll.="ORDER BY bezeichnung, hausnummer ;";
163
164        $v = array($gmlid);
165        $resl = pg_prepare("", $sqll);
166        $resl = pg_execute("", $v);
167        if (!$resl) {
168                echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>\n";
169                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";}
170        }
171        $zhsnr=0;
172        while($rowl = pg_fetch_array($resl)) { // LOOP: Lagezeilen
173                $zhsnr++;
174                $ltyp=$rowl["ltyp"]; // Lagezeilen-Typ
175                $skey=$rowl["lage"]; // Str.-Schluessel
176                $snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); // -Name
177                $hsnr=$rowl["hausnummer"];
178                $hlfd=$rowl["laufendenummer"];
179                $gmllag=$rowl["gmllag"];
180
181                if ($zhsnr == 1) {
182                        echo "\n<tr>"
183                                ."\n\t<td class='li' title='Lage mit Hausnummer oder Pseudonummer'>Adresse</td>"
184                                ."\n\t<td class='fett'>";
185                }
186                echo "\n\t\t<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''>&nbsp;";
187                if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}                     
188                echo "\n\t\t<a title='Hausnummer' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp."'>"
189                        .$snam."&nbsp;".$hsnr;
190                        if ($ltyp == "p") {echo ", lfd.Nr ".$hlfd;}
191                echo "</a><br>";
192        } // Ende Loop Lagezeilen m.H.
193        if ($zhsnr > 0) {echo "\n\t</td>\n\t<td>&nbsp;</td>\n</tr>";}
194
195        // GebÀudefunktion
196        echo "\n<tr>"
197                ."\n\t<td class='li'>Geb&auml;udefunktion</td>"
198                ."\n\t<td class='fett'>";
199                if ($showkey) {echo "<span class='key'>".$kfunk."</span>&nbsp;";}
200                echo $bfunk."</td>"
201                ."\n\t<td class='erkl'>'Geb&auml;udefunktion' ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'<br>".$dfunk."</td>"
202        ."\n</tr>";
203
204        // Bauweise
205        if ($baw != "" OR $allefelder) {
206                echo "\n<tr>"
207                        ."\n\t<td class='li'>Bauweise</td>"
208                        ."\n\t<td class='fett'>";
209                        if ($showkey) {echo "<span class='key'>".$baw."</span>&nbsp;";}
210                        echo $bbauw."</td>"
211                        ."\n\t<td class='erkl'>'Bauweise' ist die Beschreibung der Art der Bauweise.<br>".$dbauw."</td>"
212                ."\n</tr>";
213        }
214
215        // Geschosse
216        if ($aog != "" OR $allefelder) {
217                echo "\n<tr>"
218                        ."\n\t<td class='li'>Geschosse</td>"
219                        ."\n\t<td class='fett'>".$aog."</td>"
220                        ."\n\t<td class='erkl'>Anzahl oberirdischer Geschosse</td>"
221                ."\n</tr>";
222        }
223
224        // U-Geschosse
225        if ($aug != "" OR $allefelder) {
226                echo "\n<tr>"
227                        ."\n\t<td class='li'>U-Geschosse</td>"
228                        . "\n\t<td class='fett'>".$aug."</td>"
229                        ."\n\t<td class='erkl'>Anzahl unterirdischer Geschosse</td>"
230                ."\n</tr>";
231        }
232
233        // Hochhaus
234        if ($hoh != "" OR $allefelder) {
235                echo "\n<tr>"
236                        ."\n\t<td class='li'>Hochhaus</td>"
237                        ."\n\t<td class='fett'>".$hoh."</td>"
238                        ."\n\t<td class='erkl'>'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.</td>"
239                ."\n</tr>";
240        }
241
242        // Lage zur ErdoberflÀche
243        if ($ofl != "" OR $allefelder) {
244                echo "\n<tr>"
245                        ."\n\t<td class='li'>Lage zur Erdoberfl&auml;che</td>"
246                        ."\n\t<td class='fett'>";
247                        if ($showkey) {echo "<span class='key'>".$ofl."</span>&nbsp;";}
248                        echo $oflv."</td>"
249                        ."\n\t<td class='erkl'>'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>".$ofld."</td>"
250                ."\n</tr>";
251        }
252
253        // Dachgeschossausbau
254        // nichts dazu in alkis_wertearten.d
255        if ($dga != "" OR $allefelder) {
256                echo "\n<tr>"
257                        ."\n\t<td class='li'>Dachgeschossausbau</td>"
258                        ."\n\t<td class='fett'>";
259                        if ($showkey) {echo "<span class='key'>".$dga."</span>&nbsp;";}
260                        echo $dgav."</td>"
261                        ."\n\t<td class='erkl'>'Dachgeschossausbau' ist ein Hinweis auf den Ausbau bzw. die Ausbauf&auml;higkeit des Dachgeschosses.</td>"
262                ."\n</tr>";
263        }
264
265        // Zustand
266        if ($zus != "" OR $allefelder) {
267                echo "\n<tr>"
268                        ."\n\t<td class='li'>Zustand</td>"
269                        ."\n\t<td class='fett'>";
270                        if ($showkey) {echo "<span class='key'>".$zus."</span>&nbsp;";}
271                        echo $zusv."</td>"
272                        ."\n\t<td class='erkl'>'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.<br>".$zusd."</td>"
273                ."\n</tr>";
274        }
275
276        // Weitere GebÀudefunktionen
277        // Suche Testfall: SELECT * FROM ax_gebaeude WHERE NOT weiteregebaeudefunktion IS NULL;
278        // Keiner zu finden. Das folgende ungetestet:
279        if ($wgf != "" OR $allefelder) { // "weiteregebaeudefunktion" ist ein Array
280                echo "\n<tr>"
281                        ."\n\t<td class='li'>Weitere Geb&auml;udefunktionen</td>"
282                        ."\n\t<td>";
283                        if ($wgf != "") { // Kommagetrennte Liste aus Array
284                                $sqlw="SELECT k, v, d FROM alkis_wertearten WHERE k IN ( $1 ) AND element='ax_gebaeude' AND bezeichnung='weiteregebaeudefunktion' ORDER BY k;";
285                                $v = array($wgf);
286                                $resw = pg_prepare("", $sqlw);
287                                $resw = pg_execute("", $v);
288                                if (!$resw) {
289                                        echo "\n<p class='err'>Fehler bei Geb&auml;ude - weitere Funktion.</p>\n";
290                                        if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqlw."<br>$1 = Werteliste = '".$wgf."'</p>";}
291                                }
292                                $zw=0;
293                                while($roww = pg_fetch_array($resw)) { // LOOP: w.Funktion
294                                        if ($zw > 0) {echo "<br>";}
295                                        if ($showkey) {echo "<span class='key'>".$roww["k"]."</span>&nbsp;";}
296                                        echo "<span title='".$roww["d"]."'>".$roww["v"]."</span>";
297                                        $zw++;
298                           }
299                        }
300                        echo "</td>"
301                        ."\n\t<td class='erkl'>'Weitere Geb&auml;udefunktion' ist die Funktion, die ein Geb&auml;ude neben der dominierenden Geb&auml;udefunktion hat.</td>"
302                ."\n</tr>";
303        }
304
305        // Dachform
306        // nichts dazu in alkis_wertearten.d
307        if ($daf != "" OR $allefelder) {
308                echo "\n<tr>"
309                        ."\n\t<td class='li'>Dachform</td>"
310                        ."\n\t<td class='fett'>";
311                        if ($showkey) {echo "<span class='key'>".$daf."</span>&nbsp;";}
312                        echo $dach."</td>"
313                        ."\n\t<td class='erkl'>'Dachform' beschreibt die charakteristische Form des Daches.</td>"
314                ."\n</tr>";
315        }
316
317        // Objekthöhe
318        if ($hho != "" OR $allefelder) {
319                echo "\n<tr>"
320                        ."\n\t<td class='li'>Objekth&ouml;he</td>"
321                        ."\n\t<td class='fett'>".$hho."</td>"
322                        ."\n\t<td class='erkl'>'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.</td>"
323                ."\n</tr>";
324        }
325
326        // GeschossflÀche
327        if ($gfl != "" OR $allefelder) {
328                echo "\n<tr>"
329                        ."\n\t<td class='li'>Geschossfl&auml;che</td>"
330                        ."\n\t<td class='fett'>";
331                        if ($gfl != "") {echo $gfl." m&#178;";}
332                        echo "</td>"
333                        ."\n\t<td class='erkl'>'Geschossfl&auml;che' ist die Geb&auml;udegeschossfl&auml;che in [qm].</td>"
334                ."\n</tr>";
335        }
336
337        // GrundflÀche
338        if ($grf != "" OR $allefelder) {
339                echo "\n<tr>"
340                        ."\n\t<td class='li'>Grundfl&auml;che</td>"
341                        ."\n\t<td class='fett'>";
342                        if ($grf != "") {echo $grf." m&#178;";}
343                        echo "\n\t<td class='erkl'>'Grundfl&auml;che' ist die Geb&auml;udegrundfl&auml;che in [qm].</td>"
344                ."\n</tr>";
345        }
346
347        // Umbauter Raum
348        if ($ura != "" OR $allefelder) {
349                echo "\n<tr>"
350                        ."\n\t<td class='li'>Umbauter Raum</td>"
351                        ."\n\t<td class='fett'>".$ura."</td>"
352                        ."\n\t<td class='erkl'>'Umbauter Raum' ist der umbaute Raum [Kubikmeter] des Geb&auml;udes.</td>"
353                ."\n</tr>";
354        }
355
356        // Baujahr
357        if ($bja != "" OR $allefelder) {
358                echo "\n<tr>"
359                        ."\n\t<td class='li'>Baujahr</td>"
360                        ."\n\t<td class='fett'>".$bja."</td>"
361                        ."\n\t<td class='erkl'>'Baujahr' ist das Jahr der Fertigstellung oder der baulichen Ver&auml;nderung des Geb&auml;udes.</td>"
362                ."\n</tr>";
363        }
364
365        // Dachart
366        if ($daa != "" OR $allefelder) {
367                echo "\n<tr>"
368                        ."\n\t<td class='li'>Dachart</td>"
369                        ."\n\t<td class='fett'>".$daa."</td>"
370                        ."\n\t<td class='erkl'>'Dachart' gibt die Art der Dacheindeckung (z.B. Reetdach) an.</td>"
371                ."\n</tr>";
372        }
373
374        // QualitÀtsangaben
375        if ($qag != "" OR $allefelder) {
376                echo "\n<tr>"
377                        ."\n\t<td class='li'>Qualit&auml;tsangaben</td>"
378                        ."\n\t<td class='fett'>".$qag."</td>"
379                        ."\n\t<td class='erkl'>Angaben zur Herkunft der Informationen (Erhebungsstelle). Die Information ist konform zu den Vorgaben aus ISO 19115 zu repr&auml;sentieren.</td>"
380                ."\n</tr>";
381        }
382        echo "\n</table>";
383}
384if ($gebnr == 0) {echo "<p class='err'><br>Kein Geb&auml;ude gefunden<br>&nbsp;</p>";}
385
386// ++ ToDo: Verschnitt mit FS?
387
388?>
389
390<div class='buttonbereich noprint'>
391<hr>
392        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
393        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
394</div>
395
396<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
397
398</body>
399</html>
Note: See TracBrowser for help on using the repository browser.