source: trunk/data/mapbender/http/nav/alkisnav_adr.php @ 68

Revision 68, 9.6 KB checked in by frank.jaeger, 12 years ago (diff)
Line 
1<?php
2// Version vom 13.01.2011
3import_request_variables("PG");
4include("../../conf/alkisnav_conf.php");
5$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password;
6$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname);
7?>
8
9<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
10<html>
11<head>
12        <meta http-equiv="cache-control" content="no-cache">
13        <meta http-equiv="pragma" content="no-cache">
14        <meta http-equiv="expires" content="0">
15        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
16        <title>ALKIS-Suche Adressen</title>
17        <link rel="stylesheet" type="text/css" href="alkisnav.css">
18</head>
19<body>
20<?php
21
22
23function suchStrName() {
24        // Straßen nach Name(-nsanfang)
25        global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $debug;
26        $linelimit=120;  // -> in die Conf?
27        preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3];
28        $matches[1] = preg_replace("/strasse/i","str", $matches[1]);
29        $matches[1] = preg_replace("/str\./i","str", $matches[1]);
30        if(preg_match("/\*/",$matches[1])){
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 ";
36        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
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 ";
39        if($gemeinde > 0) { // Filter Gemeinde?
40                $sql.="AND k.gemeinde=".$gemeinde." ";
41        }
42        $sql.="ORDER BY k.bezeichnung, k.lage LIMIT $2 ;";         $v=array($match,$linelimit);
43        $res=pg_prepare("", $sql);
44        $res=pg_execute("", $v);
45        if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";}
46        $cnt = 0;         while($row = pg_fetch_array($res)) {
47                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");         
48                $gkey=$row["schluesselgesamt"];
49                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
50                $skey=$row["lage"];
51                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
52                        if (trim($skey, "0..9") == "") { // Integer
53                                echo "<a class='stl' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$gkey."'>".$sname."</a>";
54                        } else { // Klassifizierung?
55                                echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer)
56                        }
57                        if (! isset($gemeinde)) {echo " in ".$gemname;}
58                echo "</div>";
59                $cnt++;
60        }
61        if($cnt == 0) {
62                echo "<p>Keine Stra&szlig;e.</p>";
63        } elseif($cnt == 1) { // Eindeutig
64                $str_schl=$gkey; // dann gleich weiter
65        } elseif($cnt >= $linelimit) {
66                echo "<p>.. und weitere</p>";                   
67        }       
68        return;
69}
70
71function suchStrKey() {
72        // Straßen nach Strassen-Schluessel
73        global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $debug;
74        $linelimit=50;
75        if(preg_match("/\*/",$street)) {
76                $match=trim(preg_replace("/\*/i","%",$street));
77                // -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard
78        } else {
79                $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten
80        }
81   //if ($debug >= 2) {echo "<p>sql-Match='".$match."'</p>";}
82        $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage ";
83        $sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
84        $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 ";
85        $sql.="WHERE k.lage LIKE $1 ";
86        if($gemeinde > 0) { // Filter Gemeinde?
87                $sql.="AND k.gemeinde=".$gemeinde." ";
88        }
89        $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;";         $v=array($match,$linelimit);
90        $res=pg_prepare("", $sql);
91        $res=pg_execute("", $v);
92        if (!$res) {return "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";}
93        $cnt = 0;         while($row = pg_fetch_array($res)) {
94                $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");         
95                $gkey=$row["schluesselgesamt"];
96                $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
97                $skey=$row["lage"];
98                echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
99                        echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$gkey."'>".$sname;
100                        echo "</a>";
101                        if (! isset($gemeinde)) {echo " in ".$gemname;}
102                echo "</div>";
103                $cnt++;
104        }
105        if($cnt == 0) {
106                echo "\n<p>Keine Stra&szlig;e mit Schl&uuml;ssel ".$match."</p>";
107        } elseif($cnt == 1) { // Eindeutig
108                $str_schl=$gkey; // dann gleich weiter
109        } elseif($cnt >= $linelimit) {
110                echo "\n<p>.. und weitere</p>";                 
111        } else {
112                echo "\n<p class='hilfe'>".$cnt." Stra&szlig;en</p>";   
113        }       
114        return;
115}
116
117function suchHausZurStr(){
118        // Haeuser zu einer Straße
119        global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $debug;
120        // Strasse zum Strassenschluessel
121        $sql ="SELECT k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage ";
122        $sql.="FROM ax_lagebezeichnungkatalogeintrag AS k WHERE schluesselgesamt = $1 LIMIT 1";
123        $v=array($str_schl);
124        $res=pg_prepare("", $sql);
125        $res=pg_execute("", $v);
126        if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden                 $sname=$row["bezeichnung"];
127                $land =$row["land"];
128                $regb =$row["regierungsbezirk"];
129                $kreis=$row["kreis"];
130                $gemnd=$row["gemeinde"];
131                $nr=ltrim($row["lage"], "0");
132                // eine Koordinate zur Strasse besorgen
133                // ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer
134                $sqlko ="SELECT ";             
135                $sqlko.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
136                $sqlko.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";
137                $sqlko.="FROM ax_lagebezeichnungohnehausnummer o ";
138                $sqlko.="JOIN alkis_beziehungen v ON o.gml_id=v.beziehung_zu ";
139                $sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id ";
140                $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";       
141                $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;";  // die erstbeste beliebige Koordinate
142                $v=array($land,$regb,$kreis,$gemnd,$nr);
143                $resko=pg_prepare("", $sqlko);
144                $resko=pg_execute("", $v);
145                if ($resko) {
146                        $rowko=pg_fetch_array($resko);
147                        $x=$rowko["x"];
148                        $y=$rowko["y"];
149                } else {               
150                        echo "\n<p class='err'>Fehler bei Koordinate zur Stra&szlig;e</p>";
151                }
152                $sqlko.="";
153                echo "\n<div class='stu'>";             
154                if ($x > 0) { // Koord. bekommen?
155                        echo "\n\t<a title='Positionieren 1:".$scalestr."' href='"; // mit Link
156                                echo "javascript:parent.parent.hideHighlight();";
157                                echo "\n\t\tparent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr.");";
158                                echo "\n\t\tdocument.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;str_schl=".$str_schl."\"' ";
159                                echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' ";
160                                echo "\n\t\tonmouseout='parent.parent.hideHighlight()'";
161                        echo ">\n\t\t".$sname." (".$nr.")\n\t</a>";
162                } else { // keine Koord. dazu gefunden
163                        echo $sname." (".$nr.")"; // nur Anzeige, ohne Link
164                }
165                echo "\n</div>\n<hr>";
166               
167                // Haeuser zum Strassenschluessel
168                $sql ="SELECT replace (h.hausnummer, ' ','') AS hsnr, ";
169                $sql.="x(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS x, ";
170                $sql.="y(st_transform(st_Centroid(g.wkb_geometry), ".$epsg.")) AS y ";
171                $sql.="FROM ax_lagebezeichnungmithausnummer h ";
172                $sql.="JOIN alkis_beziehungen v ON h.gml_id=v.beziehung_zu ";
173                $sql.="JOIN ax_gebaeude g ON v.beziehung_von=g.gml_id ";
174                $sql.="WHERE h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.lage= $4 "; // integer
175                $sql.="AND v.beziehungsart='zeigtAuf' ";
176                $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";
177                $v=array($land,$regb,$kreis,$nr);
178                $resh=pg_prepare("", $sql);
179                $resh=pg_execute("", $v);
180                $cnt=0;
181                $count=0;                 echo "\n<table>";
182                // mehrere Hausnummern je Zeile ausgeben                 while($rowh = pg_fetch_array($resh)) {
183                        if($count == 0){echo "\n<tr>";}
184                        $gml=$rowh["gml_id"];                   
185                        $nr=$rowh["hsnr"];                     
186                        $x=$rowh["x"];
187                        $y=$rowh["y"];
188                        echo "\n\t<td class='hsnr'>";
189                                echo "<a href='";
190                                        echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); ";
191                                        echo "parent.parent.hideHighlight();' ";
192                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
193                                echo "onmouseout='parent.parent.hideHighlight()";
194                                echo "'>".$nr."</a>";
195                        echo "</td>";
196                        $cnt++;
197                        $count++;
198                        if($count == 6) {
199                                echo "\n</tr>";
200                                $count = 0;
201                        }
202                }
203                if($count > 0) {echo "\n</tr>";}
204                echo "\n</table>";
205                echo "\n<p class='hilfe'>".$cnt." Hausnummern</p>";
206        } else {
207                echo "\n<p class='err'>Kein Haus.</p>";
208        }
209        return;
210}
211// ===========
212// Start hier!
213// ===========
214if(isset($epsg)) {
215        if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB
216        If (substr($epsg, 0, 5) == "EPSG:") {$epsg=substr($epsg, 5);}
217} else {
218        if ($debug >= 2) {echo "\n<p class='err'>kein EPSG gesetzt</p>";}       
219        $epsg=$gui_epsg; // aus Conf
220}
221
222if ($debug >= 2) {
223        if(isset($gemeinde)) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";
224        } else {echo "\n<p>Kein Filter Gemeinde</p>";}
225}
226
227if(isset($street)) { // Eingabe in Form         if (is_numeric(trim($street, "*"))) { // Zahl mit Wildcard
228                if ($debug >= 2) {echo "\n<p>Suche Key='".$street."'</p>";}
229                suchStrKey(); // Suche nach Schluessel
230        } else {
231                if ($debug >= 2) {echo "\n<p>Suche Name='".$street."'</p>";}
232                suchStrName(); // Suche nach Name
233        }
234}
235if(isset($str_schl)){ // Eindeutiges Ergebnis oder Link
236        if ($debug >= 2) {echo "\n<p>Suche Haus zu ='".$str_schl."'</p>";}
237        suchHausZurStr();
238} else {
239        if ($debug >= 2) {echo "\n<p>Keine Suche Haus</p>";}
240}
241?>
242
243</body>
244</html>
Note: See TracBrowser for help on using the repository browser.