source: trunk/info/info/alkisn/alkisgebaeudenw.php @ 402

Revision 402, 13.1 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Buchauskunft überarbeitet. z.B. Flurstücksnachweis mit allen Buchungen.

Line 
1<?php
2/*      alkisgebaeudenw.php - Gebaeudenachweis
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        2017-06-08 Validierung Eingabeparameter, Feinkorrekturen
10        2017-06-19 Tool-Tip GebÀudefunktion
11        2018-04-23 Kennzeichen eingerÃŒckt, &nodebug
12*/
13session_start();
14$showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
15$cntget = extract($_GET); // Parameter in Variable umwandeln
16
17// strikte Validierung aller Parameter
18if (!isset($gmlid) or !preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
19if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
20if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
21if ($showkey == "j") {$showkey=true;} else {$showkey=false;}
22if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
23
24require_once("alkis_conf_location.php");
25if ($auth == "mapbender") {require_once($mapbender);}
26include("alkisfkt.php");
27echo <<<END
28<!doctype html>
29<html lang="de">
30<head>
31        <meta charset="utf-8">
32        <meta name="viewport" content="width=device-width, initial-scale=1.0">
33        <title>ALKIS Geb&auml;udenachweis</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</head>
37<body>
38END;
39// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
40// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
41if ($nodebug == "j") {$debug=0;}
42
43$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgebaeudenw.php'");
44if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
45
46// Flurstueck
47$sqlf="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, f.zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung
48FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
49WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
50$v=array($gmlid);
51$resf=pg_prepare("", $sqlf);
52$resf=pg_execute("", $v);
53if (!$resf) {
54        echo "\n<p class='err'>Fehler bei Flurst&uuml;cksdaten.</p>";
55        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlf."<br>$1 = gml_id = '".$gmlid."'</p>";}
56}
57if ($rowf = pg_fetch_assoc($resf)) {
58        $gemkname=htmlentities($rowf["bezeichnung"], ENT_QUOTES, "UTF-8");
59        $gmkgnr=$rowf["gemarkungsnummer"];
60        $flurnummer=$rowf["flurnummer"];
61        $flstnummer=$rowf["zaehler"];
62        $nenner=$rowf["nenner"];
63        if ($nenner > 0) { // BruchNr
64                $flstnummer.="/".$nenner;
65        }
66        $flstflaeche = $rowf["amtlicheflaeche"] ;
67} else {
68        echo "\n<p class='err'>Fehler! Kein Treffer fuer gml_id=".$gmlid."</p>";
69}
70echo "<p class='geb'>ALKIS Flurst&uuml;ck (Geb&auml;ude) ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"; // Balken
71echo "\n<h2>Flurst&uuml;ck (Geb&auml;ude)</h2>";
72echo "\n<table class='outer'>" // Kopf
73        ."\n<tr>"
74                ."\n\t<td>"
75                ."\n\t<td class='ll'><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Kennzeichen:</td>"
76                ."\n\t<td>"
77                        ."\n\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>" // Kennzeichen in Rahmen
78                                ."\n\t\t<tr>"
79                                        ."\n\t\t\t<td class='head'>Gemarkung</td>"
80                                        ."\n\t\t\t<td class='head'>Flur</td>"
81                                        ."\n\t\t\t<td class='head'>Flurst-Nr.</td>"
82                                ."\n\t\t</tr>\n\t\t<tr>"
83                                        ."\n\t\t\t<td title='Gemarkung'>";
84                                        if  ($showkey) {echo "<span class='key'>".$gmkgnr."</span><br>";}
85                                        echo $gemkname."&nbsp;</td>"
86                                        ."\n\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
87                                        ."\n\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>"
88                                ."\n\t\t</tr>"
89                        ."\n\t\t</table>"
90                ."\n\t</td>"
91                ."\n\t<td>"
92                        ."\n\t\t<p class='nwlink noprint'>" // Links zu anderem Nachweis
93                                ."\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
94                                if ($showkey) {echo "&amp;showkey=j";}
95                                echo "&amp;eig=n' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck <img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
96                        ."\n\t\t</p>"
97                ."\n\t</td>"
98        ."\n</tr>"
99."\n</table>";
100
101echo "\n<p class='fsd'>Flurst&uuml;cksfl&auml;che: <b>".number_format($flstflaeche,0,",",".") . " m&#178;</b></p>";
102pg_free_result($resf);
103
104echo "\n\n<h3><img src='ico/Haus.png' width='16' height='16' alt=''> Geb&auml;ude</h3>"
105."\n<p>.. auf oder an dem Flurst&uuml;ck. Ermittelt durch Verschneidung der Geometrie.</p>";
106
107// G e b a e u d e
108$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, h.v AS bauweise_beschreibung, u.v AS bezeichner, u.d AS gfktd, g.zustand, z.v AS bzustand,
109round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-Flaeche komplett auch die Fl. ausserhalb des FS
110$sqlg.="round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae, "; // wie viel vom GEB liegt im FS?
111$sqlg.="st_within(g.wkb_geometry,f.wkb_geometry) as drin "; // liegt das GEB komplett im FS?
112$sqlg.="FROM ax_flurstueck f, ax_gebaeude g
113LEFT JOIN alkis_wertearten h ON cast(g.bauweise AS character varying) = h.k AND h.element='ax_gebaeude' and h.bezeichnung='bauweise'
114LEFT JOIN alkis_wertearten u ON cast(g.gebaeudefunktion AS character varying) = u.k AND u.element='ax_gebaeude' and u.bezeichnung='gebaeudefunktion'
115LEFT JOIN alkis_wertearten z ON cast(g.zustand AS character varying) = z.k AND z.element='ax_gebaeude' and z.bezeichnung='zustand'
116WHERE f.gml_id= $1 AND f.endet IS NULL and g.endet IS NULL "; // ID des akt. FS
117
118// "within" -> nur Geb., die komplett im FS liegen. "intersects" -> auch teil-ueberlappende Flst.
119$sqlg.="AND st_intersects(g.wkb_geometry,f.wkb_geometry) = true ";
120// RLP: keine Relationen zu NebengebÀuden. Auf Qualifizierung verzichten, sonst werden NebengebÀude nicht angezeigt
121//$sqlg.="AND (v.beziehungsart='zeigtAuf' OR v.beziehungsart='hat') ";
122$sqlg.="ORDER BY schnittflae DESC;";
123
124$v=array($gmlid);
125$resg=pg_prepare("", $sqlg);
126$resg=pg_execute("", $v);
127if (!$resg) {
128        echo "\n<p class='err'>Fehler bei Geb&auml;ude-Verschneidung.</p>";
129        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlg."<br>$1 = gml_id = '".$gmlid."'</p>";}
130}
131$gebnr=0;
132$gebflsum=0;
133echo "\n<hr>\n<table class='geb'>";
134        echo "\n<tr>" // T-Header
135                ."\n\t<td class='head' title='ggf. Geb&auml;udename'>Name</td>"
136                ."\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>"
137                ."\n\t<td class='head' title='gesamte Geb&auml;udefl&auml;che, liegt teilweise auf Nachbar-Flurst&uuml;ck'>&nbsp;</td>"
138                ."\n\t<td class='head' title='Geb&auml;udefunktion ist die zum Zeitpunkt der Erhebung vorherrschend funktionale Bedeutung des Geb&auml;udes'>Funktion</td>"
139                ."\n\t<td class='head' title='Bauweise ist die Beschreibung der Art der Bauweise'>Bauweise</td>"
140                ."\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>"
141                ."\n\t<td class='head nwlink' title='Lagebezeichnung mit Stra&szlig;e und Hausnummer'>Lage</td>"
142                ."\n\t<td class='head nwlink' title='Link zu den kompletten Hausdaten'>Haus</td>"
143        ."\n</tr>";
144        while($rowg = pg_fetch_assoc($resg)) { // T-Body
145                $gebnr = $gebnr + 1;
146                $ggml=$rowg["gml_id"];
147                $gebflsum=$gebflsum + $rowg["schnittflae"];
148                $gnam=trim(trim($rowg["name"], "{}"), '"'); // Gebaeude-Name ist ein Array in der DB: '{"A","B"}'
149                // Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum!?
150                /* SELECT name FROM ax_gebaeude WHERE NOT name IS NULL AND array_length(name, 1) > 1; */
151                $gfktk=htmlentities($rowg["gebaeudefunktion"], ENT_QUOTES, "UTF-8");  // Geb.-Funktion Key
152                $gfktv=htmlentities($rowg["bezeichner"], ENT_QUOTES, "UTF-8"); // Geb.Funktion Value
153                $gfktd=htmlentities($rowg["gfktd"], ENT_QUOTES, "UTF-8"); // GebÀude-Funktion-Description
154                $gzus=htmlentities($rowg["zustand"], ENT_QUOTES, "UTF-8");
155                $gzustand=htmlentities($rowg["bzustand"], ENT_QUOTES, "UTF-8");
156
157                // 3 FÀlle unterscheiden:
158                if ($rowg["drin"] == "t") { // GebÀude liegt komplett in FlurstÃŒck
159                        $f1=$rowg["schnittflae"]." m&#178;";
160                        $f2="&nbsp;";
161                        $gstyle="gin"; // siehe .css
162                } else {
163                if ($rowg["schnittflae"] == "0.00") { // GebÀude angrenzend (Grenzbebauung)
164                                $gstyle="gan";
165                                $f1="&nbsp;";
166                                $f2="angrenzend";
167                        } else { // Teile des GebÀudes stehen auf dem FlurstÃŒck
168                                $gstyle="gtl";
169                                $f1=$rowg["schnittflae"]." m&#178;";
170                                $f2="(von ".$rowg["gebflae"]." m&#178;)";
171                        }
172                }
173
174                echo "\n<tr>"
175                        ."\n\t<td class='".$gstyle."'>"; // Sp. 1 Name
176                        if ($gnam != "") {echo "<span title='Geb&auml;udename'>".$gnam."</span><br>";}
177                        echo "</td>";
178
179                        echo "\n\t<td class='fla'>".$f1."</td>" // Sp. 2
180                        ."\n\t<td class='".$gstyle."'>".$f2."</td>"; // FlÀchenangaben
181
182                        echo "\n\t<td class='".$gstyle."' title='".$gfktd."'>"; // Sp. 3 Funktion
183                        if ($showkey) {echo "<span class='key'>".$gfktk."</span>&nbsp;";}
184                        echo $gfktv."</td>";
185
186                        echo "\n\t<td class='".$gstyle."'>";
187                        if ($showkey) {echo "<span class='key'>".$rowg["bauweise"]."</span>&nbsp;";}
188                        echo $rowg["bauweise_beschreibung"]."&nbsp;</td>";
189
190                        echo "\n\t<td class='".$gstyle."'>";
191                        if ($showkey) {echo "<span class='key'>".$gzus."</span>&nbsp;";}
192                        echo $gzustand."&nbsp;</td>";
193
194                        // 2 Spalten mit Links zu anderen Nachweisen: 1. Lage, 2. GebÀude
195                        echo "\n\t<td class='nwlink noprint'>"; // Link Lage
196
197                        // Zu EINEM GebÀude mehrere Lagebezeichnungen mit Haus- oder Pseudo-Nummer möglich, alle in ein TD
198                        // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere)
199                        $sqll="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer "
200                        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
201                        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
202                        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
203
204                        // UNION - oder NEBENgebÀude  Geb >hat> Pseudo
205                        $sqll.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer "
206                        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat "
207                        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
208                        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses"
209               
210                        $sqll.="ORDER BY bezeichnung, hausnummer;";
211                        $v = array($ggml);
212                        $resl = pg_prepare("", $sqll);
213                        $resl = pg_execute("", $v);
214                        if (!$resl) {
215                                echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>";
216                                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqll."<br>$1 = gml_id = '".$gmlid."'</p>";}
217                        }
218                        while($rowl = pg_fetch_assoc($resl)) { // LOOP: Lagezeilen
219                                $ltyp=$rowl["ltyp"]; // Lagezeilen-Typ
220                                $skey=$rowl["lage"]; // Str.-Schluessel
221                                $snam=htmlentities($rowl["bezeichnung"], ENT_QUOTES, "UTF-8"); //-Name
222                                $hsnr=$rowl["hausnummer"];
223                                $hlfd=$rowl["laufendenummer"];
224                                $gmllag=$rowl["lgml"];
225                                if ($ltyp == "p") {
226                                        $lagetitl="NebengebÀude - Pseudonummer";
227                                        $lagetxt="Nebengeb&auml;ude Nr. ".$hlfd;
228                                } else {
229                                        $lagetitl="HauptgebÀude - Hausnummer";
230                                        $lagetxt=$snam."&nbsp;".$hsnr;
231                                }
232                                echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp;
233                                        if ($showkey) {echo "&amp;showkey=j";}
234                                        echo "'>";
235                                        if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
236                                echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a><br>";
237                        } // Ende Loop Lage m.H.
238            pg_free_result($resl);
239                        echo "\n\t</td>";
240
241                        echo "\n\t<td class='nwlink noprint'>" // Link Haus
242                                ."\n\t\t<a title='Daten zum Geb&auml;ude-Objekt' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml;
243                                if ($showkey) {echo "&amp;showkey=j";}
244                                echo "'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>"
245                        ."\n\t</td>"
246                ."\n</tr>";
247        } // Ende GebÀude
248
249        // Footer
250        if ($gebnr == 0) {
251                echo "\n</table>"
252                ."<p class='err'><br>Keine Geb&auml;ude auf diesem Flurst&uuml;ck.<br>&nbsp;</p>";
253        } else {
254                echo "\n<tr>"
255                        ."\n\t<td>Summe:</td>"
256                        ."\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>"
257                        ."\n\t<td colspan='6'>&nbsp;</td>"
258                ."\n</tr>"
259        ."\n</table>";
260        $unbebaut = number_format(($flstflaeche - $gebflsum),0,",",".") . " m&#178;";
261        echo "\n<p>\n<br>Flurst&uuml;cksfl&auml;che abz&uuml;glich Geb&auml;udefl&auml;che: <b>".$unbebaut."</b></p>\n<br>";
262}
263pg_free_result($resg);
264?>
265 
266<div class='buttonbereich noprint'>
267        <hr>
268        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
269        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>
270</div>
271
272<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
273
274</body>
275</html>
Note: See TracBrowser for help on using the repository browser.