Ignore:
Timestamp:
12/01/16 12:43:03 (7 years ago)
Author:
frank.jaeger
Message:

Verbesserungen an der ALKIS-Buchauskunft (Geschwindigkeit, Fehlerkorrekturen, Mandantenfähigkeit) und an der Mapbender2-Navigation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mapbender/http/nav/alkisnav_fls.php

    r356 r376  
    11<?php 
    2 /* Version vom 
    3         2013-04-16      "import_request_variables" entfÀllt in PHP 5.4,  
    4                                 Fehlerkorrektur Komma in SQL bei FS-Suche. 
    5         2013-04-26      Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung" 
    6                                 ZurÃŒck-Link, Titel der Transaktion anzeigen 
    7         2013-04-29      Test mit IE 
    8         2013-05-07      Strukturierung des Programms, redundanten Code in Functions zusammen fassen 
    9         2013-05-14      Variablen-Namen geordnet, Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar. 
    10         2013-10-15      missing Parameter 
    11         2014-09-03      PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer 
    12         2014-09-15      Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL" 
    13         2014-12-11      Fehlerbehandlung bei Eingabe ungÃŒltiger Gemarkungsnummer. Tabellen pp_gemarkung und pp_flur verwenden. 
    14         2015-06-11      EineFlur, Limit fÃŒr Flurstuecke von 600 auf 900 erhoeht 
    15         2015-12-10      Umstellen .ico auf .png, 
    16                                 Vermeidung nicht initialisierter Variable. Somit ausfÃŒhrbar mit php.ini-Einstellungen: 
    17                                 - error_reporting = E_ALL | E_STRICT 
    18                                 - display_errors = on 
    19                                 .. ohne störende Meldungen. 
     2/*      Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil FlurstÃŒck-Suche  
     3        Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 
     4 
     5Hinweis: In der Mapbender-Konfiguration muss die Gemeindenummer nun 3stellig mit fÃŒhrenden 0 angegeben sein.  
     6 
     7Version vom 
     8        2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet. 
     9        2016-03-02 $gemeinde auf feste LÀnge korrigieren 
     10        2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen 
    2011*/ 
    2112 
     
    2516 
    2617$cntget = extract($_GET); 
     18$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÀr bei Umstellung auf norGIS, besser im Mapbender 3stellig konfigurieren. 
    2719include("../../conf/alkisnav_conf.php"); 
    2820include("alkisnav_fkt.php"); // Funktionen 
    29 $con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password; 
    30 $con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz); 
     21$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz); 
    3122 
    3223echo <<<END 
    33 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    34 <html> 
     24<!doctype html> 
     25<html lang="de"> 
    3526<head> 
    3627        <meta http-equiv="cache-control" content="no-cache"> 
    3728        <meta http-equiv="pragma" content="no-cache"> 
    3829        <meta http-equiv="expires" content="0"> 
    39         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     30        <meta charset="utf-8"> 
    4031        <title>ALKIS-Suche Flurst&uuml;ck</title> 
    4132        <link rel="stylesheet" type="text/css" href="alkisnav.css"> 
     
    6253function h_hinten($zahl) { 
    6354        // Testen: Wurde an eine Zahl ein "h" angehÀngt? 
    64         // Wenn ja, dann Schalter setzen und nur numerischen Teil zurÃŒck geben. 
     55        // Wenn ja, dann Schalter setzen und nur den numerischen Teil zurÃŒck geben. 
    6556        global $phist, $debug; 
    6657        $zahl=trim($zahl); 
     
    8071 
    8172function ZerlegungFsKennz($fskennz) { 
    82         // Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn 
    83         // Teile der Zerlegung in global-Vars "$z..." 
    84         global $debug, $zgemkg, $zflur, $zzaehler, $znenner;     
     73        // Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird (ll)gggg-fff-zzzz/nnn 
     74        // Die Teile der *Z*erlegung werden ÃŒber die Global-Variablen "$z..." allen Functions bereit gestellt. 
     75        // Der Returncode dieser Function steuert die weitere Verarbeitung. 
     76        global $debug, $land, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner;   
    8577        $arr = explode("-", $fskennz, 4); // an den Trenn-Strichen aufteilen 
    86         $zgemkg=trim($arr[0]); 
     78 
     79        // Gemarkung mit oder ohne Land davor? In der Eingabe soll beides zulÀssig sein. 
     80        // Bei den SQL-Abfragen in der norGIS-ALKIS-Importer Datenbankstruktur werden abwechselnd beide 
     81        // Formate benötigt: z.B. ax_gemarkungsteilflur.gemarkung -> 4stellig, gema_shl.gemashl -> 6stellig 
     82        // Also gleich beide Formate vorhalten. 
     83        $gemkg=trim($arr[0]); 
     84 
    8785        if (count($arr) > 1) { 
    8886                $zflur=h_hinten($arr[1]); 
     
    9694                $zfsnr=""; 
    9795        } 
    98         if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$zgemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";} 
    99         if ($zgemkg == "") { 
     96        if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$gemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";} 
     97 
     98        if ($gemkg == "") { 
    10099                return 0; // Gemeinden oder Gemarkungen listen 
    101         } elseif ( ! is_ne_zahl($zgemkg)) { 
     100        } elseif ( ! is_ne_zahl($gemkg)) { 
    102101                return 1; // Such Name 
    103         } elseif ($zflur == "") { 
    104                 return 2; // G-Nr 
     102        } 
     103 
     104        // Gemarkungs-NUMMER wurde eingegeben. Mit oder ohne Land davor? 
     105        if (strlen($gemkg) == 4 ) { // Eingabe ohne Land 
     106                $zgemkg4=$gemkg;                // 4stellige Version ohne Land 
     107                $zgemkg6=$land.$gemkg;  // 6stellige Version mit  Land 
     108        } elseif (strlen($gemkg) == 6 ) { // Eingabe mit Land 
     109                $zgemkg4=substr($gemkg, 2); 
     110                $zgemkg6=$gemkg; 
     111                if (substr($gemkg, 0, 2) != $land) { // Passt Eingabe zu Conf? 
     112                        echo "<p class='err'>Die 6-stellige Gemarkungsnummer '".$zgemkg6."' sollte mit Land '".$land."' beginnen.</p>"; 
     113                } 
     114        } else { // weder noch 
     115                $zgemkg4=$gemkg; // kann eigentlich nicht funktionieren 
     116                $zgemkg6=$gemkg; // Nullen davor setzen? 
     117                echo "<p class='err'>Die Gemarkungsnummer kann 4- oder 6-stellig (mit Land '".$land."') eingegeben werden.</p>"; 
     118        } 
     119 
     120        if ($zflur == "") { // keine Eingabe Flur-Nummer 
     121                return 2; // also nur Gemarkungs-Nr eingegeben 
    105122        } elseif ( ! is_ne_zahl($zflur)) { 
    106123                echo "<p class='err'>Die Flurnummer '".$zflur."' ist nicht numerisch</p>"; 
    107124                return 9; 
    108         } elseif ($zfsnr == "") { 
     125        } elseif ($zfsnr == "") { // Flur eingegeben, aber keine FlurstÃŒcksnummer mehr 
    109126                return 3; // Flur                                
    110127        } else { 
    111                 $zn=explode("/", $zfsnr, 2); 
     128                $zn=explode("/", $zfsnr, 2); // Bruchnummer? 
    112129                $zzaehler=h_hinten(trim($zn[0])); 
    113130                if (count($zn) > 1) {$znenner=h_hinten(trim($zn[1]));} else {$znenner="";} 
     
    149166} 
    150167 
    151 function zeile_gemarkung($gkgnr, $gkgname, $aktuell) { 
    152 // Eine Zeile zu Gemarkung ausgeben 
    153         global $con, $gkz, $gemeinde, $epsg, $gfilter; 
    154  
    155         if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen 
    156                 $sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;"; 
    157                 $v=array($gnr); 
    158                 $res=pg_prepare("", $sql); 
    159                 $res=pg_execute("", $v); 
    160                 if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkungsname.</p>";} 
    161                 $row = pg_fetch_array($res); 
    162                 $gkgname=$row["gemarkungsname"]; 
    163         } 
    164  
    165         if ($gkgname == "") {$gkgname = "(unbekannt)";} 
    166         $gnam=htmlentities($gkgname, ENT_QUOTES, "UTF-8"); 
    167         if ($aktuell) {$cls=" aktuell";} else {$cls="";} 
    168  
    169         echo "\n<div class='gk".$cls."' title='Gemarkung'>"; 
    170         echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.png' width='16' height='16' alt='GKG' title='Gemarkung'>"; 
    171         echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."'>";             
    172         echo  " ".$gnam."</a> (".$gkgnr.")"; 
    173         echo "\n</div>"; 
    174         return; 
    175 } 
    176  
    177 function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) { // Eine Zeile zur Flur ausgeben 
     168function zeile_flur($gkgnr, $flurnr, $histlnk, $aktuell) {  
     169        // Eine Kopf-Zeile zur Flur ausgeben 
    178170        global $gkz, $gemeinde, $epsg; 
     171 
    179172        if ($aktuell) {$cls=" aktuell";} else {$cls="";} 
    180173        echo "\n<div class='fl".$cls."' title='Flur'>"; 
     
    182175        $url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gkgnr."-".$flurnr; 
    183176        echo "<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'>Flur ".$flurnr." </a>";  
     177 
    184178        if ($histlnk) { // Link zur Historie-Suche anbieten 
    185179                echo " <a class='hislnk' title='Historische Flurst&uuml;cke der Flur suchen' href='".$url."&amp;hist=j'>Hist.</a>"; 
     
    217211 
    218212function zeile_nachf_fs($gml, $gknr, $flur, $fskenn, $ftyp) { 
    219         // Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben  
     213        // Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben 
    220214        global $gkz, $gemeinde, $epsg, $auskpath; 
     215 
    221216        $fs=$gknr."-".$flur."-".$fskenn; 
    222217        switch ($ftyp) { 
     
    250245 
    251246function ListGemeinden() { 
    252         // Bei Leereingabe im Formular die Gemeinden auflisten 
     247        // Bei Leereingabe im Formular die berechtigte(n) Gemeinde(n) auflisten 
    253248        global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter; 
    254249        $linelimit=60; 
    255250 
    256         $sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde "; 
     251        $sql ="SELECT trim(trailing from gemshl) as gemshl, gemname FROM gem_shl "; 
    257252        switch ($gfilter) { 
    258253                case 1: // Einzelwert 
    259                         $sql.="WHERE gemeinde='".$gemeinde."' "; break; 
     254                        $sql.="WHERE substring(gemshl from 6 for 3) = '".$gemeinde."' "; break; 
    260255                case 2: // Liste 
    261                         $sql.="WHERE gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break; 
     256                        $sql.="WHERE substring(gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; break; 
    262257                default: break; 
    263258        } 
    264         $sql.=" AND endet IS NULL ORDER BY gemeindename LIMIT $1 ;"; 
     259        $sql.=" AND endet IS NULL ORDER BY gemname LIMIT $1 ;"; 
    265260        $res=pg_prepare("", $sql); 
    266261        $res=pg_execute("", array($linelimit)); 
    267262        if (!$res) { 
    268263                echo "\n<p class='err'>Fehler bei Gemeinde</p>"; 
    269                 #if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";} 
     264                if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";} // ++Nur Entw. 
    270265                return 0; 
    271266        } 
    272267        $cnt = 0; 
    273268        while($row = pg_fetch_array($res)) { 
    274                 $gnr=$row["gemeinde"]; 
    275                 $gemeindename=$row["gemeindename"]; 
     269                $gnr=$row["gemshl"]; 
     270                $gemeindename=$row["gemname"]; 
    276271                zeile_gemeinde($gnr, $gemeindename); 
    277272                $cnt++; 
     
    299294 
    300295        // Body 
    301         $sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;"; 
     296        $sql ="SELECT gemashl, trim(trailing from gemarkung) AS gemarkung FROM gema_shl WHERE substring(gemshl from 1 for 8) = $1 ORDER BY gemarkung LIMIT $2 ;"; 
    302297        $res=pg_prepare("", $sql); 
    303298        $res=pg_execute("", array($gkey, $linelimit)); 
     
    308303        $cnt = 0; 
    309304        while($row = pg_fetch_array($res)) { 
    310                 $gnr=$row["gemarkung"]; 
    311                 $gnam=$row["gemarkungsname"]; 
     305                $gnr=$row["gemashl"]; // 6stellig 
     306                $gnam=$row["gemarkung"]; 
    312307                zeile_gemarkung($gnr, $gnam, false); 
    313308                $cnt++; 
     
    334329        } else { 
    335330                $match = trim($fskennz)."%"; 
    336         }        
    337         $sql ="SELECT g.gemeinde, g.gemarkung, g.gemarkungsname, s.gemeindename  
    338         FROM pp_gemarkung g JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde WHERE g.gemarkungsname ILIKE $1 "; 
     331        } 
     332 
     333        // Pass auf! GemeindeschlÃŒssel ist in den beiden SchlÃŒsseltabellen linksbÃŒndig gefÃŒllt, 
     334        // aber unterschiedlich lang hinten mit Leerstellen aufgefÃŒllt. 
     335        $sql ="SELECT substring(g.gemshl from 1 for 8) AS gemshl, g.gemashl, trim(trailing from g.gemarkung) AS gemarkung, trim(trailing from s.gemname) AS gemname  
     336        FROM gema_shl g JOIN gem_shl s ON substring(g.gemshl from 1 for 8) = substring(s.gemshl from 1 for 8) WHERE g.gemarkung ILIKE $1 "; 
     337 
    339338        switch ($gfilter) { 
    340339                case 1: // Einzelwert 
    341                         $sql.="AND g.gemeinde='".$gemeinde."'"; break; 
     340                        $sql.="AND substring(g.gemshl from 6 for 3)='".$gemeinde."'"; break; 
    342341                case 2: // Liste 
    343                         $sql.="AND g.gemeinde in ("."'".str_replace(",", "','", $gemeinde)."'".") "; break; 
    344         } 
    345         $sql.=" ORDER BY s.gemeindename, g.gemarkungsname LIMIT $2 ;"; 
     342                        $sql.="AND substring(g.gemshl from 6 for 3) in ("."'".str_replace(",", "','", $gemeinde)."'".") "; break; 
     343        } 
     344        $sql.=" ORDER BY s.gemname, g.gemarkung LIMIT $2 ;"; 
     345 
    346346        $v=array($match, $linelimit); 
    347347        $res=pg_prepare("", $sql); 
     
    354354        $gwgem=""; 
    355355        while($row = pg_fetch_array($res)) { 
    356                 $gemeindename=$row["gemeindename"]; 
     356                $gemeindename=$row["gemname"]; 
    357357                if ($gwgem != $gemeindename) { // Gruppierung Gemeinde 
    358358                        $gwgem = $gemeindename; 
    359                         $skey=$row["gemeinde"]; 
     359                        $skey=$row["gemshl"]; 
    360360                        zeile_gemeinde($skey, $gemeindename, false); 
    361361                } 
    362                 $gnam=$row["gemarkungsname"]; 
    363                 $gnr=$row["gemarkung"]; 
     362                $gnam=$row["gemarkung"]; 
     363                $gnr=$row["gemashl"]; // 6stellig 
    364364                zeile_gemarkung($gnr, $gnam, false); // wenn am Ende nur ein Treffer, dann aktuell=true 
    365365                $cnt++; 
     
    368368        if($cnt == 0){  
    369369                echo "\n<p class='anz'>Keine Gemarkung.</p>"; 
     370                if ($debug > 1) { 
     371/* 
     372                        // Nach Umstellung auf NorGIS-Struktur muss im Mapbender die Gemeinde 3stellig konfiguriert werden 
     373                        if (strlen($gemeinde) < 3) { 
     374                                echo "<p class='err'>URL-Parameter &gemeinde=nnn im Mapbender gazetteer_alkis.SRC muss 3stellig sein!<br>Ist aber '".$gemeinde."'.</p>"; 
     375                        } 
     376*/ 
     377                        if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = ".$match."</p>";} 
     378                } 
    370379        } elseif($cnt >= $linelimit) { 
    371380                echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>"; 
    372381        } elseif($cnt == 1) { // Eindeutig! 
    373                 return $gnr;  
     382                return $gnr; // 6stellige Gemarkungsnummer! 
    374383        } else { 
    375384                echo "\n<p class='anz'>".$cnt." Gemarkungen</p>"; 
     
    378387} 
    379388 
    380 function gg_head($gkgnr, $gkgaktuell) { 
    381         // Kopf-Zeilen Gemeinde und Gemarkung ausgeben 
    382         // Parameter: Gemarkungsnummer, aktuell hervorzuhebende Zeile 
     389function gg_head($gkgnr6, $gkgaktuell) { 
     390        // Gemeinde und Gemarkung (G+G) Kopf-Zeilen ausgeben 
     391        // Parameter: Gemarkungsnummer (6stellig), aktuell hervorzuhebende Zeile 
    383392        // Return: true/false ob gefunden  
    384393 
    385         $sqlh ="SELECT g.gemarkungsname, s.gemeinde, s.gemeindename FROM pp_gemarkung g  
    386         JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde AND g.land=s.land WHERE g.gemarkung = $1 ;"; 
    387  
    388         $v=array($gkgnr); 
     394        $sqlh ="SELECT g.gemarkung, substring(s.gemshl from 1 for 8) AS gemshl, trim(trailing from s.gemname) AS gemname  
     395        FROM gema_shl g JOIN gem_shl s ON g.gemshl=s.gemshl WHERE g.gemashl = $1 ;"; 
     396 
     397        $v=array($gkgnr6); 
    389398        $resh=pg_prepare("", $sqlh); 
    390399        $resh=pg_execute("", $v); 
     
    393402 
    394403        if ($rowh = pg_fetch_array($resh)) { 
    395                 $gmkg=$rowh["gemarkungsname"]; 
    396                 $skey=$rowh["gemeinde"]; 
    397                 $snam=$rowh["gemeindename"]; 
     404                $gmkg=$rowh["gemarkung"]; 
     405                $skey=$rowh["gemshl"]; 
     406                $snam=$rowh["gemname"]; 
    398407                zeile_gemeinde($skey, $snam, false); 
    399                 zeile_gemarkung($gkgnr, $gmkg, $gkgaktuell); 
     408                zeile_gemarkung($gkgnr6, $gmkg, $gkgaktuell); 
    400409                return true; 
    401410    } else { 
    402411                echo "\n<div class='gk' title='Gemarkung'>"; 
    403412                echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.png' width='16' height='16' alt='GKG' title='Gemarkung'>"; 
    404                 echo " Gemarkung ".$gkgnr." nicht gefunden!\n</div>"; 
     413                echo " Gemarkung ".$gkgnr6." nicht gefunden!\n</div>"; 
    405414                return false; 
    406415        } 
     
    409418function EineGemarkung($AuchGemkZeile) { 
    410419        // Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben 
    411         global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg; 
     420        global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg4, $zgemkg6; 
    412421        $linelimit=120; // max.Fluren/Gemkg 
    413422 
    414423        // Head 
    415424        if ($AuchGemkZeile) { // Kopf davor ausgeben 
    416                 if (! gg_head($zgemkg, true)) { 
     425                if (! gg_head($zgemkg6, true)) { 
    417426                        if ($debug >= 1) {echo "\n<p class='dbg'>Gem.-Gemkg.-Kopf abgebrochen</p>";}     
    418427                        return false; 
     
    421430 
    422431        // Body 
    423         // Tabelle pp_flur verwenden um nur Fluren aufzulisten, die tatsÀchlich FlurstÃŒcke enthalten 
    424         $sql ="SELECT flurnummer AS flur FROM pp_flur f WHERE gemarkung= $1 ORDER BY flurnummer LIMIT $2 ;"; 
    425         $v=array($zgemkg, $linelimit); 
     432        $sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; 
     433        $v=array($zgemkg4, $linelimit); 
    426434        $res=pg_prepare("", $sql); 
    427435        $res=pg_execute("", $v); 
     
    431439        while($row = pg_fetch_array($res)) {     
    432440                $zflur=$row["flur"]; 
    433                 zeile_flur($zgemkg, $zflur, false, false); 
     441                zeile_flur($zgemkg4, $zflur, false, false); 
    434442                $zfl++; 
    435443        } 
     
    448456function EineFlur() { 
    449457        // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen 
    450         global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg, $zflur; 
     458        global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg4, $zgemkg6, $zflur; 
    451459        $linelimit=900; // Wie groß kann eine Flur sein? 
    452460 
    453461        // Head 
    454         if (gg_head($zgemkg, false)) { 
    455                 zeile_flur($zgemkg, $zflur, true, true); 
     462        if (gg_head($zgemkg6, false)) { 
     463                zeile_flur($zgemkg4, $zflur, true, true); 
    456464        } else { 
    457465                return false; 
     
    467475                $sql.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                        
    468476        } 
     477 
    469478        $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND endet IS NULL  
    470479        ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; 
    471         $v=array($zgemkg, $zflur, $linelimit); 
     480        $v=array($zgemkg4, $zflur, $linelimit); 
    472481        $res=pg_prepare("", $sql); 
    473482        $res=pg_execute("", $v); 
     
    495504 
    496505function HistFlur() { 
    497         // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben. 
     506        // Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, "h" dahinter. 
    498507        // Die Flur nach historischen FlurstÃŒcken durchsuchen 
    499         global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur; 
     508        global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg4, $zgemkg6, $zflur; 
    500509        $linelimit=500; 
    501510 
    502511        // Head  
    503         if (gg_head($zgemkg, false)) { 
    504                 zeile_flur($zgemkg, $zflur, true, true); 
     512        if (gg_head($zgemkg6, false)) { 
     513                zeile_flur($zgemkg4, $zflur, true, true); 
    505514        } else { 
    506515                return false; 
     
    509518        // Body 
    510519        $whcl="WHERE flurstueckskennzeichen like $1 AND endet IS NULL "; 
    511         $sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl; 
    512         $sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl; 
     520 
     521        $sql ="SELECT 'h' AS ftyp, gml_id, cast(zaehler AS integer) AS zaehler, cast(nenner AS integer) AS nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl; 
     522        $sql.="UNION SELECT 'o' AS ftyp, gml_id, cast(zaehler AS integer) AS zaehler, cast(nenner AS integer) AS nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl; 
    513523        $sql.="ORDER BY zaehler, nenner LIMIT $2 ;";  
    514         $fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", STR_PAD_LEFT)."%"; 
     524        // "zaehler" und "nenner" sind in der Classic-Datenbank Integer-Werte aber in der Struktur  
     525        // des norGIS-ALKIS-Importers sind das Character-Strings, die linksbÃŒndig ohne fÃŒhrende Nullen gefÃŒllt sind. 
     526        // Der Anwender erwartet aber eine "numerische" Sortierung. 
     527 
     528        $fskzwhere=$zgemkg6.str_pad($zflur, 3, "0", STR_PAD_LEFT)."%"; 
    515529        $v=array($fskzwhere, $linelimit); 
    516530        $res=pg_prepare("", $sql); 
     
    523537                $fskenn=$row["zaehler"]; 
    524538                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer 
    525                 zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg, $zflur, false); 
     539                zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg4, $zflur, false); 
    526540                $zfs++; 
    527541        } 
     
    542556        // FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler (oder Nenner) eingegeben 
    543557        // Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler suchen wenn kein Nenner eingegeben wurde. 
    544         global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner; 
     558        global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner; 
    545559 
    546560        // Head 
    547         if (gg_head($zgemkg, false)) { 
    548                 zeile_flur($zgemkg, $zflur, true, false); 
     561        if (gg_head($zgemkg6, false)) { // Kopfzeilen: Gemeinde, Gemerkung, .. 
     562                zeile_flur($zgemkg4, $zflur, true, false); // .., Flur 
    549563        } else { 
    550564                return false; 
     
    561575        } 
    562576        $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 "; 
    563         If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared? 
    564         $sql.="AND endet IS NULL ORDER BY f.zaehler, f.nenner;"; 
    565         $v=array($zgemkg, $zflur, $zzaehler); 
     577 
     578//      If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} 
     579 
     580        // norGIS: "zaehler" ist integer in der DB, aber "nenner" ist character, linksbÃŒndig ohne fÃŒhrende '0' 
     581        If ($znenner != "") { 
     582                $suchnenn = ltrim($znenner, '0'); 
     583                If ($suchnenn != "") { 
     584                        $sql.="AND f.nenner='".$suchnenn."' "; 
     585                } 
     586        } 
     587        $sql.="AND endet IS NULL ORDER BY f.zaehler, cast(f.nenner AS integer);"; 
     588        $v=array($zgemkg4, $zflur, $zzaehler); 
    566589        $res=pg_prepare("", $sql); 
    567590        $res=pg_execute("", $v); 
    568         if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";} 
     591        if (!$res) { 
     592                echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>"; 
     593                if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<br>Parameter $1='".$zgemkg4."' $2='".$zflur."' $3='".$zzaehler."'<p>";} 
     594        } 
     595 
     596 
    569597        $zfs=0; 
    570598        while($row = pg_fetch_array($res)) {     
     
    582610                        echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.png' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;"; 
    583611                        echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>"; 
    584                         echo $zgemkg."-".$zflur."-".$zzaehler; 
     612                        echo $zgemkg4."-".$zflur."-".$zzaehler; 
    585613                        if ($znenner != "") {echo "/".$znenner;} 
    586614                        echo " h - suchen</a>"; 
     
    592620function HistFlurstueck() { 
    593621        // Die Nachfolger-FS-Kennzeichen zu einem Historischen FS sollen recherchiert werden. 
    594         global $debug, $land, $zgemkg, $zflur, $zzaehler, $znenner; 
     622        global $debug, $land, $zgemkg4, $zgemkg6, $zflur, $zzaehler, $znenner; 
    595623 
    596624        // Head 
    597         if (gg_head($zgemkg, false)) { 
    598                 zeile_flur($zgemkg, $zflur, true, false); 
     625        if (gg_head($zgemkg6, false)) { 
     626                zeile_flur($zgemkg4, $zflur, true, false); 
    599627        } else { 
    600628                return false; 
     
    604632        // Body 
    605633        // Suche ueber das Flurstueckskennzeichen, gml unbekannt 
    606         $fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where 
     634        $fskzwhere=$zgemkg6; // Flurst-Kennz. f. Where 
    607635        $fskzwhere.=str_pad($zflur, 3, "0", STR_PAD_LEFT); 
    608636        $fskzwhere.=str_pad($zzaehler, 5, "0", STR_PAD_LEFT); 
     
    639667                $ftyp=$row["ftyp"]; 
    640668                $fs_gml=$row["gml_id"]; 
    641                 $gknr=$row["gemarkungsnummer"]; 
     669                $gknr=$land.$row["gemarkungsnummer"]; // Land davor 
    642670                $flur=$row["flurnummer"]; 
    643671                $fskenn=$row["zaehler"]; 
     
    646674 
    647675                zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur, true); 
     676 
    648677                if ($nachf == "") { 
    649678                        echo "\n<p class='anz'>keine Nachfolger</p>";    
     
    659688                        $nawhcl="WHERE flurstueckskennzeichen IN ( ".$stri." ) AND endet IS NULL "; 
    660689 
    661                         $nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$nawhcl; 
     690                        // Pass auf! Spalte zaehler hat unterschiedliches Format in den 3 Tabellen 
     691                        $nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, cast(zaehler AS character varying), nenner FROM ax_flurstueck ".$nawhcl; 
    662692                        $nasql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$nawhcl; 
    663693                        $nasql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$nawhcl; 
     
    677707                                $naftyp=$narow["ftyp"]; 
    678708                                $nagml=$narow["gml_id"]; 
    679                                 $nagknr=$narow["gemarkungsnummer"]; 
     709                                $nagknr=$land.$narow["gemarkungsnummer"]; // Land davor, 4 auf 6 Stellen 
    680710                                $naflur=$narow["flurnummer"]; 
    681711                                $nafskenn=$narow["zaehler"]; 
     
    692722                        echo "\n<hr>"; 
    693723                } 
    694                 #} // aktuell ... 
    695724                $zfs++; 
    696725        } 
     
    712741        $epsg=$gui_epsg; // Conf 
    713742} 
     743 
     744// Filter aus Mapbender-GUI-Einbindung 
    714745if ($gemeinde == "") { 
    715746        $gfilter = 0; 
     
    725756        $gnr=ListGmkgInGemeinde($gm, $bez); 
    726757        if ($gnr > 0) { 
    727                 $zgemkg=$gnr; 
     758                $zgemkg4=$gnr; 
     759                $zgemkg6=$land.$zgemkg4; 
    728760                EineGemarkung(false); 
    729761        } 
     
    731763        $retzer=ZerlegungFsKennz($fskennz); 
    732764        if ($debug >= 1) {echo "\n<p class='dbg'>Return Zerlegung: ".$retzer."</p>";}    
    733         switch ($retzer) { // Return der Zerlegung 
     765        switch ($retzer) { // Returnwert der Zerlegung des FS-Kennz. 
    734766        case 0: // leere Eingabe 
    735767                if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert 
     
    746778                if ($gnr > 0) { 
    747779                        $trans="1 Gemarkung, Fluren dazu"; 
    748                         $zgemkg=$gnr; 
     780                        $zgemkg6=$gnr; 
     781                        $zgemkg4=substr($zgemkg6, 2); 
    749782                        EineGemarkung(false); 
    750783                } 
Note: See TracChangeset for help on using the changeset viewer.