source: trunk/info/info/alkisn/alkisbauwerk.php @ 425

Revision 425, 28.7 KB checked in by frank.jaeger, 2 years ago (diff)

Web-GIS-Auskunft und Mapbender2-Navigation: neue Konfigurations-Parameter und verbessertes Grundbuch-Modul

Line 
1<?php
2/*      alkisbauwerk.php - Bauwerksdaten
3        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
4
5        1 Bauwerk im Verkehrsbereich
6        2 Bauwerk im GewÀsserbereich
7        3 Sonstiges Bauwerk oder sonstige Einrichtung 51009
8        4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe 51002
9        5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung 51006
10        6 Leitung 51005
11        7 Transportanlage 51004
12        8 Turm 51001
13        9 VorratsbehÀlter, Speicherbauwerk 51003
14
15        Version:
16        2021-03-11 Neues Modul
17        2021-03-17 Korrekturen
18        2021-12-09 2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche). Debugging verbessert.
19
20ToDo:
21        - Icon fÃŒr "Bauwerk" machen! ggf. einzeln fÃŒr jede der 9 Arten?
22        - 4 weitere Objektarten, bisher nicht verwendet:
23        51007 'Historisches Bauwerk oder historische Einrichtung'
24        51008 'Heilquelle, Gasquelle'
25        51010 'Einrichtung in öffentlichen Bereichen'
26        51011 'Besonderer Bauwerkspunkt'
27*/
28
29// Bauwerk (bw) gehört zu (gz) Lage
30// Ein Bauwerk "gehört zu" (Relation) einem GebÀude. Zu diesem GebÀude die Adresse(n) als Tabellen-Zeile ausgeben
31function bw_gz_lage($gmlgz) {
32        global $gkz, $dbg, $showkey;
33       
34        // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere)
35        $sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde "
36        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
37        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "     
38        ."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")
39        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
40
41        // ++ evtl. keine NEBEN-GebÀude möglich, nur Haupt-?
42        // UNION - oder NEBENgebÀude  Geb >hat> Pseudo
43        $sqlgz.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer, p.bezeichnung as gemeinde "
44        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat "
45        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
46        ."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")     
47        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL " // ID des Hauses"
48        ."ORDER BY bezeichnung, hausnummer, laufendenummer;";
49        $v = array($gmlgz);
50        $resgz = pg_prepare("", $sqlgz);
51        $resgz = pg_execute("", $v);
52        if (!$resgz) {
53                echo "\n<p class='err'>Fehler bei Lage mit HsNr. zum Bauwerk</p>";
54                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
55                if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";}
56        } else {
57                echo "\n<tr>";
58                echo "\n\t<td class='li'>Lage</td>";
59                echo "\n\t<td class='fett'>";
60                while($rowgz = pg_fetch_assoc($resgz)) { // LOOP: Lagezeilen
61                        $ltyp=$rowgz["ltyp"];
62                        $skey=$rowgz["lage"];
63                        $snam=htmlentities($rowgz["bezeichnung"], ENT_QUOTES, "UTF-8");
64                        $hsnr=$rowgz["hausnummer"];
65                        $hlfd=$rowgz["laufendenummer"];
66                        $gmllag=$rowgz["lgml"];
67                        $gemeinde=$rowgz["gemeinde"];
68
69                        if ($ltyp === "p") {
70                                $lagetitl="NebengebÀude Nr. ".$hlfd;
71                                $lagetxt=$snam." ".$hsnr." (".$hlfd."), ".$gemeinde;
72                        } else {
73                                $lagetitl="HauptgebÀude - Hausnummer ".$hsnr;
74                                $lagetxt=$snam." ".$hsnr.", ".$gemeinde;
75                        }
76
77                        echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp;
78                                if ($showkey) {echo "&amp;showkey=j";}
79                                echo "'>";
80                                if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
81                        echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
82                }
83                echo "</td>";
84                echo "\n\t<td>";
85                echo "\n\t\t<p class='erkli'>Das Haus hat die Adresse ".$lagetitl."</p>";
86                echo "\n\t</td>\n</tr>";
87                pg_free_result($resgz);
88        }
89}
90
91// Eine Zeile der HTML-Tabelle ausgeben
92function tab_zeile($titel, $key, $inhalt, $ea, $ei) {
93        global $showkey, $allefelder, $dbg;
94        if ($inhalt != "" OR $allefelder) {
95                echo "\n<tr>\n\t<td class='li'>".$titel."</td>\n\t<td class='fett'>";
96                if ($showkey and $key != '') {echo "<span class='key'>(".$key.")</span> ";}
97                echo $inhalt."</td>\n\t<td>";
98                if ($ea != '') {echo "\n\t\t<p class='erklk'>".$ea."</p>";}     // Erkl. Attribut (allgemein)
99                if ($ei != '') {echo "\n\t\t<p class='erkli'>".$ei."</p>";}     // Erkl. Inhalt (speziell)
100                echo "\n\t</td>\n</tr>";
101        }
102}
103
104// Eine zusÀtzliche Daten-Spalte der Datenbank-Tabelle in eine Zeile der HTML-Tabelle ausgeben (Key|Value|ErklÀrung)
105// Anwendung fÃŒr die DB-Spalten, die nicht bei jeder Bauwerks-Tabelle vorkommen
106function zusatz_spalte($col, $inhalt) { // Spalten-Name, Value
107        global $dbg;
108        $einh='';
109        switch ($col) {
110                case 'objekthoehe':
111                        $titel='Objekth&ouml;he';
112                        $einh=' m';
113                break;
114                case 'breitedesobjekts':
115                        $titel='Breite des Objekts';
116                        $einh=' m';
117                break;
118                case 'bezeichnung':
119                        $titel='Bezeichnung';
120                break; 
121        // 1 Verk.
122                case 'durchfahrtshoehe':
123                        $titel='Durchfahrtsh&ouml;he';
124                        $einh=' m';
125                break; 
126        // 6 Leitung
127                case 'spannungsebene':
128                        $titel='Spannungsebene';
129                        $einh=' KV';
130                break;
131        // 7 Transport
132                case 'produkt':
133                        $titel='Produkt';
134                break;
135        // Fehler
136                default: // noch nicht berÃŒcksichtigt
137                        if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
138                        $titel=$col;
139        }
140
141        if ($inhalt != '') {$inhalt.=$einh;}
142        tab_zeile($titel, '', $inhalt, '', '');
143}
144
145// Eine Zeile der HTML-Tabelle ausgeben, die einen Objektverweis (Relation) enthÀlt
146function verweis_zeile($zieltyp, $link, $info) {
147        echo "\n<tr>\n\t<td class='li'>".$zieltyp."</td>\n\t<td class='fett'>".$link."</td>\n\t<td>";
148        echo "\n\t\t<p class='erkli'>".$info."</p>\n\t</td>\n</tr>";
149}
150
151// Ein Relationen-Feld anzeigen
152// col = Name der DB-Spalte
153// inhalt = gml_id oder Array mit gml_id's
154function objektverweis($col, $inhalt) {
155        global $gkz, $showkey, $dbg;
156//      if ($dbg > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
157        switch ($col) {
158                case 'hatdirektunten': // [] ++ Wie kann man dies Objekt finden?
159                        $olist='';
160                        $arrhdu=explode(",", trim($inhalt, "{}"));
161                        foreach($arrhdu AS $hdugml) {$olist.=$hdugml."<br>";}
162                        tab_zeile('Hat direkt Unten', '', $olist, '', 'Verweis auf ein Objekt unter diesem Bauwerk, Typ unbekannt.');
163                break;
164
165                case 'gehoertzu': // Assoziation zu: FeatureType AX_Gebaeude (ax_gebaeude) 0..1'
166                        if ($inhalt == '') {
167                                verweis_zeile('Haus', '', 'Das Bauwerk geh&ouml;rt zum Haus');
168                        } else {
169                                $link="\n\t\t<a title='geh&ouml;rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$inhalt;
170                                if ($showkey) {$link.="&amp;showkey=j";}
171                                $link.="'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
172                                verweis_zeile('Haus', $link, 'Das Bauwerk geh&ouml;rt zum Haus');
173                                bw_gz_lage($inhalt);                           
174                        }
175                break;
176
177        // 'istabgeleitetaus';  'traegtbeizu': 'istteilvon': // -> Keine FÀlle vorhanden
178                default:
179                        if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function 'objektverweis' noch nicht ber&uuml;cksichtigt.</p>";}
180        }
181}
182
183// S T A R T
184
185ini_set("session.cookie_httponly", 1);
186session_start();
187$allfld = "n"; $showkey="n"; $nodebug=""; // Var. initalisieren
188$cntget = extract($_GET);       // Parameter in Variable umwandeln
189
190// strikte Validierung aller Parameter
191if (isset($gmlid)) {
192        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
193} else {
194        die("Fehlender Parameter");
195}
196if (isset($gkz)) {
197        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
198} else {
199        die("Fehlender Parameter");
200}
201if (!preg_match('#^[1-9]{1}$#', $btyp)) {die("Eingabefehler btyp");} // Bauwerks-Typ = Tabelle
202if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
203if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
204if (!preg_match('#^[j|n]{0,1}$#', $allfld)) {die ("Eingabefehler allfld");}
205if ($allfld === "j") {$allefelder=true;} else {$allefelder=false;}
206if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
207
208include "alkis_conf_location.php";
209include "alkisfkt.php";
210
211echo <<<END
212<!doctype html>
213<html lang="de">
214<head>
215        <meta charset="utf-8">
216        <meta name="viewport" content="width=device-width, initial-scale=1.0">
217        <title>ALKIS Bauwerksdaten</title>
218        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
219        <link rel="shortcut icon" type="image/x-icon" href="ico/Haus.ico">
220</head>
221<body>
222
223END;
224
225$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
226$dbg=$debug; // CONF in Arbeits-Variable
227if ($nodebug === "j") {$dbg=0;} // Entwicklungsumgebung temporÀr ausschalten
228
229$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbauwerk.php'");
230if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>\n";
231
232// Konstanten fÃŒr Sortierung und Gruppierung
233$btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5;
234$btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9;
235
236/* in ALLEN Bauwerks-Typen folgende Spalten, bisher NICHT verwendet:
237    herkunft_source_source_ax_datenerhebung[] herkunft_source_source_scaledenominator[] herkunft_source_source_sourcereferencesystem[]
238    herkunft_source_source_sourceextent[]     herkunft_source_source_sourcestep[] */
239
240/* Fallunterscheidung: B a u w e r k s - T y p
241Nacheinander werden folgende Abfragen je Objekt ausgefÃŒhrt:
242        1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind
243        2. sqlk: ZusÀtzliche Key-Value-Beziehungen (mit Key und ErklÀrung)
244        3. sqlz: ZusÀtzliche Spalten, individuell je Objektart (einfache Werte-Darstellung)
245        4. sqlr: Relationen zu anderen Objektarten */
246switch ($btyp) {
247       
248case $btyp_verkehr:     // 1 - V e r k e h r
249        $btyptitle='Bauwerk im Verkehrsbereich';
250        $sqlb="SELECT b1.bauwerksfunktion, k1.beschreibung, k1.dokumentation, b1.name, b1.statement, GeometryType(b1.wkb_geometry) as bgeotyp, round(st_area(b1.wkb_geometry)::numeric,2) AS flae
251 FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion=k1.wert
252 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
253        $sqlk="SELECT b1.zustand, k1.beschreibung, k1.dokumentation
254 FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_zustand_bauwerkimverkehrsbereich k1 ON b1.zustand=k1.wert
255 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
256        $sqlz="SELECT b1.bezeichnung, b1.breitedesobjekts, b1.durchfahrtshoehe FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
257        $sqlr="SELECT b1.hatdirektunten FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
258break;
259
260case $btyp_gewaesser:   // 2 - G e w À s s e r
261        $btyptitle='Bauwerk im GewÀsserbereich';
262        $sqlb="SELECT b2.bauwerksfunktion, ug.beschreibung, ug.dokumentation, b2.name, b2.statement, GeometryType(b2.wkb_geometry) as bgeotyp, round(st_area(b2.wkb_geometry)::numeric,2) AS flae
263 FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion=ug.wert
264 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
265        $sqlk="SELECT b2.zustand, k2.beschreibung, k2.dokumentation
266 FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_zustand_bauwerkimgewaesserbereich k2 ON b2.zustand=k2.wert
267 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
268        $sqlz="SELECT b2.bezeichnung FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
269        $sqlr="SELECT b2.hatdirektunten FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
270break;
271
272case $btyp_sonst:       // 3 - S o n s t i g e  Bauwerke
273        $btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung';
274        $sqlb="SELECT b3.bauwerksfunktion, k3.beschreibung, k3.dokumentation, b3.name, b3.statement,
275 GeometryType(b3.wkb_geometry) as bgeotyp, round(st_area(b3.wkb_geometry)::numeric,2) AS flae
276 FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion=k3.wert
277 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
278        $sqlk="SELECT b3.funktion, k3.beschreibung AS beschr, k3.dokumentation AS doku, b3.hydrologischesmerkmal, hm.beschreibung AS hmbeschr, hm.dokumentation AS hmdoku
279 FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3
280 LEFT JOIN ax_funktion_bauwerk k3 ON b3.funktion=k3.wert
281 LEFT JOIN ax_hydrologischesmerkmal_sonstigesbauwerkodersonstigeeinri hm ON b3.hydrologischesmerkmal=hm.wert
282 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
283        $sqlz="SELECT b3.bezeichnung, b3.objekthoehe FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
284        $sqlr="SELECT b3.hatdirektunten, b3.gehoertzu FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
285       
286/*  gehoertzubauwerk_ax_sonstigesbauwerkodersonstigeeinrichtun
287    gehoertzubauwerk_ax_bauwerkoderanlagefuersportfreizeitunde
288    gehoertzubauwerk_ax_leitung
289    gehoertzubauwerk_ax_bauwerkoderanlagefuerindustrieundgewer
290    gehoertzubauwerk_ax_einrichtunginoeffentlichenbereichen
291    gehoertzubauwerk_ax_heilquellegasquelle
292    gehoertzubauwerk_ax_historischesbauwerkoderhistorischeeinr
293    gehoertzubauwerk_ax_turm
294    gehoertzubauwerk_ax_vorratsbehaelterspeicherbauwerk
295    gehoertzubauwerk_ax_transportanlage
296    gehoertzubauwerk_ax_wegpfadsteig
297    gehoertzubauwerk_ax_gleis
298    gehoertzubauwerk_ax_bahnverkehrsanlage
299    gehoertzubauwerk_ax_bauwerkimgewaesserbereich
300    gehoertzubauwerk_ax_strassenverkehrsanlage
301    gehoertzubauwerk_ax_seilbahnschwebebahn
302    gehoertzubauwerk_ax_einrichtungenfuerdenschiffsverkehr
303    gehoertzubauwerk_ax_bauwerkimverkehrsbereich
304    gehoertzubauwerk_ax_flugverkehrsanlage
305    gehoertzubauwerk_ax_gewaesserstationierungsachse
306    gehoertzubauwerk_ax_sickerstrecke
307    gehoertzubauwerk_ax_schifffahrtsliniefaehrverkehr
308    gehoertzubauwerk_ax_wasserspiegelhoehe
309    gehoertzubauwerk_ax_abschnitt
310    gehoertzubauwerk_ax_ast
311    gehoertzubauwerk_ax_netzknoten
312    gehoertzubauwerk_ax_nullpunkt
313    gehoertzubauwerk_ax_hafen
314    gehoertzubauwerk_ax_testgelaende
315    gehoertzubauwerk_ax_schleuse
316    gehoertzubauwerk_ax_ortslage
317    gehoertzubauwerk_ax_grenzuebergang
318    gehoertzubauwerk_ax_polder
319    gehoertzubauwerk_ax_gewaessermerkmal
320    gehoertzubauwerk_ax_untergeordnetesgewaesser
321    gehoertzubauwerk_ax_vegetationsmerkmal */
322break;
323
324case $btyp_indu:        // 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe
325        $btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe";
326        $sqlb="SELECT b4.bauwerksfunktion, k4.beschreibung, k4.dokumentation, b4.name, b4.statement, GeometryType(b4.wkb_geometry) as bgeotyp, round(st_area(b4.wkb_geometry)::numeric,2) AS flae
327 FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion=k4.wert
328 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
329        $sqlk="SELECT b4.zustand, k4.beschreibung, k4.dokumentation
330 FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_zustand_bauwerkoderanlagefuerindustrieundgewerbe k4 ON b4.zustand=k4.wert
331 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
332        $sqlz="SELECT b4.bezeichnung, b4.objekthoehe FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
333        $sqlr="SELECT b4.hatdirektunten FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
334break;
335
336case $btyp_sport:       // 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung
337        $btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung";
338        $sqlb="SELECT b5.bauwerksfunktion, k5.beschreibung, k5.dokumentation, b5.name, b5.statement, GeometryType(b5.wkb_geometry) as bgeotyp, round(st_area(b5.wkb_geometry)::numeric,2) AS flae
339 FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion=k5.wert
340 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
341        $sqlk="SELECT b5.sportart, k5.beschreibung, k5.dokumentation
342 FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_sportart_bauwerkoderanlagefuersportfreizeitunderholung k5 ON b5.sportart=k5.wert
343 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
344        $sqlz="SELECT b5.breitedesobjekts FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
345        $sqlr="SELECT b5.hatdirektunten FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
346break;
347
348case $btyp_leitg:       // 6 - L e i t u n g
349        $btyptitle="Leitung";
350        $sqlb="SELECT b6.bauwerksfunktion, k6.beschreibung, k6.dokumentation, b6.name, b6.statement, GeometryType(b6.wkb_geometry) as bgeotyp, round(st_area(b6.wkb_geometry)::numeric,2) AS flae
351 FROM ax_leitung b6 LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion=k6.wert
352 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";   
353        $sqlk="";
354        $sqlz="SELECT b6.spannungsebene FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
355        $sqlr="SELECT b6.hatdirektunten FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
356break;
357
358case $btyp_trans:       // 7 - T r a n s p o r t a n l a g e
359        $btyptitle="Transportanlage";
360        $sqlb="SELECT b7.bauwerksfunktion, k7.beschreibung, k7.dokumentation, NULL AS name, b7.statement, GeometryType(b7.wkb_geometry) as bgeotyp, round(st_area(b7.wkb_geometry)::numeric,2) AS flae
361 FROM ax_transportanlage b7 LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion=k7.wert
362 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
363        $sqlk="SELECT b7.lagezurerdoberflaeche, k7.beschreibung, k7.dokumentation
364 FROM ax_transportanlage b7 LEFT JOIN ax_lagezurerdoberflaeche_transportanlage k7 ON b7.lagezurerdoberflaeche=k7.wert
365 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
366        $sqlz="SELECT b7.produkt FROM ax_transportanlage b7 WHERE b7.gml_id = $7 AND b7.endet IS NULL;";
367        $sqlr="SELECT b7.hatdirektunten FROM ax_transportanlage b7 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
368break;
369
370case $btyp_turm:        // 8 - T u r m  (Sonderfall Array)
371        $btyptitle="Turm";
372        $sqlb="SELECT k8.wert AS bauwerksfunktion, k8.beschreibung, k8.dokumentation, b8.name, b8.statement, GeometryType(b8.wkb_geometry) as bgeotyp, round(st_area(b8.wkb_geometry)::numeric,2) AS flae
373 FROM ax_turm b8 LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion)
374 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
375        $sqlk="SELECT b8.zustand, k8.beschreibung, k8.dokumentation
376 FROM ax_turm b8 LEFT JOIN ax_zustand_turm k8 ON b8.zustand=k8.wert
377 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
378        $sqlz="SELECT b8.objekthoehe FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
379        $sqlr="SELECT b8.hatdirektunten, b8.zeigtauf FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
380break;
381
382case $btyp_vorrat:      // 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
383        $btyptitle="VorratsbehÀlter, Speicherbauwerk";
384        $sqlb="SELECT b9.bauwerksfunktion, k9.beschreibung, k9.dokumentation, b9.name, b9.statement, GeometryType(b9.wkb_geometry) as bgeotyp, round(st_area(b9.wkb_geometry)::numeric,2) AS flae
385 FROM ax_vorratsbehaelterspeicherbauwerk b9 LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion=k9.wert
386 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
387        $sqlk="SELECT b9.lagezurerdoberflaeche, k9.beschreibung, k9.dokumentation,
388         b9.speicherinhalt, sp9.beschreibung AS spbes, sp9.dokumentation AS spdok
389 FROM ax_vorratsbehaelterspeicherbauwerk b9
390 LEFT JOIN ax_lagezurerdoberflaeche_vorratsbehaelterspeicherbauwerk k9 ON b9.lagezurerdoberflaeche=k9.wert
391 LEFT JOIN ax_speicherinhalt_vorratsbehaelterspeicherbauwerk sp9 ON b9.speicherinhalt=sp9.wert
392 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
393        $sqlz="SELECT b9.objekthoehe FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
394        $sqlr="SELECT b9.hatdirektunten FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
395break;
396
397default:
398        die('<p class="stop1">Fehler showkey</p></body>');
399break;
400}
401
402// 1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind
403$v=array($gmlid);
404$resb=pg_prepare("", $sqlb);
405$resb=pg_execute("", $v);
406if (!$resb) {
407        echo "\n<p class='err'>Fehler bei Bauwerksdaten Standardfelder.</p>";
408        if ($dbg > 0) {
409                echo "\n<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";
410                if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."'</p>";}
411        }
412} else {
413        if ($dbg > 0) {
414                $zeianz=pg_num_rows($resb);
415                if ($zeianz > 1){
416                        echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Standardfelder)</p>";
417                        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlb), ENT_QUOTES, "UTF-8")."</p>";}
418                }
419        }
420        if (!$rowb = pg_fetch_assoc($resb)) {
421                echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
422                die('<p class="stop1">Abbruch</p></body>'); // Das wÃŒrde sich sonst 2x wiederholen
423        } else { // Treffer
424                // Seitenkopf
425                echo "<p class='balken bauwerk".$btyp."'>ALKIS Bauwerk ".$btyp." - ".$gmlid."&nbsp;</p>"; // Balken, Farbe wie WMS
426                echo "\n<h2>".$btyptitle."</h2>";
427                echo "\n<p class='nwlink noprint'>"; // Umschalter: auch leere Felder
428                echo "Umschalten: <a class='nwlink' href='".selbstverlinkung()."?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$gmlid;
429                        if ($showkey) {echo "&amp;showkey=j";} else {echo "&amp;showkey=n";}
430                        if ($allefelder) {
431                                echo "&amp;allfld=n'>nur Felder mit Inhalt";
432                        } else {
433                                echo "&amp;allfld=j'>auch leere Felder";
434                        }
435                echo "</a></p>";
436
437                echo "\n<table class='geb'>"
438                ."\n<tr>"
439                        ."\n\t<td class='head' title=''>Attribut</td>"
440                        ."\n\t<td class='head mittelspalte' title=''>Wert</td>"
441                        ."\n\t<td class='head' title=''>"
442                                ."\n\t\t<p class='erklk'>Erkl&auml;rung zum Attribut</p>"
443                                ."\n\t\t<p class='erkli'>Erkl&auml;rung zum Inhalt</p>"
444                        ."\n\t</td>"
445                ."\n</tr>";
446
447                tab_zeile('Bauwerksfunktion', $rowb["bauwerksfunktion"], htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"));
448                tab_zeile('Name',        '', htmlentities($rowb["name"], ENT_QUOTES, "UTF-8"), '', '');
449                tab_zeile('Statement',   '', htmlentities($rowb["statement"], ENT_QUOTES, "UTF-8"), '', '');
450
451                // G e o m e t r i e  und FlÀche
452                $geotyp=$rowb["bgeotyp"];
453                switch ($geotyp) {
454                        case "POINT":
455                                $geodeutsch=$geotyp." bedeutet 'Punkt', einzelne Koordinate.";
456                        break;
457                        case "LINESTRING":
458                                $geodeutsch=$geotyp." bedeutet 'Linie'.";
459                        break;
460                        case "POLYGON":
461                                $geodeutsch=$geotyp." bedeutet eine einzelne 'Fl&auml;che'.";
462                        break;
463                        case "MULTIPOLYGON":
464                                $geodeutsch=$geotyp." bedeutet eine 'Fl&auml;che', die aus mehreren Teilen bestehen kann oder die Aussparungen haben kann.";   
465                        break;
466                        default: $geodeutsch="";
467                }
468                tab_zeile('Geometrietyp', '', $geotyp, '', $geodeutsch);
469
470                if ($geotyp == "POLYGON" or $geotyp == "MULTIPOLYGON") {
471                        $flaeche=$rowb["flae"]." m&#178;";
472                        tab_zeile('Fl&auml;che', '', $flaeche, '', "Die 'Fl&auml;che' des Bauwerks wird aus der Geometrie berechnet, aber nur bei POLYGON.");
473                }
474        }
475        pg_free_result($resb);
476}
477
478// 2. sqlk:  Z u s À t z l i c h e   K e y - V a l u e - B e z i e h u n g e n
479// Andere Art der Darstellung als die schlichten Zusatzfelder, Key optional anzeigen, ErklÀrung zum Wert aus SchlÌsseltabelle
480if ($sqlk != '') {
481        $v=array($gmlid);
482        $resk=pg_prepare("", $sqlk);
483        $resk=pg_execute("", $v);       
484        if (!$resk) {
485                echo "\n<p class='err'>Fehler bei Schl&uuml;sseltabelle ".$btyp."</p>";
486                if ($dbg > 0) {
487                        echo "<p class='dbg'>Fehler:".pg_result_error($resk)."</p>";
488                        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlk)."'</p>";}
489                }
490        } else {
491                if ($dbg > 0) {
492                        $zeianz=pg_num_rows($resk);
493                        if ($zeianz > 1){
494                                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Key-Value)</p>";
495                                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlk), ENT_QUOTES, "UTF-8")."</p>";}
496                        }
497                }
498                if (!$rowk = pg_fetch_array($resk)) {
499                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
500                } else {
501                // Treffer
502                        switch ($btyp) {  // individuell je Typ
503                        case $btyp_verkehr: // 1
504                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
505                        break;
506                        case $btyp_gewaesser: // 2
507                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
508                        break;
509                        case $btyp_sonst: // 3
510                                tab_zeile('Funktion', $rowk["funktion"], htmlentities($rowk["beschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["doku"], ENT_QUOTES, "UTF-8"));
511                                tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], htmlentities($rowk["hmbeschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["hmdoku"], ENT_QUOTES, "UTF-8"));
512                        break;
513                        case $btyp_indu: // 4
514                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
515                        break;
516                        case $btyp_sport: // 5
517                                tab_zeile('Sportart', $rowk["sportart"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
518                        break;
519                        case $btyp_trans: // 7
520                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
521                        break;
522                        case $btyp_turm: // 8
523                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
524                        break;
525                        case $btyp_vorrat: // 9
526                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
527                                tab_zeile('Speicherinhalt', $rowk["speicherinhalt"], htmlentities($rowk["spbes"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["spdok"], ENT_QUOTES, "UTF-8"));
528                        break;
529                        }
530                }
531                pg_free_result($resk);
532        }
533}
534
535// 3. sqlz: Individuelle Z u s a t z - Spalten je Bauwerks-Art
536// einfache Werte-Anzeige, ohne SchlÃŒsseltabelle
537if ($sqlz != '') {
538        $v=array($gmlid);
539        $resz=pg_prepare("", $sqlz);
540        $resz=pg_execute("", $v);
541        if (!$resz) {
542                echo "\n<p class='err'>Fehler bei Bauwerk Relation.</p>";
543                if ($dbg > 0) {
544                        echo "<p class='dbg'>Fehler:".pg_result_error($resz)."</p>";
545                        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlz)."'</p>";}
546                }
547        } else {
548                if ($dbg > 0) {
549                        $zeianz=pg_num_rows($resz);
550                        if ($zeianz > 1){
551                                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Zusatz-Spalten)</p>";
552                                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlz), ENT_QUOTES, "UTF-8")."</p>";}
553                        }
554                }
555                if (!$rowz = pg_fetch_array($resz)) {
556                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
557                } else {
558                        // Die Spalten im Row abarbeiten
559                        $anzcol=pg_num_fields($resz);
560                        for ($i = 0; $i < $anzcol; $i++) {
561                                $k=pg_field_name($resz, $i);
562                                $v=$rowz[$i];
563                                if ($v != "" OR $allefelder) {
564                                        zusatz_spalte($k, $v);
565                                }
566                        }
567                }       
568                pg_free_result($resz);
569        }
570}
571
572// 4. sqlr: R e l a t i o n e n  zu anderen Objektarten
573if ($sqlr != '') {
574        $v=array($gmlid);
575        $resr=pg_prepare("", $sqlr);
576        $resr=pg_execute("", $v);
577        if (!$resr) {
578                echo "\n<p class='err'>Fehler bei Bauwerksdaten Zusatzfelder.</p>";
579                if ($dbg > 0) {
580                        echo "<p class='dbg'>Fehler:".pg_result_error($resr)."</p>";
581                        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlr)."'</p>";}
582                }
583        } else {
584                if ($dbg > 0) {
585                        $zeianz=pg_num_rows($resr);
586                        if ($zeianz > 1){
587                                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Relationen)</p>";
588                                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlr), ENT_QUOTES, "UTF-8")."</p>";}
589                        }
590                }
591                if (!$rowr = pg_fetch_array($resr)) {
592                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
593                } else { // Die Spalten im Row abarbeiten
594                        $anzcol=pg_num_fields($resr);
595                        for ($i = 0; $i < $anzcol; $i++) {
596                                $k=pg_field_name($resr, $i);
597                                $v=$rowr[$i]; // Array mit gml_id anderer Objekte
598                                if ($v != "" OR $allefelder) {
599                                        objektverweis($k, $v);
600                                }
601                        }
602                }       
603                pg_free_result($resr);
604        }
605}
606
607echo "\n</table>\n";
608echo "<div class='buttonbereich noprint'>\n<hr>\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
609if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
610echo "\n</div>";
611
612footer($gmlid, selbstverlinkung()."?", "&amp;btyp=".$btyp);
613?>
614</body>
615</html>
Note: See TracBrowser for help on using the repository browser.