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

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