source: trunk/info/info/alkis/alkishaus.php @ 376

Revision 376, 14.6 KB checked in by frank.jaeger, 7 years ago (diff)

Verbesserungen an der ALKIS-Buchauskunft (Geschwindigkeit, Fehlerkorrekturen, Mandantenfähigkeit) und an der Mapbender2-Navigation.

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