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.

RevLine 
[422]1<?php
[427]2/*      alkisbauwerk.php
[422]3
[427]4        ALKIS-Buchauskunft
5        Author: Frank JÀger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
6 
7        Bauwerksdaten
[422]8
[427]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
[422]24        Version:
25        2021-03-11 Neues Modul
[427]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
[422]29
[425]30ToDo:
[427]31        - Vom Bauwerk ÃŒberlagerte FlurstÃŒcke ÃŒber geom. Verschneidung ermitteln und verlinken.
32        - Icon fÃŒr "Bauwerk" machen! Ggf. einzeln fÃŒr jede Art?
[422]33*/
34
[427]35// Ein Bauwerk (bw_) "gehört zu" (_gz_) (Relation) einem GebÀude. Zu diesem GebÀude die Lage-Zeilen als Tabellen ausgeben
[422]36function bw_gz_lage($gmlgz) {
[427]37        global $gkz, $dbg;
[422]38        // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere)
[425]39        $sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde "
[422]40        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
[425]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")
[422]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
[425]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 "
[422]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 "
[425]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")     
[427]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;";
[422]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>";
[427]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                }
[422]61        } else {
[427]62                $erst=true;
[422]63                while($rowgz = pg_fetch_assoc($resgz)) { // LOOP: Lagezeilen
[427]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                        }
[422]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"];
[427]76                        $gemeinde=htmlentities($rowgz["gemeinde"], ENT_QUOTES, "UTF-8");
[422]77                        if ($ltyp === "p") {
[427]78                                $lagetitl="Nebengeb&auml;ude Nr. ".$hlfd;
[425]79                                $lagetxt=$snam." ".$hsnr." (".$hlfd."), ".$gemeinde;
[422]80                        } else {
[427]81                                $lagetitl="HauptgebÀude - HsNr. ".$hsnr;
[425]82                                $lagetxt=$snam." ".$hsnr.", ".$gemeinde;
[422]83                        }
[427]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>";
[422]87                }
88                pg_free_result($resgz);
89        }
90}
91
92// Eine Zeile der HTML-Tabelle ausgeben
93function tab_zeile($titel, $key, $inhalt, $ea, $ei) {
[425]94        global $showkey, $allefelder, $dbg;
[422]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
[425]108        global $dbg;
[422]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; 
[427]122                case 'durchfahrtshoehe': // 1
[422]123                        $titel='Durchfahrtsh&ouml;he';
124                        $einh=' m';
125                break; 
[427]126                case 'spannungsebene': // 6
[422]127                        $titel='Spannungsebene';
128                        $einh=' KV';
129                break;
[427]130                case 'produkt': // 7
[422]131                        $titel='Produkt';
132                break;
[427]133                case 'kilometerangabe': // 12
134                        $titel='Kilometerangabe';
135                        $einh=' KM';
136                break;
[422]137                default: // noch nicht berÃŒcksichtigt
[425]138                        if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
[422]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) {
[425]155        global $gkz, $showkey, $dbg;
156//      if ($dbg > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
[422]157        switch ($col) {
[427]158                case 'hatdirektunten': // [] In welcher Tabelle kann man dies Objekt finden?
[422]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 {
[427]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>";
[422]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:
[425]178                        if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function 'objektverweis' noch nicht ber&uuml;cksichtigt.</p>";}
[422]179        }
180}
181
182// S T A R T
183ini_set("session.cookie_httponly", 1);
184session_start();
[425]185$allfld = "n"; $showkey="n"; $nodebug=""; // Var. initalisieren
[422]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}
[427]199if (!preg_match('#^[0-9]{1,2}$#', $btyp)) {die("Eingabefehler btyp");} // Bauwerks-Typ = Tabelle
[422]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>'); }
[427]224$dbg=$debug;
225if ($nodebug === "j") {$dbg=0;}
[422]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
[427]230// Konstanten fÃŒr Sortierung und Gruppierung nach Bauwerks-Typen
[422]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;
[427]233$btyp_hist=10; $btyp_heil=11; $btyp_oeff=12; $btyp_bpkt=13;
[422]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 */
[427]245$WH=" WHERE b".$btyp.".gml_id = $1 AND b".$btyp.".endet IS NULL;"; // WHERE-Clause (mehrfach je Typ verwendet)
[422]246switch ($btyp) {
[427]247
[422]248case $btyp_verkehr:     // 1 - V e r k e h r
[427]249        $FR=" FROM ax_bauwerkimverkehrsbereich b1 "; // FROM-Clause (mehrfach je Typ verwendet)
[422]250        $btyptitle='Bauwerk im Verkehrsbereich';
[427]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;
[422]256break;
257
258case $btyp_gewaesser:   // 2 - G e w À s s e r
[427]259        $FR=" FROM ax_bauwerkimgewaesserbereich b2 ";
[422]260        $btyptitle='Bauwerk im GewÀsserbereich';
[427]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;
[422]266break;
267
268case $btyp_sonst:       // 3 - S o n s t i g e  Bauwerke
[427]269        $FR=" FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 ";
[422]270        $btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung';
[427]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;
[422]278break;
279
280case $btyp_indu:        // 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe
[427]281        $FR=" FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 ";
[422]282        $btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe";
[427]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;
[422]289break;
290
291case $btyp_sport:       // 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung
[427]292        $FR=" FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 ";
[422]293        $btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung";
[427]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;
[422]300break;
301
302case $btyp_leitg:       // 6 - L e i t u n g
[427]303        $FR=" FROM ax_leitung b6 ";
[422]304        $btyptitle="Leitung";
[427]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;     
[422]307        $sqlk="";
[427]308        $sqlz="SELECT b6.spannungsebene".$FR.$WH;
309        $sqlr="SELECT b6.hatdirektunten".$FR.$WH;
[422]310break;
311
312case $btyp_trans:       // 7 - T r a n s p o r t a n l a g e
[427]313        $FR=" FROM ax_transportanlage b7 ";
[422]314        $btyptitle="Transportanlage";
[427]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;
[422]321break;
322
323case $btyp_turm:        // 8 - T u r m  (Sonderfall Array)
[427]324        $FR=" FROM ax_turm b8 ";
[422]325        $btyptitle="Turm";
[427]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;
[422]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
[427]335        $FR=" FROM ax_vorratsbehaelterspeicherbauwerk b9 ";
[422]336        $btyptitle="VorratsbehÀlter, Speicherbauwerk";
[427]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;
[422]339        $sqlk="SELECT b9.lagezurerdoberflaeche, k9.beschreibung, k9.dokumentation,
[427]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;
[422]345break;
346
[427]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
[422]385default:
[427]386        die('<p class="stop1">Falscher Bauwerkstyp.</p></body>');
[422]387break;
388}
389
[427]390// 1. sqlb: Standard-Spalten, die bei (fast) jedem Typ vorhanden sind
[422]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>";
[425]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        }
[422]400} else {
[425]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        }
[422]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
[425]411        } else { // Treffer
[422]412                // Seitenkopf
[427]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]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
[427]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                }
[422]437
[427]438                if (isset($rowb["name"])) {
439                        tab_zeile('Name', '', htmlentities($rowb["name"], ENT_QUOTES, "UTF-8"), '', '');
[422]440                }
441
[427]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                        }
[422]468                }
469        }
470        pg_free_result($resb);
471}
472
[427]473// 2. sqlk:  ZusÀtzliche Key-Value-Beziehungen
[422]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>";
[425]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                }
[422]485        } else {
[425]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                }
[422]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
[427]497                        $bes=htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8");
498                        $dok=htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8");
[422]499                        switch ($btyp) {  // individuell je Typ
500                        case $btyp_verkehr: // 1
[427]501                                tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
[422]502                        break;
503                        case $btyp_gewaesser: // 2
[427]504                                tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
[422]505                        break;
506                        case $btyp_sonst: // 3
[427]507                                tab_zeile('Funktion', $rowk["funktion"], $bes, '', $dok);
[422]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
[427]511                                tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
[422]512                        break;
513                        case $btyp_sport: // 5
[427]514                                tab_zeile('Sportart', $rowk["sportart"], $bes, '', $dok);
[422]515                        break;
516                        case $btyp_trans: // 7
[427]517                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], $bes, '', $dok);
[422]518                        break;
519                        case $btyp_turm: // 8
[427]520                                tab_zeile('Zustand', $rowk["zustand"], $bes, '', $dok);
[422]521                        break;
522                        case $btyp_vorrat: // 9
[427]523                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], $bes, '', $dok);
[422]524                                tab_zeile('Speicherinhalt', $rowk["speicherinhalt"], htmlentities($rowk["spbes"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["spdok"], ENT_QUOTES, "UTF-8"));
[427]525                        case $btyp_hist: // 10
526                                tab_zeile('Arch&auml;ologischer Typ', $rowk["archaeologischertyp"], $bes, '', $dok);
[422]527                        break;
[427]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;
[422]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>";
[425]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                }
[422]555        } else {
[425]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                }
[422]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>";
[425]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                }
[422]591        } else {
[425]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                }
[422]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";
[425]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);
[422]621?>
622</body>
623</html>
Note: See TracBrowser for help on using the repository browser.