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

Revision 422, 28.1 KB checked in by frank.jaeger, 3 years ago (diff)

Aktualisierungen der ALKIS-Buchauskunft, neues Modul für Bauwerke, Härtung

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
8        4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe
9        5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung
10        6 Leitung
11        7 Transportanlage
12        8 Turm
13        9 VorratsbehÀlter, Speicherbauwerk
14
15        Version:
16        2021-03-11 Neues Modul
17        2021-03-17 Korrekturen
18
19*/
20
21// Bauwerk (bw) gehört zu (gz) Lage
22// Ein Bauwerk "gehört zu" (Relation) einem GebÀude. Zu diesem GebÀude die Adresse(n) als Tabellen-Zeile ausgeben
23function bw_gz_lage($gmlgz) {
24        global $gkz, $debug, $showkey;
25       
26        // HAUPTgebÀude  Geb >zeigtAuf> lage (mehrere)
27        $sqlgz="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer "
28        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
29        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
30        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
31
32        // ++ evtl. keine NEBEN-GebÀude möglich, nur Haupt-?
33        // UNION - oder NEBENgebÀude  Geb >hat> Pseudo
34        $sqlgz.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer "
35        ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat "
36        ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
37        ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses"
38
39        $sqlgz.="ORDER BY bezeichnung, hausnummer, laufendenummer;";
40        $v = array($gmlgz);
41        $resgz = pg_prepare("", $sqlgz);
42        $resgz = pg_execute("", $v);
43        if (!$resgz) {
44                echo "\n<p class='err'>Fehler bei Lage mit HsNr. zum Bauwerk</p>";
45                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
46                if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";}
47        } else {
48                echo "\n<tr>";
49                echo "\n\t<td class='li'>Lage</td>";
50                echo "\n\t<td class='fett'>";
51                while($rowgz = pg_fetch_assoc($resgz)) { // LOOP: Lagezeilen
52                        $ltyp=$rowgz["ltyp"];
53                        $skey=$rowgz["lage"];
54                        $snam=htmlentities($rowgz["bezeichnung"], ENT_QUOTES, "UTF-8");
55                        $hsnr=$rowgz["hausnummer"];
56                        $hlfd=$rowgz["laufendenummer"];
57                        $gmllag=$rowgz["lgml"];
58
59                        if ($ltyp === "p") {
60                                $lagetitl="NebengebÀude Nr. ".$hlfd;
61                        //      $lagetxt="Nebengeb&auml;ude Nr. ".$hlfd; // alt
62                                $lagetxt=$snam."&nbsp;".$hsnr." (".$hlfd.")";
63                        } else {
64                                $lagetitl="HauptgebÀude - Hausnummer ".$hsnr;
65                                $lagetxt=$snam."&nbsp;".$hsnr;
66                        }
67
68                        echo "\n\t\t<a title='".$lagetitl."' href='alkislage.php?gkz=".$gkz."&amp;gmlid=".$gmllag."&amp;ltyp=".$ltyp;
69                                if ($showkey) {echo "&amp;showkey=j";}
70                                echo "'>";
71                                if ($showkey) {echo "<span class='key'>(".$skey.")</span>&nbsp;";}
72                        echo $lagetxt."&nbsp;<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''></a>&nbsp;";
73                }
74                echo "</td>";
75                echo "\n\t<td>";
76                echo "\n\t\t<p class='erkli'>Das Haus hat die Adresse ".$lagetitl."</p>";
77                echo "\n\t</td>\n</tr>";
78                pg_free_result($resgz);
79        }
80}
81
82// Eine Zeile der HTML-Tabelle ausgeben
83function tab_zeile($titel, $key, $inhalt, $ea, $ei) {
84        global $showkey, $allefelder, $debug;
85        if ($inhalt != "" OR $allefelder) {
86                echo "\n<tr>\n\t<td class='li'>".$titel."</td>\n\t<td class='fett'>";
87                if ($showkey and $key != '') {echo "<span class='key'>(".$key.")</span> ";}
88                echo $inhalt."</td>\n\t<td>";
89                if ($ea != '') {echo "\n\t\t<p class='erklk'>".$ea."</p>";}     // Erkl. Attribut (allgemein)
90                if ($ei != '') {echo "\n\t\t<p class='erkli'>".$ei."</p>";}     // Erkl. Inhalt (speziell)
91                echo "\n\t</td>\n</tr>";
92        }
93}
94
95// Eine zusÀtzliche Daten-Spalte der Datenbank-Tabelle in eine Zeile der HTML-Tabelle ausgeben (Key|Value|ErklÀrung)
96// Anwendung fÃŒr die DB-Spalten, die nicht bei jeder Bauwerks-Tabelle vorkommen
97function zusatz_spalte($col, $inhalt) { // Spalten-Name, Value
98        global $debug;
99        $einh='';
100        switch ($col) {
101                case 'objekthoehe':
102                        $titel='Objekth&ouml;he';
103                        $einh=' m';
104                break;
105                case 'breitedesobjekts':
106                        $titel='Breite des Objekts';
107                        $einh=' m';
108                break;
109                case 'bezeichnung':
110                        $titel='Bezeichnung';
111                break; 
112        // 1 Verk.
113                case 'durchfahrtshoehe':
114                        $titel='Durchfahrtsh&ouml;he';
115                        $einh=' m';
116                break; 
117        // 6 Leitung
118                case 'spannungsebene':
119                        $titel='Spannungsebene';
120                        $einh=' KV';
121                break;
122        // 7 Transport
123                case 'produkt':
124                        $titel='Produkt';
125                break;
126        // Fehler
127                default: // noch nicht berÃŒcksichtigt
128                        if ($debug > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
129                        $titel=$col;
130        }
131
132        if ($inhalt != '') {$inhalt.=$einh;}
133        tab_zeile($titel, '', $inhalt, '', '');
134}
135
136// Eine Zeile der HTML-Tabelle ausgeben, die einen Objektverweis (Relation) enthÀlt
137function verweis_zeile($zieltyp, $link, $info) {
138        echo "\n<tr>\n\t<td class='li'>".$zieltyp."</td>\n\t<td class='fett'>".$link."</td>\n\t<td>";
139        echo "\n\t\t<p class='erkli'>".$info."</p>\n\t</td>\n</tr>";
140}
141
142// Ein Relationen-Feld anzeigen
143// col = Name der DB-Spalte
144// inhalt = gml_id oder Array mit gml_id's
145function objektverweis($col, $inhalt) {
146        global $gkz, $showkey, $debug;
147//      if ($debug > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
148        switch ($col) {
149                case 'hatdirektunten': // [] ++ Wie kann man dies Objekt finden?
150                        $olist='';
151                        $arrhdu=explode(",", trim($inhalt, "{}"));
152                        foreach($arrhdu AS $hdugml) {$olist.=$hdugml."<br>";}
153                        tab_zeile('Hat direkt Unten', '', $olist, '', 'Verweis auf ein Objekt unter diesem Bauwerk, Typ unbekannt.');
154                break;
155
156                case 'gehoertzu': // Assoziation zu: FeatureType AX_Gebaeude (ax_gebaeude) 0..1'
157                        if ($inhalt == '') {
158                                verweis_zeile('Haus', '', 'Das Bauwerk geh&ouml;rt zum Haus');
159                        } else {
160                                $link="\n\t\t<a title='geh&ouml;rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$inhalt;
161                                if ($showkey) {$link.="&amp;showkey=j";}
162                                $link.="'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
163                                verweis_zeile('Haus', $link, 'Das Bauwerk geh&ouml;rt zum Haus');
164                                bw_gz_lage($inhalt);                           
165                        }
166                break;
167
168        // 'istabgeleitetaus';  'traegtbeizu': 'istteilvon': // -> Keine FÀlle vorhanden
169                default:
170                        if ($debug > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function 'objektverweis' noch nicht ber&uuml;cksichtigt.</p>";}
171        }
172}
173// alle leer:
174//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT istabgeleitetaus IS NULL;
175//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT traegtbeizu IS NULL;
176//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT istteilvon IS NULL;
177// SELECT gml_id, hatdirektunten, st_asewkt( wkb_geometry ) as wkt FROM ax_bauwerkimgewaesserbereich WHERE NOT hatdirektunten IS NULL;
178//  1 Fall  in 290: 2 / DENW15AL360000N7 ,
179// SELECT gml_id, hatdirektunten, st_asewkt( wkb_geometry ) as wkt FROM ax_bauwerkimgewaesserbereich WHERE gml_id = 'DENW15AL360000N7';
180// 34 FÀlle in 200:
181// 16 FÀlle in 300:
182
183// S T A R T
184
185ini_set("session.cookie_httponly", 1);
186session_start();
187$allfld = "n"; $showkey="n"; $nodebug=""; // Var. aus Parameter 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
227// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
228// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
229if ($nodebug === "j") {$debug=0;}
230
231$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbauwerk.php'");
232if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>\n";
233
234// Konstanten fÃŒr Sortierung und Gruppierung
235$btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5;
236$btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9;
237
238/* in ALLEN Bauwerks-Typen folgende Spalten, bisher NICHT verwendet:
239    processstep_ax_li_processstep_mitdatenerhebung_description[] processstep_rationale[]
240    processstep_datetime[] processstep_individualname[] processstep_organisationname[] processstep_positionname[]
241    processstep_phone[] processstep_address[] processstep_onlineresource[] processstep_hoursofservice[]
242    processstep_contactinstructions[] processstep_role[] processstep_ax_datenerhebung[]
243    processstep_scaledenominator[] processstep_sourcereferencesystem[] processstep_sourceextent[] processstep_sourcestep[]
244
245    herkunft_source_source_ax_datenerhebung[] herkunft_source_source_scaledenominator[] herkunft_source_source_sourcereferencesystem[]
246    herkunft_source_source_sourceextent[]     herkunft_source_source_sourcestep[] */
247
248/* Fallunterscheidung: B a u w e r k s - T y p
249Nacheinander werden folgende Abfragen je Objekt ausgefÃŒhrt:
250        1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind
251        2. sqlk: ZusÀtzliche Key-Value-Beziehungen (mit Key und ErklÀrung)
252        3. sqlz: ZusÀtzliche Spalten, individuell je Objektart (einfache Werte-Darstellung)
253        4. sqlr: Relationen zu anderen Objektarten */
254switch ($btyp) {
255       
256case $btyp_verkehr:     // 1 - V e r k e h r
257        $btyptitle='Bauwerk im Verkehrsbereich';
258        $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
259 FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion=k1.wert
260 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
261        $sqlk="SELECT b1.zustand, k1.beschreibung, k1.dokumentation
262 FROM ax_bauwerkimverkehrsbereich b1 LEFT JOIN ax_zustand_bauwerkimverkehrsbereich k1 ON b1.zustand=k1.wert
263 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
264        $sqlz="SELECT b1.bezeichnung, b1.breitedesobjekts, b1.durchfahrtshoehe FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
265        $sqlr="SELECT b1.hatdirektunten FROM ax_bauwerkimverkehrsbereich b1 WHERE b1.gml_id = $1 AND b1.endet IS NULL;";
266break;
267
268case $btyp_gewaesser:   // 2 - G e w À s s e r
269        $btyptitle='Bauwerk im GewÀsserbereich';
270        $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
271 FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion=ug.wert
272 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
273        $sqlk="SELECT b2.zustand, k2.beschreibung, k2.dokumentation
274 FROM ax_bauwerkimgewaesserbereich b2 LEFT JOIN ax_zustand_bauwerkimgewaesserbereich k2 ON b2.zustand=k2.wert
275 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
276        $sqlz="SELECT b2.bezeichnung FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
277        $sqlr="SELECT b2.hatdirektunten FROM ax_bauwerkimgewaesserbereich b2 WHERE b2.gml_id = $1 AND b2.endet IS NULL;";
278break;
279
280case $btyp_sonst:       // 3 - S o n s t i g e  Bauwerke
281        $btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung';
282        $sqlb="SELECT b3.bauwerksfunktion, k3.beschreibung, k3.dokumentation, b3.name, b3.statement,
283 GeometryType(b3.wkb_geometry) as bgeotyp, round(st_area(b3.wkb_geometry)::numeric,2) AS flae
284 FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion=k3.wert
285 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
286        $sqlk="SELECT b3.funktion, k3.beschreibung AS beschr, k3.dokumentation AS doku, b3.hydrologischesmerkmal, hm.beschreibung AS hmbeschr, hm.dokumentation AS hmdoku
287 FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3
288 LEFT JOIN ax_funktion_bauwerk k3 ON b3.funktion=k3.wert
289 LEFT JOIN ax_hydrologischesmerkmal_sonstigesbauwerkodersonstigeeinri hm ON b3.hydrologischesmerkmal=hm.wert
290 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
291        $sqlz="SELECT b3.bezeichnung, b3.objekthoehe FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
292        $sqlr="SELECT b3.hatdirektunten, b3.gehoertzu FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 WHERE b3.gml_id = $1 AND b3.endet IS NULL;";
293       
294/*  gehoertzubauwerk_ax_sonstigesbauwerkodersonstigeeinrichtun
295    gehoertzubauwerk_ax_bauwerkoderanlagefuersportfreizeitunde
296    gehoertzubauwerk_ax_leitung
297    gehoertzubauwerk_ax_bauwerkoderanlagefuerindustrieundgewer
298    gehoertzubauwerk_ax_einrichtunginoeffentlichenbereichen
299    gehoertzubauwerk_ax_heilquellegasquelle
300    gehoertzubauwerk_ax_historischesbauwerkoderhistorischeeinr
301    gehoertzubauwerk_ax_turm
302    gehoertzubauwerk_ax_vorratsbehaelterspeicherbauwerk
303    gehoertzubauwerk_ax_transportanlage
304    gehoertzubauwerk_ax_wegpfadsteig
305    gehoertzubauwerk_ax_gleis
306    gehoertzubauwerk_ax_bahnverkehrsanlage
307    gehoertzubauwerk_ax_bauwerkimgewaesserbereich
308    gehoertzubauwerk_ax_strassenverkehrsanlage
309    gehoertzubauwerk_ax_seilbahnschwebebahn
310    gehoertzubauwerk_ax_einrichtungenfuerdenschiffsverkehr
311    gehoertzubauwerk_ax_bauwerkimverkehrsbereich
312    gehoertzubauwerk_ax_flugverkehrsanlage
313    gehoertzubauwerk_ax_gewaesserstationierungsachse
314    gehoertzubauwerk_ax_sickerstrecke
315    gehoertzubauwerk_ax_schifffahrtsliniefaehrverkehr
316    gehoertzubauwerk_ax_wasserspiegelhoehe
317    gehoertzubauwerk_ax_abschnitt
318    gehoertzubauwerk_ax_ast
319    gehoertzubauwerk_ax_netzknoten
320    gehoertzubauwerk_ax_nullpunkt
321    gehoertzubauwerk_ax_hafen
322    gehoertzubauwerk_ax_testgelaende
323    gehoertzubauwerk_ax_schleuse
324    gehoertzubauwerk_ax_ortslage
325    gehoertzubauwerk_ax_grenzuebergang
326    gehoertzubauwerk_ax_polder
327    gehoertzubauwerk_ax_gewaessermerkmal
328    gehoertzubauwerk_ax_untergeordnetesgewaesser
329    gehoertzubauwerk_ax_vegetationsmerkmal */
330break;
331
332case $btyp_indu:        // 4 - Bauwerk oder Anlage fÃŒr  I n d u s t r i e  und Gewerbe
333        $btyptitle="Bauwerk oder Anlage fÃŒr Industrie und Gewerbe";
334        $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
335 FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion=k4.wert
336 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
337        $sqlk="SELECT b4.zustand, k4.beschreibung, k4.dokumentation
338 FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 LEFT JOIN ax_zustand_bauwerkoderanlagefuerindustrieundgewerbe k4 ON b4.zustand=k4.wert
339 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
340        $sqlz="SELECT b4.bezeichnung, b4.objekthoehe FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
341        $sqlr="SELECT b4.hatdirektunten FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 WHERE b4.gml_id = $1 AND b4.endet IS NULL;";
342break;
343
344case $btyp_sport:       // 5 - Bauwerk oder Anlage fÃŒr  S p o r t , Freizeit und Erholung
345        $btyptitle="Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung";
346        $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
347 FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion=k5.wert
348 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
349        $sqlk="SELECT b5.sportart, k5.beschreibung, k5.dokumentation
350 FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 LEFT JOIN ax_sportart_bauwerkoderanlagefuersportfreizeitunderholung k5 ON b5.sportart=k5.wert
351 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
352        $sqlz="SELECT b5.breitedesobjekts FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
353        $sqlr="SELECT b5.hatdirektunten FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 WHERE b5.gml_id = $1 AND b5.endet IS NULL;";
354break;
355
356case $btyp_leitg:       // 6 - L e i t u n g
357        $btyptitle="Leitung";
358        $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
359 FROM ax_leitung b6 LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion=k6.wert
360 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";   
361        $sqlk="";
362        $sqlz="SELECT b6.spannungsebene FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
363        $sqlr="SELECT b6.hatdirektunten FROM ax_leitung b6 WHERE b6.gml_id = $1 AND b6.endet IS NULL;";
364break;
365
366case $btyp_trans:       // 7 - T r a n s p o r t a n l a g e
367        $btyptitle="Transportanlage";
368        $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
369 FROM ax_transportanlage b7 LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion=k7.wert
370 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
371        $sqlk="SELECT b7.lagezurerdoberflaeche, k7.beschreibung, k7.dokumentation
372 FROM ax_transportanlage b7 LEFT JOIN ax_lagezurerdoberflaeche_transportanlage k7 ON b7.lagezurerdoberflaeche=k7.wert
373 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
374        $sqlz="SELECT b7.produkt FROM ax_transportanlage b7 WHERE b7.gml_id = $7 AND b7.endet IS NULL;";
375        $sqlr="SELECT b7.hatdirektunten FROM ax_transportanlage b7 WHERE b7.gml_id = $1 AND b7.endet IS NULL;";
376break;
377
378case $btyp_turm:        // 8 - T u r m  (Sonderfall Array)
379        $btyptitle="Turm";
380        $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
381 FROM ax_turm b8 LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion)
382 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
383        $sqlk="SELECT b8.zustand, k8.beschreibung, k8.dokumentation
384 FROM ax_turm b8 LEFT JOIN ax_zustand_turm k8 ON b8.zustand=k8.wert
385 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
386        $sqlz="SELECT b8.objekthoehe FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
387        $sqlr="SELECT b8.hatdirektunten, b8.zeigtauf FROM ax_turm b8 WHERE b8.gml_id = $1 AND b8.endet IS NULL;";
388break;
389
390case $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
391        $btyptitle="VorratsbehÀlter, Speicherbauwerk";
392        $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
393 FROM ax_vorratsbehaelterspeicherbauwerk b9 LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion=k9.wert
394 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
395        $sqlk="SELECT b9.lagezurerdoberflaeche, k9.beschreibung, k9.dokumentation,
396         b9.speicherinhalt, sp9.beschreibung AS spbes, sp9.dokumentation AS spdok
397 FROM ax_vorratsbehaelterspeicherbauwerk b9
398 LEFT JOIN ax_lagezurerdoberflaeche_vorratsbehaelterspeicherbauwerk k9 ON b9.lagezurerdoberflaeche=k9.wert
399 LEFT JOIN ax_speicherinhalt_vorratsbehaelterspeicherbauwerk sp9 ON b9.speicherinhalt=sp9.wert
400 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
401        $sqlz="SELECT b9.objekthoehe FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
402        $sqlr="SELECT b9.hatdirektunten FROM ax_vorratsbehaelterspeicherbauwerk b9 WHERE b9.gml_id = $1 AND b9.endet IS NULL;";
403break;
404
405default:
406        die('<p class="stop1">Fehler showkey</p></body>');
407break;
408}
409
410// 1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind
411$v=array($gmlid);
412$resb=pg_prepare("", $sqlb);
413$resb=pg_execute("", $v);
414if (!$resb) {
415        echo "\n<p class='err'>Fehler bei Bauwerksdaten Standardfelder.</p>";
416        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."'</p>";}
417        if ($debug > 1) {echo "\n<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";}
418} else {
419        if (!$rowb = pg_fetch_assoc($resb)) {
420                echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
421                die('<p class="stop1">Abbruch</p></body>'); // Das wÃŒrde sich sonst 2x wiederholen
422        } else {
423        // 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 ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlk)."'</p>";}
487                if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resk)."</p>";}
488        } else {
489                if (!$rowk = pg_fetch_array($resk)) {
490                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
491                } else {
492                // Treffer
493                        switch ($btyp) {  // individuell je Typ
494                        case $btyp_verkehr: // 1
495                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
496                        break;
497                        case $btyp_gewaesser: // 2
498                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
499                        break;
500                        case $btyp_sonst: // 3
501                                tab_zeile('Funktion', $rowk["funktion"], htmlentities($rowk["beschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["doku"], ENT_QUOTES, "UTF-8"));
502                                tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], htmlentities($rowk["hmbeschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["hmdoku"], ENT_QUOTES, "UTF-8"));
503                        break;
504                        case $btyp_indu: // 4
505                                tab_zeile('Zustand', $rowk["zustand"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
506                        break;
507                        case $btyp_sport: // 5
508                                tab_zeile('Sportart', $rowk["sportart"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
509                        break;
510                        case $btyp_trans: // 7
511                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
512                        break;
513                        case $btyp_turm: // 8
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_vorrat: // 9
517                                tab_zeile('Lage zur Erdoberfl&auml;che', $rowk["lagezurerdoberflaeche"], htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8"));
518                                tab_zeile('Speicherinhalt', $rowk["speicherinhalt"], htmlentities($rowk["spbes"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["spdok"], ENT_QUOTES, "UTF-8"));
519                        break;
520                        }
521                }
522                pg_free_result($resk);
523        }
524}
525
526// 3. sqlz: Individuelle Z u s a t z - Spalten je Bauwerks-Art
527// einfache Werte-Anzeige, ohne SchlÃŒsseltabelle
528if ($sqlz != '') {
529        $v=array($gmlid);
530        $resz=pg_prepare("", $sqlz);
531        $resz=pg_execute("", $v);
532        if (!$resz) {
533                echo "\n<p class='err'>Fehler bei Bauwerk Relation.</p>";
534                if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlz)."'</p>";}
535                if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resz)."</p>";}
536        } else {
537                if (!$rowz = pg_fetch_array($resz)) {
538                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
539                } else {
540                        // Die Spalten im Row abarbeiten
541                        $anzcol=pg_num_fields($resz);
542                //      if ($debug > 1) {echo "<p class='dbg'>".$anzcol." Zusatz-Spalten vorhanden"."</p>";}
543                        for ($i = 0; $i < $anzcol; $i++) {
544                                $k=pg_field_name($resz, $i);
545                                $v=$rowz[$i];
546                                if ($v != "" OR $allefelder) {
547                                        zusatz_spalte($k, $v);
548                                }
549                        }
550                }       
551                pg_free_result($resz);
552        }
553}
554
555// 4. sqlr: R e l a t i o n e n  zu anderen Objektarten
556if ($sqlr != '') {
557        $v=array($gmlid);
558        $resr=pg_prepare("", $sqlr);
559        $resr=pg_execute("", $v);
560        if (!$resr) {
561                echo "\n<p class='err'>Fehler bei Bauwerksdaten Zusatzfelder.</p>";
562                if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlr)."'</p>";}
563                if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resr)."</p>";}
564        } else {
565                if (!$rowr = pg_fetch_array($resr)) {
566                        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
567                } else { // Die Spalten im Row abarbeiten
568                        $anzcol=pg_num_fields($resr);
569                //      if ($debug > 1) {echo "<p class='dbg'>".$anzcol." Relationen-Spalten vorhanden"."</p>";}
570                        for ($i = 0; $i < $anzcol; $i++) {
571                                $k=pg_field_name($resr, $i);
572                                $v=$rowr[$i]; // Array mit gml_id anderer Objekte
573                                if ($v != "" OR $allefelder) {
574                                        objektverweis($k, $v);
575                                }
576                        }
577                }       
578                pg_free_result($resr);
579        }
580}
581
582echo "\n</table>\n";
583// +++ Test, ob ein zweiter Satz zum Bauwerk gefunden wird? Das sollte nicht sein.
584?>
585 
586<div class='buttonbereich noprint'>
587        <hr>
588        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
589        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>
590</div>
591
592<?php footer($gmlid, selbstverlinkung()."?", "&amp;btyp=".$btyp); ?>
593
594</body>
595</html>
Note: See TracBrowser for help on using the repository browser.