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

Revision 86, 11.6 KB checked in by frank.jaeger, 11 years ago (diff)

ALKIS-Navigation fuer Mapbender erweitert: EPSG aus Mapframe entnehmen, Liste der Gemeinden oder Amtsgerichte bei leerer Eingabe

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