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

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

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

RevLine 
[362]1<?php
2/*      alkisbaurecht.php - Baurecht
3        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
4
5        Version:
6        2016-02-24 Version fuer norGIS-ALKIS-Import
[422]7        ....
8        2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
9        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
10        2020-12-15 Input-Validation und Strict Comparisation (===)
[362]11*/
[422]12ini_set("session.cookie_httponly", 1);
[362]13session_start();
[402]14$showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
[387]15$cntget = extract($_GET); // Parameter in Variable umwandeln
16
17// strikte Validierung aller Parameter
[422]18if (isset($gmlid)) {
19        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
20} else {
21        die("Fehlender Parameter");
22}
23if (isset($gkz)) {
24        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
25} else {
26        die("Fehlender Parameter");
27}
[387]28if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
[422]29if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
[402]30if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
[387]31
[422]32include "alkis_conf_location.php";
33include "alkisfkt.php";
34
[377]35echo <<<END
36<!doctype html>
37<html lang="de">
[362]38<head>
[377]39        <meta charset="utf-8">
[387]40        <meta name="viewport" content="width=device-width, initial-scale=1.0">
[362]41        <title>ALKIS Bau-, Raum- oder Bodenordnungsrecht</title>
42        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
43        <link rel="shortcut icon" type="image/x-icon" href="ico/Gericht.ico">
44</head>
45<body>
[377]46END;
[362]47
[422]48$erlaubnis = darf_ich(); if ($erlaubnis === 0) {die('<p class="stop1">Abbruch</p></body>');}
49
[402]50// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
[422]51// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
52if ($nodebug === "j") {$debug=0;}
[402]53
[377]54$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbaurecht.php'");
[387]55if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
[362]56
[412]57// Spalte "a.dokumentation" ist immer leer
[362]58$sql ="SELECT r.ogc_fid, r.artderfestlegung as adfkey, r.name, r.stelle, r.bezeichnung AS rechtbez,
[412]59a.beschreibung AS adfbez, d.bezeichnung AS stellbez, d.stellenart, wd.beschreibung, wd.dokumentation, round(st_area(r.wkb_geometry)::numeric,0) AS flae
[362]60FROM ax_bauraumoderbodenordnungsrecht r
[412]61LEFT JOIN ax_artderfestlegung_bauraumoderbodenordnungsrecht a ON r.artderfestlegung = a.wert
[362]62LEFT JOIN ax_dienststelle d ON r.land=d.land AND r.stelle=d.stelle
[412]63LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert
[362]64WHERE r.gml_id= $1 AND r.endet IS NULL AND d.endet IS NULL;";
65
66$v = array($gmlid);
67$res = pg_prepare("", $sql);
68$res = pg_execute("", $v);
69if (!$res) {
[387]70        echo "\n<p class='err'>Fehler bei Baurecht.</p>";
[422]71        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
[362]72}
[402]73if ($row = pg_fetch_assoc($res)) {
[362]74        $artfest=$row["adfkey"];  // Art der Festlegung, Key
75        $verfnr=$row["rechtbez"]; // Verfahrens-Nummer
76        $enam=$row["name"];
77        $stellb=$row["stellbez"];
78        $stella=$row["stellenart"];
[422]79        $behb=$row["beschreibung"];
80        $behd=$row["dokumentation"];
[362]81
82        // Balken
[422]83        echo "<p class='balken recht'>ALKIS Bau-, Raum- oder Bodenordnungsrecht ".$artfest."-".$verfnr."&nbsp;</p>";
[362]84
[387]85        echo "\n<h2><img src='ico/Gericht.png' width='16' height='16' alt=''> Bau-, Raum- oder Bodenordnungsrecht</h2>";
[362]86
87        echo "\n<table>"
88                ."\n<tr>"
89                        ."\n\t<td class='li'>Art der Festlegung:</td>\n\t<td>";
90                        if ($showkey) {echo "<span class='key'>(".$artfest.")</span> ";}
91                        echo "<span class='wichtig'>".$row["adfbez"]."</span></td>"
92                ."\n</tr>";
93                if ($enam != "") {
94                        echo "\n<tr>"
95                                ."\n\t<td class='li'>Eigenname des Gebietes:</td>"
96                                ."\n\t<td>".$enam."</td>"
97                        . "\n</tr>";
98                }
99                if ($verfnr != "") {
100                        echo "\n<tr>"
101                                ."\n\t<td class='li'>Verfahrensnummer:</td>"
102                                ."\n\t<td>".$verfnr."</td>"
103                        ."\n</tr>";
104                }
105                if ($stellb != "") { // z.B. Umlegung *mit* und Baulast *ohne* Dienststelle, darum bezirk testen
106                        echo "\n<tr>"
107                                ."\n\t<td class='li'>Dienststelle:</td>\n\t<td>";
108                                        if ($showkey) {echo "<span class='key'>(".$row["stelle"].")</span> ";}
109                                        echo $stellb
110                                ."</td>"
111                        ."\n</tr>";
112                        if ($stella != "") {
113                                echo "\n<tr>"
114                                        ."\n\t<td class='li'>Art der Dienststelle:</td>"
115                                        ."\n\t<td>";
[422]116                                                if ($showkey) {echo " <span class='key'>(".$stella.")</span>&nbsp;";}
117                                                echo "<span title='".$behd."'>".$behb."</span>";
[362]118                                        echo "</td>"
119                                ."\n</tr>";
120                        }
121                }
122                echo "\n<tr>"
123                        ."\n\t<td class='li'>Fl&auml;che:</td>";
124                        $flae=number_format($row["flae"],0,",",".")." m&#178;";
125                        echo "\n\t<td>".$flae."</td>"
126                ."\n</tr>"
127        . "\n</table>";
128} else {
129        echo "\n<p class='err'>Fehler! Kein Treffer bei gml_id=".$gmlid."</p>";
130}
131
132echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> betroffene Flurst&uuml;cke</h2>\n"
133."\n<p>Ermittelt durch geometrische Verschneidung. Nach Gr&ouml;&szlig;e absteigend.</p>";
134
135$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, round(st_area(ST_Intersection(r.wkb_geometry,f.wkb_geometry))::numeric,1) AS schnittflae
136FROM ax_flurstueck f, ax_bauraumoderbodenordnungsrecht r
[377]137WHERE r.gml_id= $1 AND f.endet IS NULL AND r.endet IS NULL ";
[422]138if ($filtgem === '' ) { // ungefiltert
[377]139        $v=array($gmlid);
140} else {
[422]141        $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÀndiges Gebiet
[377]142        $v=array($gmlid, $filtkreis, $filtgem);
143}
144$sql.="AND st_intersects(r.wkb_geometry,f.wkb_geometry) = true
[362]145AND st_area(st_intersection(r.wkb_geometry,f.wkb_geometry)) > 0.05
[422]146ORDER BY schnittflae DESC LIMIT 100;";
[362]147// > 0.0 ist gemeint, Ungenauigkeit durch st_simplify
148// Limit: Flurbereinig. kann gross werden!
149// Trotz Limit lange Antwortzeit, wegen OrderBy -> intersection
[377]150
[362]151$res=pg_prepare("", $sql);
152$res=pg_execute("", $v);
153if (!$res) {
[422]154        echo "\n<p class='err'>Keine Flurst&uuml;cke ermittelt.<br></p>";
155        //if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} // ggf. mehrere Parameter!
[362]156}
157
158echo "\n<table class='fs'>"
159        ."\n<tr>"
160                ."\n\t<td class='head' title='Flur- und Flurst&uuml;cksnummer'>Flurst&uuml;ck</td>"
[377]161                ."\n\t<td class='heads fla' title='geometrische Schnittfl&auml;che'><img src='ico/sort.png' width='10' height='10' alt='' title='Sortierung'>Fl&auml;che</td>"
[362]162                ."\n\t<td class='head fla' title='amtliche Flurst&uuml;cksfl&auml;che, Buchfl&auml;che'>von</td>"
163                ."\n\t<td class='head nwlink' title='Link zum Flurst&uuml;ck'>weitere Auskunft</td>"
164        ."\n</tr>";
165
166        $fscnt=0;
[402]167        while($row = pg_fetch_assoc($res)) {
[362]168                $fscnt++;
169                echo "\n<tr>"
170                        ."\n\t<td>".$row["flurnummer"]."-<span class='wichtig'>".$row["zaehler"];
171                                $nen=$row["nenner"];
172                                if ($nen != "") {echo "/".$nen;}
173                        echo "</span></td>"
174                        ."\n\t<td class='fla'>".$row["schnittflae"]." m&#178;</td>"
175                        ."\n\t<td class='fla'>".$row["amtlicheflaeche"]." m&#178;</td>"
176                        ."\n\t<td class='nwlink noprint'>"
177                                ."\n\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$row["gml_id"]."&amp;eig=n' "
178                                        ."title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
179                                        ."\n\t\t\t<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
180                                ."\n\t\t</a>"
181                        ."\n\t</td>"
182                ."\n</tr>";
183        }
184echo "\n</table>";
185
[422]186if ($fscnt === 0) { // nicht gefunden
187        if ($filtgem === '' ) { // ungefiltert
[387]188                echo "\n<p class='err'>Kein Flurst&uuml;ck gefunden.</p>";
[377]189        } else { // Wahrscheinliche Ursache = Filter
[387]190                echo "\n<p class='err'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
191        //      if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = ".$gmlid." $2 = ".$filtkreis." $3 = ".$filtgem."</p>";}
[377]192        }
[422]193} elseif ($fscnt === 100) {
194        echo "<p>... und weitere Flurst&uuml;cke (Limit 100 erreicht).</p>";
[362]195}
196
197pg_close($con);
198echo <<<END
199
[377]200<div class='buttonbereich noprint'>
201<hr>
202        <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
203        <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken" /></a>&nbsp;
204</div>
[362]205END;
206
[422]207footer($gmlid, selbstverlinkung()."?", "");
[362]208
209?>
210
211</body>
212</html>
Note: See TracBrowser for help on using the repository browser.