Ignore:
Timestamp:
01/15/13 15:09:22 (11 years ago)
Author:
frank.jaeger
Message:

Kommentare zu Tabellen im Schema, Berechtigungen setzen für Buchauskunft und Nav, Vereinfachung bei Nav-Suche nach Hausnummern zur Straße

File:
1 edited

Legend:

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

    r191 r197  
    11<?php 
    22/* Version vom  
    3         11.04.2011 epsg in Link, transform nur wenn notwendig 
    4         25.07.2011 PostNAS 0.5/0.6 Versionen unterscheiden 
    5         24.10.2011 Nach Pos-Klick Highlight erneuern statt hideHighlight 
    6         09.12.2011 Sonderfall PostNAS 0.5 raus, 
    7     3.12.2012 Ausgabe von Hausnr ohne Gebaeude 
     3        2011-04-11 epsg in Link, transform nur wenn notwendig 
     4        2011-07-25 PostNAS 0.5/0.6 Versionen unterscheiden 
     5        2011-10-24 Nach Pos-Klick Highlight erneuern statt hideHighlight 
     6        2011-12-09 Sonderfall PostNAS 0.5 raus, 
     7        2012-12-03 A.E.: Ausgabe von Hausnr ohne Gebaeude 
     8        2013-01-15 F.J.: HsNr ohne GebÀude auf NRW/krz-Daten anpassen 
    89 
    910        ToDo: 
     11        -  auskommentierte Variante mit "subquery" entfernen 
    1012        -       Eingabe aus "Balken" von Buchauskunft "Lage" zulassen: Numerisch: Gem-Str-Haus-lfd 
    1113                Analog zur Zerlegung des FS-Kennz in _fls 
    12         -       Mouse-Over in Straßenliste soll Position zeigen, 
    13                 dazu in der DB eine Tabelle mit Koordinate zum StraßenschlÃŒssel aufbauen.  
     14        -       Mouse-Over in Straßenliste soll Position zeigen. 
     15                Dazu in der DB eine Tabelle mit Koordinate zum StraßenschlÃŒssel aufbauen.  
    1416*/ 
    1517import_request_variables("G"); 
     
    150152                                        break; 
    151153                        } 
    152  
    153154                echo "</div>"; 
    154155                $cnt++; 
     
    174175        $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 "; 
    175176        $sql.="WHERE k.schluesselgesamt = $1 LIMIT 1";  
    176   
    177         $v=array($str_schl); 
     177        $v=array($str_schl); 
    178178        $res=pg_prepare("", $sql); 
    179179        $res=pg_execute("", $v); 
     
    186186                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 
    187187                $nr=$row["lage"]; 
    188  
    189188                if ($showParent) { 
    190189                        // eine Koordinate zur Strasse besorgen 
    191190                        // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer 
    192                         $sqlko ="SELECT ";               
     191                        $sqlko ="SELECT "; 
    193192                        if($epsg == "25832") { // Transform nicht notwendig 
    194193                                $sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; 
    195194                                $sqlko.="st_y(st_Centroid(f.wkb_geometry)) AS y "; 
    196                         } else {   
     195                        } else { 
    197196                                $sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, "; 
    198                                 $sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                      
     197                                $sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y "; 
    199198                        } 
    200199                        $sqlko.="FROM ax_lagebezeichnungohnehausnummer o "; 
     
    202201                        $sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id "; 
    203202                        $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";        
    204                         $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;";  // die erstbeste beliebige Koordinate 
     203                        $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;"; // die erstbeste Koordinate 
    205204                        $v=array($land,$regb,$kreis,$gemnd,$nr); 
    206205                        $resko=pg_prepare("", $sqlko); 
     
    213212                                echo "\n<p class='err'>Fehler bei Koordinate zur Stra&szlig;e</p>"; 
    214213                        } 
    215                         $sqlko.=""; 
    216  
    217214                        echo "\n<div class='stu'>";              
    218215                        if ($x > 0) { // Koord. bekommen? 
     
    224221                                        echo "\n\t\tonmouseout='parent.parent.hideHighlight()'"; 
    225222                                echo ">\n\t\t".$sname." (".$nr.")\n\t</a>"; 
    226                         } else { // keine Koord. dazu gefunden 
     223                        } else { // keine Koord. gefunden 
    227224                                echo $sname." (".$nr.")"; // nur Anzeige, ohne Link 
    228225                        } 
    229  
    230226                        switch ($gfilter) { 
    231227                                case 0: // Kein Filter 
     
    241237                } 
    242238                echo "\n<hr>"; 
     239 
    243240                // Haeuser zum Strassenschluessel 
    244                 $sql ="SELECT replace (h.hausnummer, ' ','') AS hsnr, "; 
    245                  
     241        //      $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, subq.geb, "; // Subquery 
     242                $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, "; 
    246243                if($epsg == "25832") { // Transform nicht notwendig 
    247                         $sql.="st_x(st_Centroid(g.wkb_geometry)) AS x, "; 
    248                         $sql.="st_y(st_Centroid(g.wkb_geometry)) AS y ";                 
     244                        $sql.="st_x(p.wkb_geometry) AS x, "; 
     245                        $sql.="st_y(p.wkb_geometry) AS y ";              
     246                } else {   
     247                        $sql.="st_x(st_transform(p.wkb_geometry,".$epsg.")) AS x, "; 
     248                        $sql.="st_y(st_transform(p.wkb_geometry,".$epsg.")) AS y ";              
    249249                } 
    250                 else {   
    251                         $sql.="st_x(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS x, "; 
    252                         $sql.="st_y(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS y ";                
    253                 }                
    254                 $sql.="FROM ax_lagebezeichnungmithausnummer h "; 
    255                 $sql.="JOIN alkis_beziehungen v ON h.gml_id=v.beziehung_zu "; 
    256                 $sql.="JOIN ax_gebaeude g ON v.beziehung_von=g.gml_id "; 
    257                 $sql.="WHERE h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; // integer 
    258                 $sql.="AND v.beziehungsart='zeigtAuf' "; 
     250 
     251/* Version mit // Subquery 
     252Liefert Informationen ÃŒber GebÀude zur Hausnummer. LÀuft aber spÃŒrbar langsamer. 
     253 
     254                $sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von "; 
     255                $sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id "; 
     256                $sql.="LEFT JOIN (SELECT b.beziehung_zu AS zu, g.gml_id AS geb FROM alkis_beziehungen b "; 
     257                $sql.="JOIN ax_gebaeude g ON b.beziehung_von=g.gml_id WHERE b.beziehungsart='zeigtAuf') subq "; 
     258                $sql.="ON h.gml_id = subq.zu WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' "; 
     259                $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; 
    259260                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; 
     261*/ 
     262                // Version ohne Subquery 
     263                $sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von "; 
     264                $sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id "; 
     265                $sql.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' "; 
     266                $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; 
     267                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; 
     268 
    260269                $v=array($land,$regb,$kreis,$gemnd,$nr); 
    261270                $resh=pg_prepare("", $sql); 
     
    264273                $count=0; 
    265274                echo "\n<table>"; 
    266                 // mehrere Hausnummern je Zeile ausgeben 
    267                 while($rowh = pg_fetch_array($resh)) { 
    268                         if($count == 0){echo "\n<tr>";} 
    269                         $gml=$rowh["gml_id"];                    
    270                         $hsnr=$rowh["hsnr"];                     
     275                while($rowh = pg_fetch_array($resh)) { // mehrere HsNr je Zeile 
     276                        if($count == 0){echo "\n<tr>";}  
     277                        $hsnr=$rowh["hsnr"]; 
     278                //      $geb=$rowh["geb"]; // Subquery 
    271279                        $x=$rowh["x"]; 
    272280                        $y=$rowh["y"]; 
     281                /* // Subquery 
     282                        if ($geb == "") { // kein GebÀude 
     283                                $cls=" class='hsnro'"; 
     284                                $ttl="kein Haus"; 
     285                        } else { 
     286                                $cls=""; 
     287                                $ttl="Haus ".$geb; 
     288                        } 
     289                */               
    273290                        echo "\n\t<td class='hsnr'>"; 
     291                        //      echo "<a".$cls." href='"; 
    274292                                echo "<a href='"; 
    275293                                        echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); "; 
     
    277295                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' "; 
    278296                                echo "onmouseout='parent.parent.hideHighlight()"; 
     297                        //      echo "' title='".$ttl."'>".$hsnr."</a>"; // Subquery 
    279298                                echo "'>".$hsnr."</a>"; 
    280299                        echo "</td>"; 
     
    289308                echo "\n</table>"; 
    290309                echo "\n<p class='hilfe'>".$cnt." Hausnummern</p>"; 
    291  
    292                 if($hausnummernohnegebaeude == 1){ 
    293                         #echo "Hausnummern ohne Geb&auml;ude:"; 
    294                         // Haeuser zum Strassenschluessel 
    295                         $sql ="SELECT gml_id, replace (schriftinhalt, ' ','') AS hsnr, "; 
    296                         if($epsg == "25832") { // Transform nicht notwendig 
    297                                 $sql.="st_x(wkb_geometry) AS x, "; 
    298                                 $sql.="st_y(wkb_geometry) AS y ";                
    299                         } 
    300                         else {   
    301                                 $sql.="st_x(st_transform(wkb_geometry, ".$epsg.")) AS x, "; 
    302                                 $sql.="st_y(st_transform(wkb_geometry, ".$epsg.")) AS y ";               
    303                         }                
    304                         $sql.="from ap_pto where "; 
    305                         $sql.="gml_id IN (Select beziehung_von from alkis_beziehungen "; 
    306                         $sql.="where beziehung_zu IN ("; 
    307                         $sql.="SELECT "; 
    308                         $sql.="gml_id "; 
    309                         $sql.="FROM ax_lagebezeichnungmithausnummer h "; 
    310                         $sql.="WHERE h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 "; 
    311                         $sql.="AND h.gemeinde= $4 AND h.lage= $5 "; 
    312                         $sql.="AND replace (h.hausnummer, ' ','') NOT IN ("; 
    313                         $sql.="SELECT replace (h.hausnummer, ' ','') AS hsnr "; 
    314                         $sql.="FROM ax_lagebezeichnungmithausnummer h "; 
    315                         $sql.="JOIN alkis_beziehungen v ON h.gml_id=v.beziehung_zu "; 
    316                         $sql.="JOIN ax_gebaeude g ON v.beziehung_von=g.gml_id "; 
    317                         $sql.="WHERE h.land= $6 AND "; 
    318                         $sql.="h.regierungsbezirk= $7 AND h.kreis= $8 AND h.gemeinde= $9 AND "; 
    319                         $sql.=" h.lage= $10 "; 
    320                         $sql.="AND v.beziehungsart='zeigtAuf' "; 
    321                         $sql.=") ORDER BY lpad(split_part(h.hausnummer,' ',1), 4, '0'), split_part(h.hausnummer,' ',2) "; 
    322                         $sql.=")) order by lpad(split_part(schriftinhalt,' ',1), 4, '0'), split_part(schriftinhalt,' ',2);"; 
    323                         $vw=array($land,$regb,$kreis,$gemnd,$nr,$land,$regb,$kreis,$gemnd,$nr); 
    324                         #echo "SQL: ".$land." ".$regb." ".$kreis." ".$gemnd." ".$nr; 
    325                         $resho=pg_prepare("", $sql); 
    326                         $resho=pg_execute("", $vw); 
    327                         $cnt=0; 
    328                         $count=0; 
    329                         #echo $sql; 
    330                         echo "\n<table>"; 
    331                         // mehrere Hausnummern je Zeile ausgeben 
    332                         while($rowh = pg_fetch_array($resho)) { 
    333                                 if($count == 0){echo "\n<tr>";} 
    334                                 $gml=$rowh["gml_id"];                    
    335                                 $nr=$rowh["hsnr"];                       
    336                                 $x=$rowh["x"]; 
    337                                 $y=$rowh["y"]; 
    338                                 echo "\n\t<td class='hsnr'>"; 
    339                                         echo "<a href='"; 
    340                                                 echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); "; 
    341                                                 echo "parent.parent.showHighlight(".$x.",".$y.");' "; 
    342                                         echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' "; 
    343                                         echo "onmouseout='parent.parent.hideHighlight()"; 
    344                                         echo "'>".$nr."</a>"; 
    345                                 echo "</td>"; 
    346                                 $cnt++; 
    347                                 $count++; 
    348                                 if($count == 6) { 
    349                                         echo "\n</tr>"; 
    350                                         $count = 0; 
    351                                 } 
    352                         } 
    353                         if($count > 0) {echo "\n</tr>";} 
    354                         echo "\n</table>"; 
    355                         if($cnt > 0) {echo "\n<p class='hilfe'>".$cnt." Hausnummern ohne Geb&auml;ude</p>";} 
    356                 } 
    357310        } else { 
    358311                echo "\n<p class='err'>Keine Stra&szlig;e.</p>"; 
Note: See TracChangeset for help on using the changeset viewer.