Ignore:
Timestamp:
01/13/11 17:42:06 (13 years ago)
Author:
frank.jaeger
Message:
 
File:
1 edited

Legend:

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

    r66 r68  
    11<?php 
    2 // Version vom 10.01.2011 
    3  
    4 // ToDo:  
    5 //  Auswahl oder Sortierung "Gemeinde" if ($gemeinde == 0) 
    6 //  Sortierung nach Nummer aus Hausnummer 
    7  
    8 $gkz = urldecode($_REQUEST["gkz"]); // Mandant 
     2// Version vom 13.01.2011 
     3import_request_variables("PG"); 
    94include("../../conf/alkisnav_conf.php"); 
    10 import_request_variables("PG"); 
    11 // Datenbank-Connection 
    125$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password; 
    136$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname); 
    14  
    157?> 
    168 
     
    2618</head> 
    2719<body> 
    28  
    2920<?php 
     21 
     22 
    3023function suchStrName() { 
    31 // ============================ 
    32 // Straßen nach Name(-nsanfang) 
    33 // ============================ 
     24        // Straßen nach Name(-nsanfang) 
    3425        global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $debug; 
    3526        $linelimit=120;  // -> in die Conf? 
     
    3829        $matches[1] = preg_replace("/str\./i","str", $matches[1]);  
    3930        if(preg_match("/\*/",$matches[1])){ 
    40                 $match="'".trim(preg_replace("/\*/i","%", strtoupper($matches[1]))). "' "; 
    41         } else { 
    42                 $match="'".trim($matches[1])."%' "; 
    43         } 
    44         $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage  "; 
     31                $match=trim(preg_replace("/\*/i","%", strtoupper($matches[1]))); 
     32        } else { 
     33                $match=trim($matches[1])."%"; 
     34        } 
     35        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; 
    4536        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; 
    46         $sql.="JOIN ax_gemeinde g "; 
    47         $sql.="ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde "; 
    48         $sql.="WHERE k.bezeichnung ILIKE ".$match." "; 
     37        $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 "; 
     38        $sql.="WHERE k.bezeichnung ILIKE $1 "; 
    4939        if($gemeinde > 0) { // Filter Gemeinde? 
    5040                $sql.="AND k.gemeinde=".$gemeinde." "; 
    5141        } 
    52         $sql.="ORDER BY k.bezeichnung, k.lage "; 
    53         // +++  if ($gemeinde == 0) ORDER Gemeinde, Straße? 
    54         $sql.="LIMIT ".$linelimit; 
    55         $res=pg_query($con, $sql); 
    56         if (!$res) { 
    57                 return "\n<p class='err'>Fehler bei Name</p>"; 
    58         } 
     42        $sql.="ORDER BY k.bezeichnung, k.lage LIMIT $2 ;"; 
     43        $v=array($match,$linelimit); 
     44        $res=pg_prepare("", $sql); 
     45        $res=pg_execute("", $v); 
     46        if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";} 
    5947        $cnt = 0; 
    6048        while($row = pg_fetch_array($res)) { 
    61                 $sname=$row["bezeichnung"]; 
     49                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");           
    6250                $gkey=$row["schluesselgesamt"]; 
    63                 $gemname=$row["gemname"]; 
     51                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
    6452                $skey=$row["lage"]; 
    65                 echo "\n\t<div class='st' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>"; 
    66                         echo "<a class='st' href='alkisnav_adr.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$gkey."'>".$sname; 
    67                         if ($gemeinde == 0) { 
    68                                 echo " - ".$gemname; 
     53                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>"; 
     54                        if (trim($skey, "0..9") == "") { // Integer 
     55                                echo "<a class='stl' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$gkey."'>".$sname."</a>"; 
     56                        } else { // Klassifizierung? 
     57                                echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer) 
    6958                        } 
    70                         echo "</a><br>"; 
     59                        if (! isset($gemeinde)) {echo " in ".$gemname;} 
    7160                echo "</div>"; 
    7261                $cnt++; 
     
    7564                echo "<p>Keine Stra&szlig;e.</p>"; 
    7665        } elseif($cnt == 1) { // Eindeutig 
    77                 $str_schl=$skey; // dann gleich weiter 
     66                $str_schl=$gkey; // dann gleich weiter 
    7867        } elseif($cnt >= $linelimit) { 
    7968                echo "<p>.. und weitere</p>";                    
     
    8271} 
    8372 
     73function suchStrKey() { 
     74        // Straßen nach Strassen-Schluessel 
     75        global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $debug; 
     76        $linelimit=50; 
     77        if(preg_match("/\*/",$street)) { 
     78                $match=trim(preg_replace("/\*/i","%",$street)); 
     79                // -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard 
     80        } else { 
     81                $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten  
     82        } 
     83   //if ($debug >= 2) {echo "<p>sql-Match='".$match."'</p>";} 
     84        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; 
     85        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; 
     86        $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 "; 
     87        $sql.="WHERE k.lage LIKE $1 "; 
     88        if($gemeinde > 0) { // Filter Gemeinde? 
     89                $sql.="AND k.gemeinde=".$gemeinde." "; 
     90        } 
     91        $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;"; 
     92        $v=array($match,$linelimit); 
     93        $res=pg_prepare("", $sql); 
     94        $res=pg_execute("", $v); 
     95        if (!$res) {return "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";} 
     96        $cnt = 0; 
     97        while($row = pg_fetch_array($res)) { 
     98                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");           
     99                $gkey=$row["schluesselgesamt"]; 
     100                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
     101                $skey=$row["lage"]; 
     102                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>"; 
     103                        echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$gkey."'>".$sname; 
     104                        echo "</a>"; 
     105                        if (! isset($gemeinde)) {echo " in ".$gemname;} 
     106                echo "</div>"; 
     107                $cnt++; 
     108        } 
     109        if($cnt == 0) { 
     110                echo "\n<p>Keine Stra&szlig;e mit Schl&uuml;ssel ".$match."</p>"; 
     111        } elseif($cnt == 1) { // Eindeutig 
     112                $str_schl=$gkey; // dann gleich weiter 
     113        } elseif($cnt >= $linelimit) { 
     114                echo "\n<p>.. und weitere</p>";                  
     115        } else { 
     116                echo "\n<p class='hilfe'>".$cnt." Stra&szlig;en</p>";    
     117        }        
     118        return; 
     119} 
     120 
    84121function suchHausZurStr(){ 
    85 // ======================= 
    86 // Haeuser zu einer Straße 
    87 // ======================= 
     122        // Haeuser zu einer Straße 
    88123        global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $debug; 
    89          
    90124        // Strasse zum Strassenschluessel 
    91125        $sql ="SELECT k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage "; 
    92         $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; 
    93         $sql.="WHERE schluesselgesamt = $1 LIMIT 1";  
     126        $sql.="FROM ax_lagebezeichnungkatalogeintrag AS k WHERE schluesselgesamt = $1 LIMIT 1";  
    94127        $v=array($str_schl); 
    95128        $res=pg_prepare("", $sql); 
    96129        $res=pg_execute("", $v); 
    97  
    98130        if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden 
    99131                $sname=$row["bezeichnung"]; 
     
    102134                $kreis=$row["kreis"]; 
    103135                $gemnd=$row["gemeinde"]; 
    104                 //$lage=$row["lage"]; 
    105136                $nr=ltrim($row["lage"], "0"); 
    106  
    107                 // eine Koordinaten zur ausgewählten Strasse besorgen 
     137                // eine Koordinate zur Strasse besorgen 
    108138                // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer 
    109139                $sqlko ="SELECT ";               
     
    115145                $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";        
    116146                $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;";  // die erstbeste beliebige Koordinate 
    117 //              $resko=pg_query($con, $sqlko); 
    118147                $v=array($land,$regb,$kreis,$gemnd,$nr); 
    119148                $resko=pg_prepare("", $sqlko); 
     
    127156                } 
    128157                $sqlko.=""; 
    129                 //if ($debug >= 2) {echo "\n<p class='err'>Koord: '".$x."' '".$y."'</p>";} 
    130                 echo "\n<div class='st'>";               
     158                echo "\n<div class='stu'>";              
    131159                if ($x > 0) { // Koord. bekommen? 
    132                         echo "<a title='Positionieren 1:".$scalestr."' href='"; // mit Link 
     160                        echo "\n\t<a title='Positionieren 1:".$scalestr."' href='"; // mit Link 
    133161                                echo "javascript:parent.parent.hideHighlight();"; 
    134                                 echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr.");"; 
    135                                 echo " document.location.href=\"alkisnav_adr.php?gkz=".$gkz."&amp;str_schl=".$str_schl."\"' "; 
    136                                 echo "onmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' "; 
    137                                 echo "onmouseout='parent.parent.hideHighlight()'"; 
    138                         echo ">".$sname." (".$nr.")</a>"; 
     162                                echo "\n\t\tparent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr.");"; 
     163                                echo "\n\t\tdocument.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$str_schl."\"' "; 
     164                                echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' "; 
     165                                echo "\n\t\tonmouseout='parent.parent.hideHighlight()'"; 
     166                        echo ">\n\t\t".$sname." (".$nr.")\n\t</a>"; 
    139167                } else { // keine Koord. dazu gefunden 
    140168                        echo $sname." (".$nr.")"; // nur Anzeige, ohne Link 
    141169                } 
    142                 echo "\n</div><hr>"; 
     170                echo "\n</div>\n<hr>"; 
    143171                 
    144172                // Haeuser zum Strassenschluessel 
    145                 $sql ="SELECT h.hausnummer, "; 
     173                $sql ="SELECT replace (h.hausnummer, ' ','') AS hsnr, "; 
    146174                $sql.="x(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS x, "; 
    147175                $sql.="y(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS y "; 
     
    149177                $sql.="JOIN alkis_beziehungen v ON h.gml_id=v.beziehung_zu "; 
    150178                $sql.="JOIN ax_gebaeude g ON v.beziehung_von=g.gml_id "; 
    151                 $sql.="WHERE h.land=".$land." AND h.regierungsbezirk=".$regb." AND h.kreis=".$kreis." AND h.lage=".$nr." "; // integer 
     179                $sql.="WHERE h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.lage= $4 "; // integer 
    152180                $sql.="AND v.beziehungsart='zeigtAuf' "; 
    153                 $sql.="ORDER BY hausnummer;"; 
    154                 // Sortierproblem: Hausnummer, numerischer Teil sollte numerisch sortiert sein. 
    155                 //if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";} 
    156                 $resh=pg_query($con, $sql); 
     181                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; 
     182                $v=array($land,$regb,$kreis,$nr); 
     183                $resh=pg_prepare("", $sql); 
     184                $resh=pg_execute("", $v); 
    157185                $cnt=0; 
    158186                $count=0; 
    159                 echo "<table>"; 
    160  
     187                echo "\n<table>"; 
    161188                // mehrere Hausnummern je Zeile ausgeben 
    162189                while($rowh = pg_fetch_array($resh)) { 
    163                         if($count == 0){ 
    164                                 echo "\n<tr>"; 
    165                         } 
     190                        if($count == 0){echo "\n<tr>";} 
    166191                        $gml=$rowh["gml_id"];                    
    167                         $nr=$rowh["hausnummer"];                         
     192                        $nr=$rowh["hsnr"];                       
    168193                        $x=$rowh["x"]; 
    169194                        $y=$rowh["y"]; 
    170  
    171195                        echo "\n\t<td class='hsnr'>"; 
    172196                                echo "<a href='"; 
     
    176200                                echo "onmouseout='parent.parent.hideHighlight()"; 
    177201                                echo "'>".$nr."</a>"; 
    178                         echo "\n\t</td>"; 
     202                        echo "</td>"; 
    179203                        $cnt++; 
    180204                        $count++; 
     
    196220// =========== 
    197221if(isset($epsg)) { 
    198         if ($debug >= 2) {echo "<p>aktueller EPSG='".$epsg."'</p>";} // aus MB 
     222        if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB 
    199223        If (substr($epsg, 0, 5) == "EPSG:") {$epsg=substr($epsg, 5);} 
    200224} else { 
    201         if ($debug >= 2) {echo "<p class='err'>kein EPSG gesetzt</p>";}  
     225        if ($debug >= 2) {echo "\n<p class='err'>kein EPSG gesetzt</p>";}        
    202226        $epsg=$gui_epsg; // aus Conf 
    203227} 
     
    205229if ($debug >= 2) { 
    206230        if(isset($gemeinde)) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>"; 
    207         } else {echo "<p>Kein Filter Gemeinde</p>";} 
    208 } 
    209  
    210 if(isset($street)) { 
    211         // dies ist noch nicht möglich, es muesste der Gesamt-Keystring eingegeben werden        
    212         if (is_numeric($street)) { 
    213                 $str_schl = $street; // Schluessel (eindeutig) ist schon gesetzt 
    214         } else { 
     231        } else {echo "\n<p>Kein Filter Gemeinde</p>";} 
     232} 
     233 
     234if(isset($street)) { // Eingabe in Form 
     235        if (is_numeric(trim($street, "*"))) { // Zahl mit Wildcard 
     236                if ($debug >= 2) {echo "\n<p>Suche Key='".$street."'</p>";} 
     237                suchStrKey(); // Suche nach Schluessel 
     238        } else { 
     239                if ($debug >= 2) {echo "\n<p>Suche Name='".$street."'</p>";} 
    215240                suchStrName(); // Suche nach Name 
    216241        } 
    217 }  
    218 // Strassenschluessel suchen 
    219 // Verknuepfung zwischen "suchStrName" und "suchHausZurStr" uber Gesamt-Schluessel 
    220 // Alternative für Eingabefeld (nur db-Feld "lage")?   
    221 // z.B. HIER trennen zwischen Eingabe-Key und Result-Key 
    222  
    223 if(isset($str_schl)){ 
     242} 
     243if(isset($str_schl)){ // Eindeutiges Ergebnis oder Link 
     244        if ($debug >= 2) {echo "\n<p>Suche Haus zu ='".$str_schl."'</p>";} 
    224245        suchHausZurStr(); 
     246} else { 
     247        if ($debug >= 2) {echo "\n<p>Keine Suche Haus</p>";} 
    225248} 
    226249?> 
Note: See TracChangeset for help on using the changeset viewer.