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

Revision 427, 27.2 KB checked in by frank.jaeger, 2 years ago (diff)

Überarbeitung der Auskunft: Durch Functions den Code verdichtet. Drei neue Arten von Bauwerken.

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