zeigtAuf> lage (mehrere) $sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde " ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) " ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " ."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") ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // UNION - oder NEBENgebäude Geb >hat> Pseudo $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 " ."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat " ."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage " ."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") ."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; $sqlgz.="ORDER BY bezeichnung, hausnummer, laufendenummer;"; $v = array($gmlgz); $resgz = pg_prepare($con, "", $sqlgz); $resgz = pg_execute($con, "", $v); if (!$resgz) { echo "\n
Fehler bei Lage mit HsNr. zum Bauwerk
"; if ($dbg > 1) { echo "Fehler:".pg_result_error($resgz)."
"; if ($dbg > 2) {echo "\nSQL=
".str_replace("$1", "'".$gmlgz."'", $sqlgz)."
Adresse: ".$lagetitl."
".$ea."
";} // Erkl. Attribut (allgemein) if ($ei != '') {echo "\n\t\t".$ei."
";} // Erkl. Inhalt (speziell) echo "\n\tDer Feldname ".$col." ist in function zusatz_spalte noch nicht berücksichtigt.
";} $titel=$col; } if ($inhalt != '') {$inhalt.=$einh;} tab_zeile($titel, '', $inhalt, '', ''); } // Eine Zeile der HTML-Tabelle ausgeben, die einen Objektverweis (Relation) enthält function verweis_zeile($zieltyp, $link, $info) { echo "\n".$info."
\n\tVerweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.
";} switch ($col) { case 'hatdirektunten': // [] In welcher Tabelle kann man dies Objekt finden? if (isset($inhalt)) { $olist=''; $arrhdu=explode(",", trim($inhalt, "{}")); foreach($arrhdu AS $hdugml) {$olist.=$hdugml."Der Feldname ".$col." ist in function 'objektverweis' noch nicht berücksichtigt.
";} } } // S T A R T ini_set("session.cookie_httponly", 1); session_start(); $allfld = "n"; $showkey="n"; $nodebug=""; // Var. initalisieren $cntget = extract($_GET); // Parameter in Variable umwandeln // strikte Validierung aller Parameter if (isset($gmlid)) { if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");} } else { die("Fehlender Parameter"); } if (isset($gkz)) { if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} } else { die("Fehlender Parameter"); } if (!preg_match('#^[0-9]{1,2}$#', $btyp)) {die("Eingabefehler btyp");} // Bauwerks-Typ = Tabelle if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");} if ($showkey === "j") {$showkey=true;} else {$showkey=false;} if (!preg_match('#^[j|n]{0,1}$#', $allfld)) {die ("Eingabefehler allfld");} if ($allfld === "j") {$allefelder=true;} else {$allefelder=false;} if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");} include "alkis_conf_location.php"; include "alkisfkt.php"; echo <<Abbruch
'); } $dbg=$debug; if ($nodebug === "j") {$dbg=0;} $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbauwerk.php'"); if (!$con) echo "\nFehler beim Verbinden der DB
\n"; // Konstanten für Sortierung und Gruppierung nach Bauwerks-Typen $btyp_verkehr=1; $btyp_gewaesser=2; $btyp_sonst=3; $btyp_indu=4; $btyp_sport=5; $btyp_leitg=6; $btyp_trans=7; $btyp_turm=8; $btyp_vorrat=9; $btyp_hist=10; $btyp_heil=11; $btyp_oeff=12; $btyp_bpkt=13; /* in ALLEN Bauwerks-Typen folgende Spalten, bisher NICHT verwendet: herkunft_source_source_ax_datenerhebung[] herkunft_source_source_scaledenominator[] herkunft_source_source_sourcereferencesystem[] herkunft_source_source_sourceextent[] herkunft_source_source_sourcestep[] */ /* Fallunterscheidung: B a u w e r k s - T y p Nacheinander werden folgende Abfragen je Objekt ausgeführt: 1. sqlb: Standard-Spalten, die bei jedem Typ vorhanden sind 2. sqlk: Zusätzliche Key-Value-Beziehungen (mit Key und Erklärung) 3. sqlz: Zusätzliche Spalten, individuell je Objektart (einfache Werte-Darstellung) 4. sqlr: Relationen zu anderen Objektarten */ $WH=" WHERE b".$btyp.".gml_id = $1 AND b".$btyp.".endet IS NULL;"; // WHERE-Clause (mehrfach je Typ verwendet) switch ($btyp) { case $btyp_verkehr: // 1 - V e r k e h r $FR=" FROM ax_bauwerkimverkehrsbereich b1 "; // FROM-Clause (mehrfach je Typ verwendet) $btyptitle='Bauwerk im Verkehrsbereich'; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkimverkehrsbereich k1 ON b1.bauwerksfunktion=k1.wert".$WH; $sqlk="SELECT b1.zustand, k1.beschreibung, k1.dokumentation".$FR."LEFT JOIN ax_zustand_bauwerkimverkehrsbereich k1 ON b1.zustand=k1.wert".$WH; $sqlz="SELECT b1.bezeichnung, b1.breitedesobjekts, b1.durchfahrtshoehe".$FR.$WH; $sqlr="SELECT b1.hatdirektunten".$FR.$WH; break; case $btyp_gewaesser: // 2 - G e w ä s s e r $FR=" FROM ax_bauwerkimgewaesserbereich b2 "; $btyptitle='Bauwerk im Gewässerbereich'; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkimgewaesserbereich ug ON b2.bauwerksfunktion=ug.wert".$WH; $sqlk="SELECT b2.zustand, k2.beschreibung, k2.dokumentation".$FR."LEFT JOIN ax_zustand_bauwerkimgewaesserbereich k2 ON b2.zustand=k2.wert".$WH; $sqlz="SELECT b2.bezeichnung".$FR.$WH; $sqlr="SELECT b2.hatdirektunten".$FR.$WH; break; case $btyp_sonst: // 3 - S o n s t i g e Bauwerke $FR=" FROM ax_sonstigesbauwerkodersonstigeeinrichtung b3 "; $btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung'; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_sonstigesbauwerkodersonstigeeinrichtun k3 ON b3.bauwerksfunktion=k3.wert".$WH; $sqlk="SELECT b3.funktion, k3.beschreibung, k3.dokumentation, b3.hydrologischesmerkmal, hm.beschreibung AS hmbeschr, hm.dokumentation AS hmdoku" .$FR."LEFT JOIN ax_funktion_bauwerk k3 ON b3.funktion=k3.wert " ." LEFT JOIN ax_hydrologischesmerkmal_sonstigesbauwerkodersonstigeeinri hm ON b3.hydrologischesmerkmal=hm.wert".$WH; $sqlz="SELECT b3.bezeichnung, b3.objekthoehe".$FR.$WH; $sqlr="SELECT b3.hatdirektunten, b3.gehoertzu".$FR.$WH; break; case $btyp_indu: // 4 - Bauwerk oder Anlage für I n d u s t r i e und Gewerbe $FR=" FROM ax_bauwerkoderanlagefuerindustrieundgewerbe b4 "; $btyptitle="Bauwerk oder Anlage für Industrie und Gewerbe"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuerindustrieundgewer k4 ON b4.bauwerksfunktion=k4.wert".$WH; $sqlk="SELECT b4.zustand, k4.beschreibung, k4.dokumentation" .$FR."LEFT JOIN ax_zustand_bauwerkoderanlagefuerindustrieundgewerbe k4 ON b4.zustand=k4.wert".$WH; $sqlz="SELECT b4.bezeichnung, b4.objekthoehe".$FR.$WH; $sqlr="SELECT b4.hatdirektunten".$FR.$WH; break; case $btyp_sport: // 5 - Bauwerk oder Anlage für S p o r t , Freizeit und Erholung $FR=" FROM ax_bauwerkoderanlagefuersportfreizeitunderholung b5 "; $btyptitle="Bauwerk oder Anlage für Sport, Freizeit und Erholung"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_bauwerkoderanlagefuersportfreizeitunde k5 ON b5.bauwerksfunktion=k5.wert".$WH; $sqlk="SELECT b5.sportart, k5.beschreibung, k5.dokumentation" .$FR."LEFT JOIN ax_sportart_bauwerkoderanlagefuersportfreizeitunderholung k5 ON b5.sportart=k5.wert".$WH; $sqlz="SELECT b5.breitedesobjekts".$FR.$WH; $sqlr="SELECT b5.hatdirektunten".$FR.$WH; break; case $btyp_leitg: // 6 - L e i t u n g $FR=" FROM ax_leitung b6 "; $btyptitle="Leitung"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_leitung k6 ON b6.bauwerksfunktion=k6.wert".$WH; $sqlk=""; $sqlz="SELECT b6.spannungsebene".$FR.$WH; $sqlr="SELECT b6.hatdirektunten".$FR.$WH; break; case $btyp_trans: // 7 - T r a n s p o r t a n l a g e $FR=" FROM ax_transportanlage b7 "; $btyptitle="Transportanlage"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_transportanlage k7 ON b7.bauwerksfunktion=k7.wert".$WH; $sqlk="SELECT b7.lagezurerdoberflaeche, k7.beschreibung, k7.dokumentation" .$FR."LEFT JOIN ax_lagezurerdoberflaeche_transportanlage k7 ON b7.lagezurerdoberflaeche=k7.wert".$WH; $sqlz="SELECT b7.produkt".$FR.$WH; $sqlr="SELECT b7.hatdirektunten".$FR.$WH; break; case $btyp_turm: // 8 - T u r m (Sonderfall Array) $FR=" FROM ax_turm b8 "; $btyptitle="Turm"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_turm k8 ON k8.wert =ANY(b8.bauwerksfunktion)".$WH; $sqlk="SELECT b8.zustand, k8.beschreibung, k8.dokumentation" .$FR."LEFT JOIN ax_zustand_turm k8 ON b8.zustand=k8.wert".$WH; $sqlz="SELECT b8.objekthoehe".$FR.$WH; $sqlr="SELECT b8.hatdirektunten, b8.zeigtauf".$FR.$WH; break; case $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 $FR=" FROM ax_vorratsbehaelterspeicherbauwerk b9 "; $btyptitle="Vorratsbehälter, Speicherbauwerk"; $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" .$FR."LEFT JOIN ax_bauwerksfunktion_vorratsbehaelterspeicherbauwerk k9 ON b9.bauwerksfunktion=k9.wert".$WH; $sqlk="SELECT b9.lagezurerdoberflaeche, k9.beschreibung, k9.dokumentation, b9.speicherinhalt, sp9.beschreibung AS spbes, sp9.dokumentation AS spdok" .$FR."LEFT JOIN ax_lagezurerdoberflaeche_vorratsbehaelterspeicherbauwerk k9 ON b9.lagezurerdoberflaeche=k9.wert LEFT JOIN ax_speicherinhalt_vorratsbehaelterspeicherbauwerk sp9 ON b9.speicherinhalt=sp9.wert".$WH; $sqlz="SELECT b9.objekthoehe".$FR.$WH; $sqlr="SELECT b9.hatdirektunten".$FR.$WH; break; case $btyp_hist: // 10 - H i s t o r i s c h e s Bauwerk oder historische Einrichtung $FR=" FROM ax_historischesbauwerkoderhistorischeeinrichtung b10 "; $btyptitle="Historisches Bauwerk oder historische Einrichtung"; $sqlb="SELECT b10.name, b10.statement, GeometryType(b10.wkb_geometry) as bgeotyp, round(st_area(b10.wkb_geometry)::numeric,2) AS flae".$FR.$WH; $sqlk="SELECT b10.archaeologischertyp, k10.beschreibung, k10.dokumentation" .$FR."LEFT JOIN ax_archaeologischertyp_historischesbauwerkoderhistorischee k10 ON b10.archaeologischertyp=k10.wert".$WH; $sqlz=""; $sqlr="SELECT b10.hatdirektunten".$FR.$WH; break; case $btyp_heil: // 11 - H e i l q u e l l e , G a s q u e l l e $FR=" FROM ax_heilquellegasquelle b11 "; $btyptitle="Heilquelle, Gasquelle"; $sqlb="SELECT b11.name, b11.statement, GeometryType(b11.wkb_geometry) as bgeotyp, round(st_area(b11.wkb_geometry)::numeric,2) AS flae".$FR.$WH; $sqlk="SELECT b11.art, k11.beschreibung, k11.dokumentation, " ."b11.hydrologischesmerkmal, hm.beschreibung AS hmbes, hm.dokumentation AS hmdok".$FR ."LEFT JOIN ax_art_heilquellegasquelle k11 ON b11.art=k11.wert " ."LEFT JOIN ax_hydrologischesmerkmal_heilquellegasquelle hm ON b11.hydrologischesmerkmal=hm.wert".$WH; $sqlz=""; $sqlr="SELECT b11.hatdirektunten ".$FR.$WH; break; case $btyp_oeff: // 12 - Einrichtung in ö f f e n t l i c h e n Bereichen $FR=" FROM ax_einrichtunginoeffentlichenbereichen b12 "; $btyptitle="Einrichtung in öffentlichen Bereichen"; $sqlb="SELECT b12.statement, GeometryType(b12.wkb_geometry) as bgeotyp, round(st_area(b12.wkb_geometry)::numeric,2) AS flae".$FR.$WH; $sqlk="SELECT b12.art, k12.beschreibung, k12.dokumentation".$FR ."LEFT JOIN ax_art_einrichtunginoeffentlichenbereichen k12 ON b12.art=k12.wert".$WH; $sqlz="SELECT b12.kilometerangabe".$FR.$WH; $sqlr="SELECT b12.hatdirektunten ".$FR.$WH; break; /* +++ B A U S T E L L E +++ case $btyp_bpkt: // 13 - Besonderer Bauwerkspunkt (ohne Geom.) $FR=" FROM ax_besondererbauwerkspunkt b13 "; $btyptitle="Besonderer Bauwerkspunkt"; // punktkennung, sonstigeeigenschaft, zustaendigestelle_land, zustaendigestelle_stelle break; CREATE TABLE IF NOT EXISTS public.ax_besondererbauwerkspunkt ( ... punktkennung character varying, -- immer gefüllt, z.B. '324825754002450' rrhhrrhhAnnnnnn sonstigeeigenschaft character varying[], zustaendigestelle_land character varying, zustaendigestelle_stelle character varying, SELECT b.gml_id, p.gml_id FROM ax_besondererbauwerkspunkt b JOIN ax_punktortag p ON b.gml_id = any(p.istteilvon) LIMIT 100; Das ZUSO besteht aus einem 'PunktortAG' und/oder aus einem oder mehreren 'PunktortAU'. Der 'Besondere Bauwerkspunkt' und der ihm zugeordnete 'Punktort' mit der Attributart 'Liegenschaftskarte' und der Werteart TRUE erhält den Raumbezug durch einen Punkt der Fläche oder der Linie, die zur Vermittlung des Raumbezuges des entsprechenden Bauwerks oder der Einrichtung beiträgt. 'PunktortAG' ist ein Punktort mit redundanzfreier Geometrie (Besonderer Gebäudepunkt, Besonderer Bauwerkspunkt) innerhalb eines Geometriethemas. istteilvon[] 'PunktortAU' ist ein Punktort mit unabhängiger Geometrie ohne Zugehörigkeit zu einem Geometriethema. Er kann zu ZUSOs der folgenden Objektarten gehören: Grenzpunkt, Besonderer Gebäudepunkt, Besonderer Bauwerkspunkt, Aufnahmepunkt, Sicherungspunkt, Sonstiger Vermessungspunkt, Besonderer topographischer Punkt, Lagefestpunkt, Höhenfestpunkt, Schwerefestpunkt, Referenzstationspunkt. 'PunktortTA' ist ein Punktort, der in der Flurstücksgrenze liegt und einen Grenzpunkt verortet. Schlüssel: ax_art_punktkennung pg_dump -d alkis0150 -s -x -O -F p -f /home/b600352/ALKIS-Schema.sql */ default: die('Falscher Bauwerkstyp.
'); break; } // 1. sqlb: Standard-Spalten, die bei (fast) jedem Typ vorhanden sind $v=array($gmlid); $resb=pg_prepare($con, "", $sqlb); $resb=pg_execute($con, "", $v); if (!$resb) { echo "\nFehler bei Bauwerksdaten Standardfelder.
"; if ($dbg > 0) { echo "\nFehler:".pg_result_error($resb)."
"; if ($dbg > 2) {echo "\nSQL=
".str_replace("$1","'".$gmlid."'",$sqlb)."'
Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Standardfelder)
"; if ($dbg > 2) {echo "\nSQL=
".htmlentities(str_replace("$1","'".$gmlid."'",$sqlb), ENT_QUOTES, "UTF-8")."
Fehler! Kein Treffer für gml_id=".$gmlid."
"; die('Abbruch