Changeset 399 for trunk/mapbender/http/nav/alkisnav_adr.php
- Timestamp:
- 02/15/18 17:46:51 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/mapbender/http/nav/alkisnav_adr.php
r376 r399 1 1 <?php 2 /* Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil Adressen-Suche 3 Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 4 2 /* Navigation mit ALKIS-Daten im Mapbender 2 - Teil Adressen-Suche 3 Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 5 4 Version vom 6 5 2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet. 7 6 2016-03-02 $gemeinde auf feste LÀnge korrigieren 8 7 2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen 9 10 8 2018-02-15 Strikte Input-Validation der Parameter 9 ToDo: 11 10 - Gruppierung (mit Zeile) der StraÃenliste nach Gemeinde 12 11 - Eingabe aus "Balken" von Buchauskunft "Lage" zulassen: Numerisch: Gem-Str-Haus-lfd … … 17 16 */ 18 17 19 // Variable Initialisieren20 $str_schl="";21 $skey="";22 23 18 $cntget = extract($_GET); 24 $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÀr 19 20 // Input-Validation 21 // Parameter aus Konfiguration oder Links sollten keine "Eingabefehler" enthalten. 22 // Entweder falsche Konfiguration oder Hack. Programm sofort abbrechen. 23 if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} // Mandant, muss! 24 25 if(isset($epsg)) { // SRS, kann. Wenn als Parameter ... 26 if (preg_match('#^EPSG:[0-9]{4,5}$#', $epsg)) { // Prefix aus MB-Mapframe 27 $epsg = str_replace("EPSG:", "" , $epsg); 28 } elseif (!preg_match('#^[0-9]{4,5}$#', $epsg)) { // nur die Nummer 29 die("Eingabefehler epsg"); 30 } 31 } else { // Nichts ÃŒbergeben 32 $epsg=$gui_epsg; // dann default aus Conf 33 } 34 35 // Filter-Parameter fÃŒr Gemeindenummer in Kreis-Datenbank aus der Mapbender GUI-Konfiguration 36 if (isset($gemeinde) AND trim($gemeinde, '0') != "") { 37 if (!preg_match('#^[0-9]{1,3}$#', $gemeinde)) {die("Eingabefehler Gemeinde");} 38 $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); 39 if(strpos($gemeinde, ",") === false) { 40 $gfilter = 1; // Einzelwert 41 } else { 42 $gfilter = 2; // Liste 43 } 44 } else { // Kein Filter 45 $gemeinde = ""; 46 $gfilter = 0; 47 } 48 // // http://skrzmaptest01.asp.krzwan.de/mapbender/nav/alkisnav_adr.php?gkz=210&gemeinde=004&epsg=25832&str_schl=0575800401798 49 if (isset($str_schl) ) { 50 if (!preg_match('#^[0-9]{4,13}$#', $str_schl)) {die("Eingabefehler Stra&zlig;enschlüssel");} 51 } else { 52 $str_schl=""; 53 } 54 25 55 include("../../conf/alkisnav_conf.php"); 26 56 include("alkisnav_fkt.php"); // Funktionen … … 75 105 } 76 106 77 $sql ="SELECT g.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage 78 FROM ax_lagebezeichnungkatalogeintrag k79 JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde80 WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";107 $sql ="SELECT g.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage " 108 ."FROM ax_lagebezeichnungkatalogeintrag k " 109 ."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde " 110 ."WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL "; 81 111 82 112 switch ($gfilter) { … … 143 173 $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten 144 174 } 145 $sql ="SELECT g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage 146 FROM ax_lagebezeichnungkatalogeintrag as k147 JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde148 WHERE k.lage LIKE $1 AND k.endet IS NULL AND g.endet IS NULL ";175 $sql ="SELECT g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage " 176 ."FROM ax_lagebezeichnungkatalogeintrag as k " 177 ."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde " 178 ."WHERE k.lage LIKE $1 AND k.endet IS NULL AND g.endet IS NULL "; 149 179 switch ($gfilter) { 150 180 case 1: // Einzelwert … … 192 222 // Head 193 223 // Strasse zum Strassenschluessel 194 $sql ="SELECT g.bezeichnung AS gemname, k.gml_id AS kgml, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage 195 FROM ax_lagebezeichnungkatalogeintrag as k196 JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde197 WHERE k.schluesselgesamt = $1 AND k.endet IS NULL AND g.endet IS NULL LIMIT 1";224 $sql ="SELECT g.bezeichnung AS gemname, k.gml_id AS kgml, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage " 225 ."FROM ax_lagebezeichnungkatalogeintrag as k " 226 ."JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde " 227 ."WHERE k.schluesselgesamt = $1 AND k.endet IS NULL AND g.endet IS NULL LIMIT 1"; 198 228 199 229 $v=array($str_schl); // Schluessel-Gesamt .. … … 220 250 $sqlko ="SELECT "; 221 251 if($epsg == "25832") { // Transform nicht notwendig 222 $sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; 223 $sqlko.="st_y(st_Centroid(f.wkb_geometry)) AS y "; 252 $sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, st_y(st_Centroid(f.wkb_geometry)) AS y "; 224 253 } else { 225 $sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, " ;226 $sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";254 $sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, " 255 ."st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y "; 227 256 } 228 $sqlko.="FROM ax_lagebezeichnungohnehausnummer o "; 229 $sqlko.="JOIN ax_flurstueck f ON o.gml_id=ANY(f.zeigtauf) "; 230 $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 "; 231 $sqlko.="LIMIT 1;"; // die erstbeste Koordinate 257 $sqlko.="FROM ax_lagebezeichnungohnehausnummer o JOIN ax_flurstueck f ON o.gml_id=ANY(f.zeigtauf) " 258 ."WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 LIMIT 1;"; // die erstbeste Koordinate 232 259 233 260 $v=array($land,$regb,$kreis,$gemnd,$nr); … … 249 276 250 277 if ($x > 0) { // Koord. bekommen? 251 echo "\n\t<a title='Positionieren 1:".$scalestr."' href='javascript:"; // mit Link 252 echo "transtitle(\"auf Straße positioniert\"); "; 253 echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr."); "; 254 echo "parent.parent.showHighlight(".$x.",".$y."); "; 255 // echo "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&gemeinde=".$gemeinde."&epsg=".$epsg."&str_schl=".$str_schl."\""; 256 echo "' "; // end href 257 echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' "; 258 echo "\n\t\tonmouseout='parent.parent.hideHighlight()'"; 259 echo ">\n\t\t".$sname." (".$nr.")\n\t</a>"; 278 echo "\n\t<a title='Positionieren 1:".$scalestr."' href='javascript:" // mit Link 279 ."transtitle(\"auf Straße positioniert\"); " 280 ."parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr."); " 281 ."parent.parent.showHighlight(".$x.",".$y."); " 282 ."' " // end href 283 ."\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' " 284 ."\n\t\tonmouseout='parent.parent.hideHighlight()'" 285 .">\n\t\t".$sname." (".$nr.")\n\t</a>"; 260 286 } else { // keine Koord. gefunden 261 287 echo $sname." (".$nr.")"; // nur Anzeige, ohne Link … … 276 302 $sql="SELECT min(replace(h.hausnummer,' ','')) AS hsnr, "; 277 303 if($epsg == "25832") { // Transform nicht notwendig 278 $sql.="avg (st_x(p.wkb_geometry)) AS x, "; 279 $sql.="avg (st_y(p.wkb_geometry)) AS y "; 304 $sql.="avg (st_x(p.wkb_geometry)) AS x, avg (st_y(p.wkb_geometry)) AS y "; 280 305 } else { 281 $sql.="avg (st_x(st_transform(p.wkb_geometry,".$epsg."))) AS x, " ;282 $sql.="avg (st_y(st_transform(p.wkb_geometry,".$epsg."))) AS y ";283 } 284 $sql.="FROM ap_pto p JOIN ax_lagebezeichnungmithausnummer h ON h.gml_id=ANY(p.dientzurdarstellungvon) 285 WHERE p.art='HNR' AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5286 AND p.endet IS NULL AND h.endet IS NULL287 GROUP BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2)288 ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";306 $sql.="avg (st_x(st_transform(p.wkb_geometry,".$epsg."))) AS x, " 307 ."avg (st_y(st_transform(p.wkb_geometry,".$epsg."))) AS y "; 308 } 309 $sql.="FROM ap_pto p JOIN ax_lagebezeichnungmithausnummer h ON h.gml_id=ANY(p.dientzurdarstellungvon) " 310 ."WHERE p.art='HNR' AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 " 311 ."AND p.endet IS NULL AND h.endet IS NULL " 312 ."GROUP BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2) " 313 ."ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; 289 314 // Problem: In der Datenbank gibt es mehrere hausnummern-Koordinaten fÃŒr verschiedene 290 315 // MaÃstÀbe der Kartendarstellung … … 312 337 $x=$rowh["x"]; 313 338 $y=$rowh["y"]; 314 echo "\n\t<td class='hsnr'>"; 315 echo "<a href='"; 316 echo "javascript:"; 317 echo "transtitle(\"auf Haus ".$hsnr." positioniert\"); "; 318 echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); "; 319 echo "parent.parent.showHighlight(".$x.",".$y.");' "; 320 echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' "; 321 echo "onmouseout='parent.parent.hideHighlight()"; 322 echo "'>".$hsnr."</a>"; 323 echo "</td>"; 339 echo "\n\t<td class='hsnr'>" 340 ."<a href='javascript:transtitle(\"auf Haus ".$hsnr." positioniert\"); " 341 ."parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); " 342 ."parent.parent.showHighlight(".$x.",".$y.");' " 343 ."onmouseover='parent.parent.showHighlight(".$x.",".$y.")' " 344 ."onmouseout='parent.parent.hideHighlight()" 345 ."'>".$hsnr."</a>" 346 ."</td>"; 324 347 $cnt++; 325 348 $count++; … … 342 365 // Start hier! 343 366 // =========== 344 if(isset($epsg)) { 345 $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]); 367 368 // Validation: Eingabefeld aus Formular. 369 // Suchbegriff (StraÃenname) oder StraÃenschlÃŒssel. 370 // Hier formatierte Meldung und html-Foot. 371 if (isset($street) and $street != "" ) { 372 if (!preg_match('#^[0-9a-zA-ZÀöÌÃÃÃÃ* -.]{1,25}$#', $street)) { 373 echo "<p class='err'>Eingabe unzulässig!</p>"; 374 $street=""; 375 } 346 376 } else { 347 $epsg=$gui_epsg; // aus Conf 348 } 349 350 // Filter auf Zustaendigkeit z.B. ein Stadtgebiet 351 if ($gemeinde == "") { 352 $gfilter = 0; // ungefiltert 353 } elseif(strpos($gemeinde, ",") === false) { 354 $gfilter = 1; // Einzelwert 355 } else { 356 $gfilter = 2; // Liste 357 } 358 // ax_lagebezeichnungkatalogeintrag.gemeinde: z.B. Classic='40' / NorBit = '040' 359 // Im Mapbender mit fuehrenden Nullen eingeben: gazetteer_alkis.SRC 360 // alkisnav.htm?..&gemeinde=040&.. 361 362 // +++Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage": Numerisch: Gem-Str-Haus-lfd 363 364 if ($str_schl != "") { // Wert kommt aus aus Link 377 $street=""; 378 } 379 380 if ($str_schl != "") { // aus Link 365 381 $trans="Hausnummern zur Straße"; 366 382 suchHausZurStr(true); 367 // Wert aus Eingabe in Formular 368 } elseif($street != "") { 383 } elseif($street != "") { // Eingabe in Formular 369 384 if (trim($street, "*,0..9, ") == "") { // Zahl, ggf. mit Wildcard 370 385 $trans="Suche Straßenschlüssel \"".$street."\"";
Note: See TracChangeset
for help on using the changeset viewer.