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

Revision 140, 11.8 KB checked in by frank.jaeger, 12 years ago (diff)

Filter auf Gemeinde bei Navigation bei Suche nach Eigentümer. Dazu Hilfstabelle aufbauen.

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