<< END; function suchStrName() { // Strassen nach Name(-nsanfang) global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug; $linelimit=120; // -> in die Conf? preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3]; $matches[1] = preg_replace("/strasse/i","str", $matches[1]); $matches[1] = preg_replace("/str\./i","str", $matches[1]); if(preg_match("/\*/",$matches[1])){ $match=trim(preg_replace("/\*/i","%", strtoupper($matches[1]))); } else { $match=trim($matches[1])."%"; } $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; $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 "; $sql.="WHERE k.bezeichnung ILIKE $1 "; switch ($gfilter) { case 1: // Einzelwert $sql.="AND k.gemeinde=".$gemeinde." "; break; case 2: // Liste $sql.="AND k.gemeinde in (".$gemeinde.") "; break; default: // kein Filter break; } $sql.="ORDER BY k.bezeichnung, g.bezeichnung, k.lage LIMIT $2 ;"; $v=array($match,$linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) {return "\n

Fehler bei Name

";} $cnt = 0; while($row = pg_fetch_array($res)) { $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); $gkey=$row["schluesselgesamt"]; // Land-Kreis-Gem-Strasse $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); $skey=$row["lage"]; echo "\n\t
"; if (trim($skey, "0..9") == "") { // Integer echo "".$sname.""; } else { // Klassifizierung? echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer) } switch ($gfilter) { case 0: // Kein Filter echo " in ".$gemname; break; case 2: // Liste echo " in ".$gemname; break; default: // Einzelwert break; } echo "
"; $cnt++; } if($cnt == 0) { echo "Keine Straße

"; } elseif($cnt == 1) { // Eindeutig $str_schl=$gkey; // dann gleich weiter } elseif($cnt >= $linelimit) { echo "

".$cnt." Straßen ... und weitere

"; } elseif ($cnt > 1) { echo "\n

".$cnt." Straßen

"; } return; } function suchStrKey() { // Strassen nach Strassen-Schluessel global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug; $linelimit=50; if(preg_match("/\*/",$street)) { $match=trim(preg_replace("/\*/i","%",$street)); // -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard } else { $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten } //if ($debug >= 2) {echo "

sql-Match='".$match."'

";} $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage "; $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; $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 "; $sql.="WHERE k.lage LIKE $1 "; switch ($gfilter) { case 1: // Einzelwert $sql.="AND k.gemeinde=".$gemeinde." "; break; case 2: // Liste $sql.="AND k.gemeinde in (".$gemeinde.") "; break; default: // kein Filter break; } $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;"; $v=array($match,$linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) {return "\n

Fehler bei Schlüssel

";} $cnt = 0; while($row = pg_fetch_array($res)) { $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); $gkey=$row["schluesselgesamt"]; $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); $skey=$row["lage"]; echo "\n\t
"; echo $skey." ".$sname; echo ""; switch ($gfilter) { case 0: // Kein Filter echo " in ".$gemname; break; case 2: // Liste echo " in ".$gemname; break; default: // Einzelwert break; } echo "
"; $cnt++; } if($cnt == 0) { echo "\n

Keine Straße mit Schlüssel ".$match."

"; } elseif($cnt == 1) { // Eindeutig $str_schl=$gkey; // dann gleich weiter } elseif ($cnt >= $linelimit) { echo "\n

".$cnt." Straßen ... und weitere

"; } elseif ($cnt > 1) { echo "\n

".$cnt." Straßen

"; } return; } function suchHausZurStr($showParent){ // Haeuser zu einer Strasse global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug; // Strasse zum Strassenschluessel $sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage "; $sql.="FROM ax_lagebezeichnungkatalogeintrag as k "; $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 "; $sql.="WHERE k.schluesselgesamt = $1 LIMIT 1"; $v=array($str_schl); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden $sname=$row["bezeichnung"]; $land =$row["land"]; $regb =$row["regierungsbezirk"]; $kreis=$row["kreis"]; $gemnd=$row["gemeinde"]; $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); $nr=$row["lage"]; if ($showParent) { // eine Koordinate zur Strasse besorgen // ax_Flurstueck >zeigtAuf> ax_LagebezeichnungOhneHausnummer $sqlko ="SELECT "; if($epsg == "25832") { // Transform nicht notwendig $sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; $sqlko.="st_y(st_Centroid(f.wkb_geometry)) AS y "; } else { $sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, "; $sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y "; } $sqlko.="FROM ax_lagebezeichnungohnehausnummer o "; $sqlko.="JOIN alkis_beziehungen v ON o.gml_id=v.beziehung_zu "; $sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id "; $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 "; $sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;"; // die erstbeste Koordinate $v=array($land,$regb,$kreis,$gemnd,$nr); $resko=pg_prepare("", $sqlko); $resko=pg_execute("", $v); if ($resko) { $rowko=pg_fetch_array($resko); $x=$rowko["x"]; $y=$rowko["y"]; } else { echo "\n

Fehler bei Koordinate zur Straße

"; } echo "\n
"; if ($x > 0) { // Koord. bekommen? echo "\n\t\n\t\t".$sname." (".$nr.")\n\t"; } else { // keine Koord. gefunden echo $sname." (".$nr.")"; // nur Anzeige, ohne Link } switch ($gfilter) { case 0: // Kein Filter echo " in ".$gemname; break; case 2: // Liste echo " in ".$gemname; break; default: // Einzelwert break; } echo "\n
"; } echo "\n
"; // Haeuser zum Strassenschluessel // $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, subq.geb, "; // Subquery $sql="SELECT replace(h.hausnummer,' ','') AS hsnr, "; if($epsg == "25832") { // Transform nicht notwendig $sql.="st_x(p.wkb_geometry) AS x, "; $sql.="st_y(p.wkb_geometry) AS y "; } else { $sql.="st_x(st_transform(p.wkb_geometry,".$epsg.")) AS x, "; $sql.="st_y(st_transform(p.wkb_geometry,".$epsg.")) AS y "; } /* Version mit // Subquery Liefert Informationen über Gebäude zur Hausnummer. Läuft aber spürbar langsamer. $sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von "; $sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id "; $sql.="LEFT JOIN (SELECT b.beziehung_zu AS zu, g.gml_id AS geb FROM alkis_beziehungen b "; $sql.="JOIN ax_gebaeude g ON b.beziehung_von=g.gml_id WHERE b.beziehungsart='zeigtAuf') subq "; $sql.="ON h.gml_id = subq.zu WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' "; $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; */ // Version ohne Subquery $sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von "; $sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id "; $sql.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' "; $sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 "; $sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; $v=array($land,$regb,$kreis,$gemnd,$nr); $resh=pg_prepare("", $sql); $resh=pg_execute("", $v); $cnt=0; $count=0; echo "\n"; while($rowh = pg_fetch_array($resh)) { // mehrere HsNr je Zeile if($count == 0){echo "\n";} $hsnr=$rowh["hsnr"]; // $geb=$rowh["geb"]; // Subquery $x=$rowh["x"]; $y=$rowh["y"]; /* // Subquery if ($geb == "") { // kein Gebäude $cls=" class='hsnro'"; $ttl="kein Haus"; } else { $cls=""; $ttl="Haus ".$geb; } */ echo "\n\t"; $cnt++; $count++; if($count == 6) { echo "\n"; $count = 0; } } if($count > 0) {echo "\n";} echo "\n
"; // echo "".$hsnr.""; // Subquery echo "'>".$hsnr.""; echo "
"; echo "\n

".$cnt." Hausnummern

"; } else { echo "\n

Keine Straße

"; } return; } // =========== // Start hier! // =========== if(isset($epsg)) { #if ($debug >= 2) {echo "\n

aktueller EPSG='".$epsg."'

";} // aus MB $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]); } else { #if ($debug >= 1) {echo "\n

kein EPSG gesetzt

";} $epsg=$gui_epsg; // aus Conf } #if ($debug >= 2) {echo "

Filter Gemeinde = ".$gemeinde."

";} if ($gemeinde == "") { $gfilter = 0; // ungefiltert } elseif(strpos($gemeinde, ",") === false) { $gfilter = 1; // Einzelwert } else { $gfilter = 2; // Liste } if (isset($str_schl)) { // aus Link $trans="Hausnummern zur Straße"; suchHausZurStr(true); } elseif(isset($street)) { // Eingabe in Form if (trim($street, "*,0..9") == "") { // Zahl, ggf. mit Wildcard $trans="Suche Straßenschlüssel \"".$street."\""; suchStrKey(); } else { $trans="Suche Straßenname \"".$street."\""; suchStrName(); } if(isset($str_schl)) { // Eindeutiges Ergebnis $trans="1 Straße gefunden, Hausnummern"; suchHausZurStr(false); } } // Titel im Kopf anzeigen echo "\n"; ?>