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

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