<< END; function suchStrName() { // Strassen nach Name(-nsanfang) global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath; $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.gemeinde, g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage FROM ax_lagebezeichnungkatalogeintrag k JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde WHERE k.bezeichnung ILIKE $1 AND k.endet IS NULL AND g.endet IS NULL "; switch ($gfilter) { case 1: // Einzelwert $sql.="AND k.gemeinde='".$gemeinde."' "; break; case 2: // Liste $sql.="AND k.gemeinde in (".str_replace(",", "','", $gemeinde).") "; break; default: // kein Filter break; } $sql.="ORDER BY g.bezeichnung, k.bezeichnung, k.lage LIMIT $2 ;"; $v=array($match,$linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Name

"; if ($debug > 2) {echo "

SQL = '".$sql."'

";} return; } $cnt = 0; $gwgem=""; while($row = pg_fetch_array($res)) { $gemname=$row["gemname"]; $gemnr=$row["gemeinde"] ; if ($gwgem != $gemname) { if ($gfilter != 1) { zeile_gemeinde($gemnr, $gemname, false); // ToDo: aber ohne Link oder Link verarbeiten können } $gwgem=$gemname; } $gkey=$row["schluesselgesamt"]; // Land-RegBez-Kreis-Gem-Strasse - für weitere Suche $skey=$row["lage"]; // Nur Str.-schl. daraus $kgml=$row["gml_id"]; // ID von Katalog // +++ in function_zeile_strasse() $sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8"); echo "\n\t

"; // Icon -> Buchnachweis echo "\n\t"; echo "\n\t\tSTR"; echo "\n\t"; echo "".$sname.""; echo "
"; // +++ function ende $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 num. Schluessel global $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug, $auskpath; $linelimit=60; if(preg_match("/\*/",$street)) { $match=trim(preg_replace("/\*/i","%",$street)); // fuehrende Nullen eingeben oder fuehrende Wildcard } else { $match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten } $sql ="SELECT g.bezeichnung AS gemname, k.gml_id, k.bezeichnung, k.schluesselgesamt, k.lage FROM ax_lagebezeichnungkatalogeintrag as k JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde WHERE k.lage LIKE $1 AND k.endet IS NULL AND g.endet IS NULL "; switch ($gfilter) { case 1: // Einzelwert $sql.="AND k.gemeinde='".$gemeinde."' "; break; case 2: // Liste $sql.="AND k.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break; } $sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;"; $v=array($match,$linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Schlüssel

"; return; } $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"]; $kgml=$row["gml_id"]; // ID von Katalog // +++ in function_zeile_strasse() echo "\n\t
"; // Icon -> Buchnachweis echo "\n\t"; echo "\n\t\tSTR"; echo "\n\t"; echo $skey." ".$sname; echo ""; switch ($gfilter) { case 0: // Kein Filter echo " in ".$gemname; break; case 2: // Liste echo " in ".$gemname; break; } echo "
"; // function ende $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 $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug, $auskpath; // Head // Strasse zum Strassenschluessel $sql ="SELECT g.bezeichnung AS gemname, k.gml_id AS kgml, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage FROM ax_lagebezeichnungkatalogeintrag as k JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde WHERE k.schluesselgesamt = $1 AND k.endet IS NULL AND g.endet IS NULL LIMIT 1"; $v=array($str_schl); // Schluessel-Gesamt .. $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Name zum Straßenschlüssel

"; if ($debug > 2) {echo "

SQL = '".$sql."'

";} return; } if($row = pg_fetch_array($res)) { // .. gefunden $kgml=$row["kgml"]; // ID aus Katalog $sname=$row["bezeichnung"]; $land =$row["land"]; // Einzel-Felder für JOIN _lagebezeichnung_ $regb =$row["regierungsbezirk"]; $kreis=$row["kreis"]; $gemnd=$row["gemeinde"]; $nr=$row["lage"]; $gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8"); 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 ax_flurstueck f ON o.gml_id=ANY(f.zeigtauf) "; $sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 "; $sqlko.="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

"; } // +++ IN ARBEIT: echo "\n\t
"; // Icon -> Buchnachweis echo "\n\t"; echo "\n\t\tSTR"; echo "\n\t"; 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; } echo "\n
"; } echo "\n
"; // Body // Haeuser zum Strassenschluessel $sql="SELECT min(replace(h.hausnummer,' ','')) AS hsnr, "; if($epsg == "25832") { // Transform nicht notwendig $sql.="avg (st_x(p.wkb_geometry)) AS x, "; $sql.="avg (st_y(p.wkb_geometry)) AS y "; } else { $sql.="avg (st_x(st_transform(p.wkb_geometry,".$epsg."))) AS x, "; $sql.="avg (st_y(st_transform(p.wkb_geometry,".$epsg."))) AS y "; } $sql.="FROM ap_pto p JOIN ax_lagebezeichnungmithausnummer h ON h.gml_id=ANY(p.dientzurdarstellungvon) WHERE p.art='HNR' AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 AND p.endet IS NULL AND h.endet IS NULL GROUP BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2) ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; // Problem: mehrere Koordinaten für verschiedene Maßstäbe der Kartendarstellung // Diese sollten nicht mehrfach gelistet werden. Für Positionierung "irgendeine" nehmen. // Lösung: über GROUP BY in SQL. Alternative Lösungen wären: // 1. Gruppenwechsel bei Abarbeitung des Result // 2. Subquery mit LIMIT 1 statt JOIN // 3. Geometrie aus Gebäude-Mittelpunkt statt aus Präsentationsobjekt der Hausnummer $v=array($land,$regb,$kreis,$gemnd,$nr); $resh=pg_prepare("", $sql); $resh=pg_execute("", $v); if (!$resh) { echo "\n

Fehler bei Häuser zum Straßenschlüssel

"; if ($debug > 2) {echo "

SQL='".$sql."'
Array=".$v."

";} return; } $cnt=0; $count=0; echo "\n"; while($rowh = pg_fetch_array($resh)) { // mehrere HsNr je Zeile if($count == 0){echo "\n";} $hsnr=$rowh["hsnr"]; $x=$rowh["x"]; $y=$rowh["y"]; echo "\n\t"; $cnt++; $count++; if($count == 6) { echo "\n"; $count = 0; } } if($count > 0) {echo "\n";} echo "\n
"; echo "".$hsnr.""; echo "
"; if ($cnt > 1) { echo "\n

".$cnt." Hausnummern

"; } } else { echo "\n

Keine Straße

"; } return; } // =========== // Start hier! // =========== if(isset($epsg)) { $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]); } else { $epsg=$gui_epsg; // aus Conf } if ($gemeinde == "") { $gfilter = 0; // ungefiltert } elseif(strpos($gemeinde, ",") === false) { $gfilter = 1; // Einzelwert } else { $gfilter = 2; // Liste } // +++ Zerlegung Eingabe aus "Balken" von Buchauskunft "Lage": // Numerisch: Gem-Str-Haus-lfd if ($str_schl != "") { // aus Link $trans="Hausnummern zur Straße"; suchHausZurStr(true); } elseif($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 " "; ?>