Ignore:
Timestamp:
12/30/21 17:49:00 (2 years ago)
Author:
frank.jaeger
Message:

Web-GIS-Auskunft und Mapbender2-Navigation: neue Konfigurations-Parameter und verbessertes Grundbuch-Modul

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/info/info/alkisn/alkisgsnw.php

    r422 r425  
    1111        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] 
    1212        2020-12-15 Input-Validation und Strict Comparisation (===) 
    13  
    14 ++ ToDo: Den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht (ModellschwÀche). Meldungen ausgeben. 
     13        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche) 
     14 
     15ToDo:  
     16- Den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht (ModellschwÀche). Meldungen ausgeben. 
     17- bei Aufruf herrschende Buchung mit mehreren dienenden Buchungen: Links zu den dienenden Buchungen anzeigen 
    1518*/ 
    1619 
     
    1821// Daten zur Buchungsstelle (GS = GrundstÃŒck) aus der DB lesen. 
    1922// Suche wahlweise ÃŒber die GML-ID oder ÃŒber das GrundstÃŒcks-Kennzeichen (Bezirk-Blatt-LfdNr) aus der URL. 
    20         global $gkz, $showkey, $debug, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart; 
     23        global $gkz, $showkey, $dbg, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart; 
    2124 
    2225        $sqlgs="SELECT s.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, s.laufendenummer, s.buchungsart " 
    2326                ."FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id "; 
    24         // Falls das Buchungsblatt fehlt (ModellschwÀche) wÀre ein LEFT JOIN hier nÃŒtzlich. Das Fehlen aber kontrollieren! ++ 
     27        // Falls das Buchungsblatt fehlt (ModellschwÀche) wÀre ein LEFT JOIN hier nÃŒtzlich. Das Fehlen aber kontrollieren! 
    2528 
    2629        if ($gskennz == '') { // normaler Link ÃŒber gmlid 
     
    6669} 
    6770 
    68 function bs_dienend($gmlid_h) { 
    69 // Eine ggf. vorhandene dienende Buchungsstelle suchen und dessen GML_ID liefern. 
    70         global $debug, $gerooted; 
     71function Back2theRoots($gmlid) { 
     72// Die Buchungsstelle aus dem Aufruf-Parameter wenn eindeutig möglich iterativ zurÃŒck fÃŒhren auf die dienende Buchungsstelle,  
     73// auf der die FlurstÃŒcke gebucht sind (Buchungsart="GrundstÃŒck" oder Blattart="fiktives Blatt"). 
     74// Der GrundstÃŒcksnachweis wird aus anderen Modulen nur fÃŒr die "GrundstÃŒck"-Buchung aufgerufen, so dass diese Suche nicht notwendig ist. 
     75// Bei Aufrufen von außen kann dies aber sinnvoll sein. 
     76 
     77// ToDo: um Mehr als eine Stufe zurÃŒck fÃŒhren (max. 3) 
     78 
     79        global $gkz, $dbg, $showkey, $gerooted; 
     80        $gd=$gmlid; // gml dienend 
     81 
    7182        // BS-herrschend (bekannt)  >an[]>  BS-dienend (gesucht) 
    72         $sqld="SELECT d.gml_id FROM ax_buchungsstelle d JOIN ax_buchungsstelle h ON d.gml_id=any(h.an) " 
    73                 ."WHERE h.gml_id = $1 and d.endet IS NULL AND h.endet IS NULL"; 
    74         $v=array($gmlid_h); 
    75         $resd=pg_prepare("", $sqld); 
    76         $resd=pg_execute("", $v); 
    77         $cntd=0; 
    78         while($rowd=pg_fetch_assoc($resd)) { 
    79                 $cntd++; 
    80                 $gmlid_d=$rowd["gml_id"]; 
    81         } 
    82         if ($cntd === 0) { // KEINE dienende BS 
    83                 $gmlid_d=""; 
    84         } elseif ($cntd > 1) { // Problem: mehrere dienende BS 
    85                 $gmlid_d=""; // wennn mehrere (.an=Array[]), dann nicht eindeutig rÃŒckfÃŒhrbar. 
    86                 $gerooted=false; // Root nicht erreicht 
    87                 if ($debug > 2 ) { // Meldung? Auswahl? 
    88                         echo "\n<p class='err'>Mehrere 'diendende' Buchungen zur Buchung '".$gmlid_h."'</p>"; 
    89                 } 
    90         } 
    91         pg_free_result($resd); 
    92         return $gmlid_d; 
    93 } 
    94  
    95 function Back2theRoots($gmlid_h) { 
    96 // Eine Buchungsstelle (aus dem Aufruf-Parameter) zurÃŒck fÃŒhren auf die Basis-Buchungsstelle 
    97 // Suchen bis Buchungsart="GrundstÃŒck" oder ggf. Blattart="fiktives Blatt" 
    98         global $debug; 
    99         $gh=$gmlid_h; // herrschend 
    100         $gd=$gh; // dienend 
    101         $gr=$gd; // root 
     83        $sql="SELECT d.gml_id, d.laufendenummer FROM ax_buchungsstelle d JOIN ax_buchungsstelle h ON d.gml_id=any(h.an) " 
     84                ."WHERE h.gml_id = $1 and d.endet IS NULL AND h.endet IS NULL ORDER BY d.laufendenummer;"; 
     85 
    10286        while($gd != "") { 
    103                 $gr=$gd; // sichern 
    104                 $gd=bs_dienend($gh); // an? 
    105                 $gh=$gd; // fuer weitere Loop 
    106         } 
     87                $gr=$gd; // gml Return 
     88                $v=array($gd); 
     89                $res=pg_prepare("", $sql); 
     90                $res=pg_execute("", $v); 
     91                $zeianz=pg_num_rows($res); 
     92                if ($zeianz == 0){ // sollte nicht vorkommen, die Buchungsart "GrundstÃŒck" ruft dies NICHT auf 
     93                        if ($dbg > 1 ) {echo "\n<p class='err'>Keine 'diendende' Buchung zur Buchung '".$gd."'</p>";} 
     94                        $gd="";                  
     95                } elseif ($zeianz == 1){ 
     96                        if ($dbg > 1 ) {echo "\n<p class='dbg'>Eine 'diendende' Buchung zur Buchung '".$gd."'</p>";} 
     97                        $row=pg_fetch_assoc($res); 
     98                        $gd=$row["gml_id"]; 
     99                } else { // > 1 // Seltener Sonderfall 
     100                        if ($dbg > 1 ) {echo "\n<p class='dbg'>".$zeianz." 'diendende' Buchungen zur Buchung '".$gd."'</p>";} 
     101                        $gerooted=false; // Root (GrundstÃŒck) wird nicht erreicht 
     102                        $gd=""; // wenn mehrere (.an=Array[]), dann nicht eindeutig rÃŒckfÃŒhrbar 
     103                        echo "\n<table class='fs'>\n<tr>\n\t<td class='heads'>Hinweis</td>" 
     104                        ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>" 
     105                        ."\n</tr>"; 
     106                        echo "\n<tr>\n\t<td>Die angeforderte Buchung hat Rechte an ".$zeianz." anderen Buchungen." 
     107                        ."<br>F&uuml;r die Anzeige der Flurst&uuml;cke muss eine dieser Grundst&uuml;cks-Buchungen gew&auml;hlt werden.</td>" 
     108                        ."\n\t<td>\n\t\t<p class='nwlink noprint'>"; 
     109                        while($row=pg_fetch_assoc($res)) { 
     110                                $gml_d=$row["gml_id"]; 
     111                                $bvnr=ltrim($row["laufendenummer"], '0'); 
     112                                echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_d; 
     113                                if ($showkey) {echo "&amp;showkey=j";} 
     114                                echo "' title='Grundst&uuml;cksnachweis'>Buchung ".$bvnr 
     115                                ." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a><br>"; 
     116                        } 
     117                        echo "\n\t\t</p>\n\t</td>\n</tr>\n</table>"; 
     118                } 
     119        } 
     120        pg_free_result($res); 
    107121        return $gr; 
    108122} 
    109123 
    110 // H i e r   S t a r t 
     124// S t a r t 
    111125ini_set("session.cookie_httponly", 1); 
    112126session_start(); 
     
    156170<?php 
    157171$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); } 
    158  
    159 if ($nodebug === "j") {$debug=0;}  
     172$dbg=$debug; // CONF in Arbeits-Variable 
     173if ($nodebug === "j") {$dbg=0;}  
    160174$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgsnw.php'"); 
    161175if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>"; 
    162176 
    163 $gmlid_p=$gmlid; // Wert aus Parameter merken 
    164 $gerooted=true; // Auskunft beginnt mit dienendem GrundstÃŒck 
    165 $gmlid=get_GS_Daten($gmlid, $gskennz); // nachschauen 
    166 $gml_anfrd=$gmlid; // ursprÃŒngliche Anforderung aus URL merken 
     177$gml_anfrd=$gmlid;      // ursprÃŒngliche Anforderung aus URL merken 
     178$gerooted=true;         // Auskunft beginnt mit (dienendem) GrundstÃŒck 
     179$gmlid=get_GS_Daten($gmlid, $gskennz); // nachschauen, Variablen setzen, Keine Ausgabe 
    167180if ($gmlid == "") { // nix gefunden 
    168181        die("Kein Treffer"); 
    169 } else { // Treffer 
    170         if ($gsbart != "1100") { // Buchungsart "GrundstÃŒck" 
    171                 $gmlid_r=Back2theRoots($gmlid); 
    172                 if ($gmlid_r != $gmlid) { // wurde hoch gerÃŒckt 
    173                         $gmlid=get_GS_Daten($gmlid_r, ""); // damit weiter arbeiten 
    174                 } 
    175         } 
    176182} 
    177183echo "<p class='balken gskennz'>ALKIS Grundst&uuml;ck ".$gsbez."-".rtrim($gsblatt)."-".$gslfdnr."&nbsp;</p>\n\n<h2>Grundst&uuml;ck</h2>"; // Balken 
    178184 
    179 if ($gerooted) { 
    180         // F l u r s t u e c k e 
    181         echo "\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>" 
    182                 ."\n<table class='fs'>"; 
    183         echo "\n<tr>" // Kopfzeile 
     185// F l u r s t ÃŒ c k e 
     186echo "\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>"; 
     187 
     188if ($gsbart > 1102){ // Recht an .. 
     189        $gmlid_r=Back2theRoots($gmlid); 
     190        if ($gmlid_r != $gmlid) { // wurde hoch gerÃŒckt 
     191                $gmlid=get_GS_Daten($gmlid_r, ""); // damit weiter arbeiten 
     192        } 
     193} 
     194if ($gerooted) { // // Buchungsart (aufgeteiltes) GrundstÃŒck (nicht Recht an ..) 
     195        echo "\n<table class='fs'>\n<tr>" // Kopfzeile 
    184196                ."\n\t<td class='heads'>Gemarkung</td>" 
    185197                ."\n\t<td class='heads'>Flur</td>" 
    186198                ."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>" 
    187                 ."\n\t<td class='head flag'>Fl&auml;che</td>" 
     199                ."\n\t<td class='head fla'>Fl&auml;che</td>" 
    188200                ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>" 
    189201        ."\n</tr>"; 
     
    191203        //++ Tabelle hat noch Platz, SQL in der Loop oder Subquery wÀre möglich, weil i.d.R. nur wenige FS je GS gebucht sind. 
    192204 
    193         $sqlfs="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche  
    194         FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer  
    195         WHERE f.istgebucht = $1 AND f.endet IS NULL AND g.endet IS NULL "; 
     205        $sqlfs ="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche " 
     206        ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g") 
     207        ."WHERE f.istgebucht = $1 AND f.endet IS NULL AND g.endet IS NULL "; 
    196208        if ($filtgem === '' ) { // ungefiltert 
    197209                $v=array($gmlid); 
     
    236248        if ($j === 0) {echo "\n<tr class='unp'>\n\t<td colspan='5'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n</tr>";} 
    237249        echo "\n</table>"; 
    238 } else { // konnte nicht bis zur Basis aufsteigen 
    239         echo "<p>Die angeforderte Buchung hat Rechte an mehreren anderen Buchungen." 
    240         ."<br>F&uuml;r die Anzeige der Flurst&uuml;cke muss eine dieser Buchungen (Grundst&uuml;ck) gew&auml;hlt werden.</p>"; 
    241         // Auswahl anbieten? Sonst ÃŒber den Link "Bestand" recherchieren.  
    242250} 
    243251 
     
    268276                $anzber=count($verf_next); 
    269277        } 
    270 echo "\n</table>\n\n"; 
    271 //if ($debug > 1) {echo "<p class='dbg'>Buchung gezeigt = ".$gezeigt."</p>";} 
    272  
     278echo "\n</table>\n"; 
    273279pg_close($con); 
    274 echo <<<END 
    275 <div class='buttonbereich noprint'> 
    276 <hr> 
    277         <a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp; 
    278         <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp; 
    279 END; 
     280 
     281echo "<div class='buttonbereich noprint'>\n<hr>" 
     282        ."\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;"; 
     283if ($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;";} 
    280284if ($stufe < 3) { 
    281285        echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_gs.png' width='32' height='16' alt='Export'></a>"; 
Note: See TracChangeset for help on using the changeset viewer.