source: trunk/mapbender/http/nav/alkisnav_adr.php @ 284

Revision 284, 12.2 KB checked in by frank.jaeger, 11 years ago (diff)

Mapbender-Navigation verbessert.

RevLine 
[66]1<?php
[85]2/* Version vom
[278]3        2013-04-26      "import_request_variables" entfÀllt in PHP 5.4.
4                                        ZurÃŒck-Link, Titel der Transaktion anzeigen
[280]5        2013-04-29      Test mit IE
[282]6        2013-05-07  Strukturierung des Programms
[284]7        2013-05-14  Feinkorrekturen.
[105]8
[140]9        ToDo:
10        -       Eingabe aus "Balken" von Buchauskunft "Lage" zulassen: Numerisch: Gem-Str-Haus-lfd
11                Analog zur Zerlegung des FS-Kennz in _fls
[197]12        -       Mouse-Over in Straßenliste soll Position zeigen.
13                Dazu in der DB eine Tabelle mit Koordinate zum StraßenschlÃŒssel aufbauen.
[85]14*/
[276]15$cntget = extract($_GET);
[187]16include("../../conf/alkisnav_conf.php");
17$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
[105]18$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$$dbname.$dbvers.$gkz);
[278]19echo <<<END
[66]20
[187]21<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
22<html>
23<head>
24        <meta http-equiv="cache-control" content="no-cache">
25        <meta http-equiv="pragma" content="no-cache">
26        <meta http-equiv="expires" content="0">
27        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
28        <title>ALKIS-Suche Adressen</title>
29        <link rel="stylesheet" type="text/css" href="alkisnav.css">
[278]30        <script type='text/javascript'>
31                function transtitle (trans) { // Titel der letzten Transaktion anzeigen
32                        document.getElementById('transaktiontitle').innerHTML = trans;
33                }
34        </script>
[187]35</head>
[66]36<body>
[280]37<a href='javascript:history.back()'>
[282]38        <img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
[278]39</a>
40<dfn class='title' id='transaktiontitle'></dfn>
[66]41
[278]42END;
43
[66]44function suchStrName() {
[83]45        // Strassen nach Name(-nsanfang)
[283]46        global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug;
[66]47        $linelimit=120;  // -> in die Conf?
[187]48        preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3];
49        $matches[1] = preg_replace("/strasse/i","str", $matches[1]);
[66]50        $matches[1] = preg_replace("/str\./i","str", $matches[1]);
[187]51        if(preg_match("/\*/",$matches[1])){
52                $match=trim(preg_replace("/\*/i","%", strtoupper($matches[1])));
53        } else {
54                $match=trim($matches[1])."%";
[66]55        }
[68]56        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage ";
[66]57        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
[68]58        $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 ";
59        $sql.="WHERE k.bezeichnung ILIKE $1 ";
[85]60        switch ($gfilter) {
61                case 1: // Einzelwert
62                        $sql.="AND k.gemeinde=".$gemeinde." ";
63                        break;
64                case 2: // Liste
65                        $sql.="AND k.gemeinde in (".$gemeinde.") ";
66                        break;
67                default: // kein Filter
68                        break;
[66]69        }
[187]70        $sql.="ORDER BY k.bezeichnung, g.bezeichnung, k.lage LIMIT $2 ;";
[68]71        $v=array($match,$linelimit);
72        $res=pg_prepare("", $sql);
73        $res=pg_execute("", $v);
74        if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";}
[187]75        $cnt = 0;
[66]76        while($row = pg_fetch_array($res)) {
[68]77                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");         
[83]78                $gkey=$row["schluesselgesamt"]; // Land-Kreis-Gem-Strasse
[68]79                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
[66]80                $skey=$row["lage"];
[68]81                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
82                        if (trim($skey, "0..9") == "") { // Integer
[86]83                                echo "<a class='stl' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."'>".$sname."</a>";
[68]84                        } else { // Klassifizierung?
85                                echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer)
[86]86                        }       
[85]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                        }                       
[66]97                echo "</div>";
[187]98                $cnt++;
99        }
[66]100        if($cnt == 0) {
[278]101                echo "<pclass='anz'>Keine Stra&szlig;e</p>";
[66]102        } elseif($cnt == 1) { // Eindeutig
[68]103                $str_schl=$gkey; // dann gleich weiter
[66]104        } elseif($cnt >= $linelimit) {
[278]105                echo "<p class='anz'>".$cnt." Stra&szlig;en ... und weitere</p>";                       
106        } elseif ($cnt > 1) {
107                echo "\n<p class='anz'>".$cnt." Stra&szlig;en</p>";     
108        }
[187]109        return;
110}
[66]111
[68]112function suchStrKey() {
[83]113        // Strassen nach Strassen-Schluessel
[283]114        global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug;
[68]115        $linelimit=50;
[187]116        if(preg_match("/\*/",$street)) {
[68]117                $match=trim(preg_replace("/\*/i","%",$street));
[187]118                // -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard
119        } else {
120                $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten
[68]121        }
122   //if ($debug >= 2) {echo "<p>sql-Match='".$match."'</p>";}
123        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage ";
124        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
125        $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 ";
126        $sql.="WHERE k.lage LIKE $1 ";
[85]127        switch ($gfilter) {
128                case 1: // Einzelwert
129                        $sql.="AND k.gemeinde=".$gemeinde." ";
130                        break;
131                case 2: // Liste
132                        $sql.="AND k.gemeinde in (".$gemeinde.") ";
133                        break;
134                default: // kein Filter
135                        break;
[68]136        }
[85]137
[187]138        $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;";
[68]139        $v=array($match,$linelimit);
140        $res=pg_prepare("", $sql);
141        $res=pg_execute("", $v);
142        if (!$res) {return "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";}
[187]143        $cnt = 0;
[68]144        while($row = pg_fetch_array($res)) {
145                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");         
146                $gkey=$row["schluesselgesamt"];
147                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
148                $skey=$row["lage"];
149                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
[86]150                        echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='".$gemname."'>".$sname;
[68]151                        echo "</a>";
[85]152                        switch ($gfilter) {
153                                case 0: // Kein Filter
154                                        echo " in ".$gemname;
155                                        break;
156                                case 2: // Liste
157                                        echo " in ".$gemname;
158                                        break;
159                        }
[68]160                echo "</div>";
[187]161                $cnt++;
162        }
[68]163        if($cnt == 0) {
[278]164                echo "\n<p class='anz'>Keine Stra&szlig;e mit Schl&uuml;ssel ".$match."</p>";
[68]165        } elseif($cnt == 1) { // Eindeutig
166                $str_schl=$gkey; // dann gleich weiter
[278]167        } elseif ($cnt >= $linelimit) {
168                echo "\n<p>".$cnt." Stra&szlig;en ... und weitere</p>";                 
169        } elseif ($cnt > 1) {
170                echo "\n<p class='anz'>".$cnt." Stra&szlig;en</p>";     
[68]171        }       
[187]172        return;
[68]173}
174
[187]175function suchHausZurStr($showParent){
[83]176        // Haeuser zu einer Strasse
[283]177        global $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug;
[66]178        // Strasse zum Strassenschluessel
[83]179        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage ";
180        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
181        $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 ";
182        $sql.="WHERE k.schluesselgesamt = $1 LIMIT 1";
[197]183        $v=array($str_schl);
[66]184        $res=pg_prepare("", $sql);
185        $res=pg_execute("", $v);
[187]186        if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden
[66]187                $sname=$row["bezeichnung"];
188                $land =$row["land"];
189                $regb =$row["regierungsbezirk"];
190                $kreis=$row["kreis"];
191                $gemnd=$row["gemeinde"];
[83]192                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
[140]193                $nr=$row["lage"];
[83]194                if ($showParent) {
195                        // eine Koordinate zur Strasse besorgen
196                        // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer
[197]197                        $sqlko ="SELECT ";
[86]198                        if($epsg == "25832") { // Transform nicht notwendig
[188]199                                $sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
200                                $sqlko.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
[197]201                        } else {
[188]202                                $sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
[197]203                                $sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";
[86]204                        }
[83]205                        $sqlko.="FROM ax_lagebezeichnungohnehausnummer o ";
206                        $sqlko.="JOIN alkis_beziehungen v ON o.gml_id=v.beziehung_zu ";
207                        $sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id ";
208                        $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";       
[197]209                        $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;"; // die erstbeste Koordinate
[83]210                        $v=array($land,$regb,$kreis,$gemnd,$nr);
211                        $resko=pg_prepare("", $sqlko);
212                        $resko=pg_execute("", $v);
213                        if ($resko) {
214                                $rowko=pg_fetch_array($resko);
215                                $x=$rowko["x"];
216                                $y=$rowko["y"];
217                        } else {               
218                                echo "\n<p class='err'>Fehler bei Koordinate zur Stra&szlig;e</p>";
219                        }
220                        echo "\n<div class='stu'>";             
221                        if ($x > 0) { // Koord. bekommen?
[115]222                                echo "\n\t<a title='Positionieren 1:".$scalestr."' href='javascript:"; // mit Link
[278]223                                                echo "transtitle(\"auf Stra&szlig;e positioniert\"); ";
[115]224                                                echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr."); ";
225                                                echo "parent.parent.showHighlight(".$x.",".$y."); ";
[278]226                                                //echo "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$str_schl."\"";
227                                        echo "' "; // end href
[187]228                                        echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' ";
[83]229                                        echo "\n\t\tonmouseout='parent.parent.hideHighlight()'";
230                                echo ">\n\t\t".$sname." (".$nr.")\n\t</a>";
[197]231                        } else { // keine Koord. gefunden
[83]232                                echo $sname." (".$nr.")"; // nur Anzeige, ohne Link
233                        }
[85]234                        switch ($gfilter) {
235                                case 0: // Kein Filter
236                                        echo " in ".$gemname;
237                                        break;
238                                case 2: // Liste
239                                        echo " in ".$gemname;
240                                        break;
241                        }                       
[83]242                        echo "\n</div>";
[66]243                }
[83]244                echo "\n<hr>";
[66]245                // Haeuser zum Strassenschluessel
[197]246                $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, ";
[86]247                if($epsg == "25832") { // Transform nicht notwendig
[197]248                        $sql.="st_x(p.wkb_geometry) AS x, ";
249                        $sql.="st_y(p.wkb_geometry) AS y ";             
250                } 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 ";             
[86]253                }
[197]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.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' ";
257                $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
258                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";
259
[83]260                $v=array($land,$regb,$kreis,$gemnd,$nr);
[68]261                $resh=pg_prepare("", $sql);
262                $resh=pg_execute("", $v);
[187]263                $cnt=0;
264                $count=0;
265                echo "\n<table>";
[197]266                while($rowh = pg_fetch_array($resh)) { // mehrere HsNr je Zeile
267                        if($count == 0){echo "\n<tr>";}
268                        $hsnr=$rowh["hsnr"];
[187]269                        $x=$rowh["x"];
270                        $y=$rowh["y"];
[66]271                        echo "\n\t<td class='hsnr'>";
272                                echo "<a href='";
[278]273                                        echo "javascript:";
274                                        echo "transtitle(\"auf Haus positioniert\"); ";
275                                        echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); ";
[115]276                                        echo "parent.parent.showHighlight(".$x.",".$y.");' ";
[187]277                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
[66]278                                echo "onmouseout='parent.parent.hideHighlight()";
[187]279                                echo "'>".$hsnr."</a>";
280                        echo "</td>";
281                        $cnt++;
282                        $count++;
[66]283                        if($count == 6) {
284                                echo "\n</tr>";
285                                $count = 0;
[187]286                        }
287                }
[66]288                if($count > 0) {echo "\n</tr>";}
289                echo "\n</table>";
[278]290                echo "\n<p class='anz'>".$cnt." Hausnummern</p>";
[66]291        } else {
[278]292                echo "\n<p class='anz'>Keine Stra&szlig;e</p>";
[187]293        }
294        return;
295}
[66]296// ===========
297// Start hier!
298// ===========
299if(isset($epsg)) {
[278]300        #if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB
[86]301        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
[66]302} else {
[278]303        #if ($debug >= 1) {echo "\n<p class='err'>kein EPSG gesetzt</p>";}     
[66]304        $epsg=$gui_epsg; // aus Conf
305}
[278]306#if ($debug >= 2) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";}
[85]307if ($gemeinde == "") {
308        $gfilter = 0; // ungefiltert
309} elseif(strpos($gemeinde, ",") === false) {
310        $gfilter = 1; // Einzelwert
311} else {
312        $gfilter = 2; // Liste
313}
[187]314if (isset($str_schl)) { // aus Link
[278]315        $trans="Hausnummern zur Stra&szlig;e";
[83]316        suchHausZurStr(true);
[187]317} elseif(isset($street)) { // Eingabe in Form
[278]318        if (trim($street, "*,0..9") == "") { // Zahl, ggf. mit Wildcard
319                $trans="Suche Stra&szlig;enschl&uuml;ssel \"".$street."\"";
320                suchStrKey();
[66]321        } else {
[278]322                $trans="Suche Stra&szlig;enname \"".$street."\"";
323                suchStrName();
[187]324        }
325        if(isset($str_schl)) { // Eindeutiges Ergebnis
[278]326                $trans="1 Stra&szlig;e gefunden, Hausnummern";
[187]327                suchHausZurStr(false);
[83]328        }
[68]329}
[278]330// Titel im Kopf anzeigen
[283]331echo "
332<script type='text/javascript'>
333        transtitle ('".$trans."') ;
334</script>";
[278]335
[66]336?>
[68]337
[187]338</body>
339</html>
Note: See TracBrowser for help on using the repository browser.