Ignore:
Timestamp:
01/23/14 14:53:26 (10 years ago)
Author:
frank.jaeger
Message:

ALKIS-Auskunft, neues Modul "Straße"

File:
1 edited

Legend:

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

    r284 r306  
    55        2013-04-29      Test mit IE 
    66        2013-05-07  Strukturierung des Programms 
    7         2013-05-14  Feinkorrekturen. 
    8  
     7        2013-05-14  Feinkorrekturen 
     8        2013-05-15  Gruppierung nach Gemeinde, mehrfache HsNr (ap_pto.advstandardmodell) unterdrÃŒcken, Icon f. Straße 
     9        2014-01-23      Link zum Auskunft-Modul fÃŒr Straße 
    910        ToDo: 
     11        -       Gruppierung (mit Zeile) der Straßenliste nach Gemeinde 
    1012        -       Eingabe aus "Balken" von Buchauskunft "Lage" zulassen: Numerisch: Gem-Str-Haus-lfd 
     13                -- lfd (NebengebÀude) als Untergliederung der geklickten Haus-Nr anzeigen 
    1114                Analog zur Zerlegung des FS-Kennz in _fls 
    1215        -       Mouse-Over in Straßenliste soll Position zeigen. 
     
    1518$cntget = extract($_GET); 
    1619include("../../conf/alkisnav_conf.php"); 
     20include("alkisnav_fkt.php"); // Funktionen 
    1721$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password; 
    1822$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$$dbname.$dbvers.$gkz); 
     
    3236                        document.getElementById('transaktiontitle').innerHTML = trans; 
    3337                } 
     38                function imFenster(dieURL) { 
     39                        var link = encodeURI(dieURL); 
     40                        window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes'); 
     41                } 
    3442        </script> 
    3543</head> 
     
    4250END; 
    4351 
    44 function suchStrName() { 
    45         // Strassen nach Name(-nsanfang) 
    46         global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug; 
     52function suchStrName() { // Strassen nach Name(-nsanfang) 
     53        global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath; 
    4754        $linelimit=120;  // -> in die Conf? 
    4855        preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3]; 
     
    5461                $match=trim($matches[1])."%"; 
    5562        } 
    56         $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; 
     63        $sql ="SELECT g.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage "; 
    5764        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; 
    5865        $sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde "; 
     
    6875                        break; 
    6976        } 
    70         $sql.="ORDER BY k.bezeichnung, g.bezeichnung, k.lage LIMIT $2 ;"; 
     77        $sql.="ORDER BY g.bezeichnung, k.bezeichnung, k.lage LIMIT $2 ;"; 
    7178        $v=array($match,$linelimit); 
    7279        $res=pg_prepare("", $sql); 
     
    7481        if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";} 
    7582        $cnt = 0; 
     83        $gwgem=""; 
    7684        while($row = pg_fetch_array($res)) { 
    77                 $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");           
    78                 $gkey=$row["schluesselgesamt"]; // Land-Kreis-Gem-Strasse 
    79                 $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
    80                 $skey=$row["lage"]; 
     85                $gemname=$row["gemname"]; 
     86                $gemnr=$row["gemeinde"] ; 
     87                if ($gwgem != $gemname) { 
     88                        if ($gfilter != 1) { 
     89                                zeile_gemeinde($gemnr, $gemname, false); // ToDo: aber ohne Link oder Link verarbeiten können 
     90                        } 
     91                        $gwgem=$gemname; 
     92                } 
     93                $gkey=$row["schluesselgesamt"]; // Land-RegBez-Kreis-Gem-Strasse - fÃŒr weitere Suche 
     94                $skey=$row["lage"]; // Nur Str.-schl. daraus 
     95                $kgml=$row["gml_id"]; // ID von Katalog 
     96 
     97// +++ in function_zeile_strasse() 
     98                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");   
    8199                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>"; 
    82                         if (trim($skey, "0..9") == "") { // Integer 
    83                                 echo "<a class='stl' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."'>".$sname."</a>"; 
    84                         } else { // Klassifizierung? 
    85                                 echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer) 
    86                         }        
    87                         switch ($gfilter) { 
    88                                 case 0: // Kein Filter 
    89                                         echo " in ".$gemname; 
    90                                         break; 
    91                                 case 2: // Liste 
    92                                         echo " in ".$gemname; 
    93                                         break; 
    94                                 default: // Einzelwert 
    95                                         break; 
    96                         }                        
     100                // Icon -> Buchnachweis 
     101                echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>"; 
     102                        echo "\n\t\t<img class='nwlink' src='ico/Lage_mit_Haus.ico' width='16' height='16' alt='STR' title='Stra&szlig;e'>"; 
     103                echo "\n\t</a>"; 
     104                echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."'>".$sname."</a>"; 
    97105                echo "</div>"; 
     106// +++ function ende 
    98107                $cnt++; 
    99108        } 
     
    110119} 
    111120 
    112 function suchStrKey() { 
    113         // Strassen nach Strassen-Schluessel 
    114         global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug; 
    115         $linelimit=50; 
     121function suchStrKey() { // Strassen nach num. Schluessel 
     122        global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath; 
     123        $linelimit=60; 
    116124        if(preg_match("/\*/",$street)) { 
    117125                $match=trim(preg_replace("/\*/i","%",$street)); 
    118                 // -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard 
     126                // fuehrende Nullen eingeben oder fuehrende Wildcard 
    119127        } else { 
    120128                $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten  
    121129        } 
    122    //if ($debug >= 2) {echo "<p>sql-Match='".$match."'</p>";} 
    123         $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; 
     130        $sql ="SELECT g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage "; 
    124131        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; 
    125132        $sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde "; 
     
    132139                        $sql.="AND k.gemeinde in (".$gemeinde.") "; 
    133140                        break; 
    134                 default: // kein Filter 
    135                         break; 
    136         } 
    137  
     141        } 
    138142        $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;"; 
    139143        $v=array($match,$linelimit); 
     
    147151                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
    148152                $skey=$row["lage"]; 
     153                $kgml=$row["gml_id"]; // ID von Katalog  
     154                 
     155// +++ in function_zeile_strasse() 
    149156                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>"; 
     157 
     158                        // Icon -> Buchnachweis 
     159                        echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisstrasse.php?gkz=".$gkz."&amp;gmlid=".$kgml."\")'>"; 
     160                                echo "\n\t\t<img class='nwlink' src='ico/Lage_mit_Haus.ico' width='16' height='16' alt='STR' title='Stra&szlig;e'>"; 
     161                        echo "\n\t</a>";                 
     162                 
    150163                        echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='".$gemname."'>".$sname; 
    151164                        echo "</a>"; 
     
    159172                        } 
    160173                echo "</div>"; 
     174// function ende 
    161175                $cnt++; 
    162176        } 
     
    173187} 
    174188 
    175 function suchHausZurStr($showParent){ 
    176         // Haeuser zu einer Strasse 
     189function suchHausZurStr($showParent) { // Haeuser zu einer Strasse 
    177190        global $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug; 
     191 
     192        // Head 
    178193        // Strasse zum Strassenschluessel 
    179194        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage "; 
     
    181196        $sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde "; 
    182197        $sql.="WHERE k.schluesselgesamt = $1 LIMIT 1";  
    183         $v=array($str_schl); 
     198        $v=array($str_schl);    // Schluessel-Gesamt .. 
    184199        $res=pg_prepare("", $sql); 
    185200        $res=pg_execute("", $v); 
    186         if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden 
     201        if($row = pg_fetch_array($res)) { // .. gefunden 
    187202                $sname=$row["bezeichnung"]; 
    188                 $land =$row["land"]; 
     203                $land =$row["land"];    // Einzel-Felder fÃŒr JOIN _lagebezeichnung_ 
    189204                $regb =$row["regierungsbezirk"]; 
    190205                $kreis=$row["kreis"]; 
    191206                $gemnd=$row["gemeinde"]; 
     207                $nr=$row["lage"]; 
    192208                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
    193                 $nr=$row["lage"]; 
    194209                if ($showParent) { 
    195                         // eine Koordinate zur Strasse besorgen 
     210                        // EINE Koordinate zur Strasse besorgen 
    196211                        // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer 
    197212                        $sqlko ="SELECT "; 
     
    224239                                                echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr."); "; 
    225240                                                echo "parent.parent.showHighlight(".$x.",".$y."); "; 
    226                                                 //echo "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$str_schl."\""; 
     241                                        //      echo "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$str_schl."\""; 
    227242                                        echo "' "; // end href 
    228243                                        echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' "; 
     
    243258                } 
    244259                echo "\n<hr>"; 
     260 
     261                // Body 
    245262                // Haeuser zum Strassenschluessel 
    246                 $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, "; 
     263                $sql="SELECT min(replace(h.hausnummer,' ','')) AS hsnr, "; 
    247264                if($epsg == "25832") { // Transform nicht notwendig 
    248                         $sql.="st_x(p.wkb_geometry) AS x, "; 
    249                         $sql.="st_y(p.wkb_geometry) AS y ";              
     265                        $sql.="avg (st_x(p.wkb_geometry)) AS x, "; 
     266                        $sql.="avg (st_y(p.wkb_geometry)) AS y ";                
    250267                } else {   
    251                         $sql.="st_x(st_transform(p.wkb_geometry,".$epsg.")) AS x, "; 
    252                         $sql.="st_y(st_transform(p.wkb_geometry,".$epsg.")) AS y ";              
     268                        $sql.="avg (st_x(st_transform(p.wkb_geometry,".$epsg."))) AS x, "; 
     269                        $sql.="avg (st_y(st_transform(p.wkb_geometry,".$epsg."))) AS y ";                
    253270                } 
    254271                $sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von "; 
     
    256273                $sql.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' "; 
    257274                $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; 
     275                $sql.="GROUP BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2) "; 
    258276                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; 
     277                // Problem: mehrere Koordinaten fÃŒr verschiedene MaßstÀbe der Kartendarstellung 
     278                // Diese sollten nicht mehrfach gelistet werden. FÃŒr Positionierung "irgendeine" nehmen. 
     279                // Lösung: ÃŒber GROUP BY in SQL. Alternative Lösungen wÀren:  
     280                //  1. Gruppenwechsel bei Abarbeitung des Result 
     281                //  2. Subquery mit LIMIT 1 statt JOIN 
     282                //  3. Geometrie aus GebÀude-Mittelpunkt statt aus PrÀsentationsobjekt der Hausnummer 
    259283 
    260284                $v=array($land,$regb,$kreis,$gemnd,$nr); 
    261285                $resh=pg_prepare("", $sql); 
    262286                $resh=pg_execute("", $v); 
     287                #echo "<p class='dbg'>SQL='".$sql."'<br>Array=".$v[]."</p>"; // TEST 
     288 
    263289                $cnt=0; 
    264290                $count=0; 
     
    272298                                echo "<a href='"; 
    273299                                        echo "javascript:"; 
    274                                         echo "transtitle(\"auf Haus positioniert\"); "; 
     300                                        echo "transtitle(\"auf Haus ".$hsnr." positioniert\"); "; 
    275301                                        echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); "; 
    276302                                        echo "parent.parent.showHighlight(".$x.",".$y.");' "; 
     
    288314                if($count > 0) {echo "\n</tr>";} 
    289315                echo "\n</table>"; 
    290                 echo "\n<p class='anz'>".$cnt." Hausnummern</p>"; 
     316                if ($cnt > 1) { 
     317                        echo "\n<p class='anz'>".$cnt." Hausnummern</p>"; 
     318                } 
    291319        } else { 
    292320                echo "\n<p class='anz'>Keine Stra&szlig;e</p>"; 
     
    298326// =========== 
    299327if(isset($epsg)) { 
    300         #if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB 
    301328        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);    
    302329} else { 
    303         #if ($debug >= 1) {echo "\n<p class='err'>kein EPSG gesetzt</p>";}       
    304330        $epsg=$gui_epsg; // aus Conf 
    305331} 
    306 #if ($debug >= 2) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";} 
    307332if ($gemeinde == "") { 
    308333        $gfilter = 0; // ungefiltert 
     
    312337        $gfilter = 2; // Liste 
    313338} 
    314 if (isset($str_schl)) { // aus Link 
     339 
     340// +++  Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage": 
     341//                      Numerisch: Gem-Str-Haus-lfd 
     342 
     343if ($str_schl != "") { // aus Link 
    315344        $trans="Hausnummern zur Stra&szlig;e"; 
    316345        suchHausZurStr(true); 
    317 } elseif(isset($street)) { // Eingabe in Form 
     346} elseif($street != "") { // Eingabe in Form 
    318347        if (trim($street, "*,0..9") == "") { // Zahl, ggf. mit Wildcard 
    319348                $trans="Suche Stra&szlig;enschl&uuml;ssel \"".$street."\""; 
Note: See TracChangeset for help on using the changeset viewer.