Hallo,
ich habe eine Plz-Umkreissuche, die soweit auch erstmal funktioniert. Jetzt möchte ich allerdings noch die Distanz vom Suchort angeben. Leider funktioniert die Berechnung bei mir noch nicht exakt.
Beispieldaten:
Ich suche im Umkreis von 100 km mit der Postleitzahl 87700 (Memmingen). Als Ergebnis wird mir 87600 (Kaufbeuren) angezeigt. Als Distanz wird mir aber eine nicht realistische Zahl (6671,7 km) ausgegeben.
Die Koordinaten von Kaufbeuren sind:
longitude: 10.6167
latitude: 47.8833
koordx: 4199.5248139112
koordy: 787.18668108547
koordz: 4725.8829298307
Mein PHP-Script:
Es wäre schön, wenn Ihr mir dabei helfen könntet.
Danke im Voraus.
Philipp
ich habe eine Plz-Umkreissuche, die soweit auch erstmal funktioniert. Jetzt möchte ich allerdings noch die Distanz vom Suchort angeben. Leider funktioniert die Berechnung bei mir noch nicht exakt.
Beispieldaten:
Ich suche im Umkreis von 100 km mit der Postleitzahl 87700 (Memmingen). Als Ergebnis wird mir 87600 (Kaufbeuren) angezeigt. Als Distanz wird mir aber eine nicht realistische Zahl (6671,7 km) ausgegeben.
Die Koordinaten von Kaufbeuren sind:
longitude: 10.6167
latitude: 47.8833
koordx: 4199.5248139112
koordy: 787.18668108547
koordz: 4725.8829298307
Mein PHP-Script:
PHP:
function distance($erdradius, $plz) {
#echo $plz;
$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("plz, longitude, latitude, koordx, koordy, koordz", "tx_implantatelabor_adr", "plz = $plz");
$num = $GLOBALS["TYPO3_DB"]->sql_num_rows($res);
for ($i = 0; $i < 1; $i++) {
$row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);
$lon = $row["longitude"];
$lat = $row["latitude"];
$koordx = $row["koordx"];
$koordy = $row["koordy"];
$koordz = $row["koordz"];
list($lon, $lat) = $this->plzcoord($plz);
list($x, $y, $z) = $this->kugel2kartesisch($erdradius, $lon, $lat);
#echo "<p>x: $x<br>y: $y<br>z: $z</p>";
$distance = 2 * $erdradius * asin(sqrt(
pow($x - $koordx, 2)
+ pow($y - $koordy, 2)
+ pow($z - $koordz, 2)
) / (2 * $erdradius));
#echo "$distance<br>";
#$distance = 4.8556392367201;
$dist = round($distance, 2);
/*if($dist <= 0.5) {
$dist = 0.5;
}*/
$dist = str_replace(".", ",", $dist);
}
return "ca. $dist km";
}
function plzcoord($plz) {
$sql = "SELECT coo.lon, coo.lat FROM geodb_coordinates AS coo INNER JOIN geodb_textdata AS textdata ON textdata.loc_id = coo.loc_id WHERE textdata.text_val = $plz
AND textdata.text_type = '500300000' LIMIT 1";
$res = $GLOBALS["TYPO3_DB"]->sql_query($sql);
$num = $GLOBALS["TYPO3_DB"]->sql_num_rows($res);
if($num != 1) {
return false;
}
$row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);
$lonlat = array($row["lon"], $row["lat"]);
return $lonlat;
}
function kugel2kartesisch($erdradius, $lon, $lat) {
$lambda = $lon * pi() / 180;
$phi = $lat * pi() / 180;
$ursprungx = $erdradius * cos($phi) * cos($lambda);
$ursprungy = $erdradius * cos($phi) * sin($lambda);
$ursprungz = $erdradius * sin($phi);
$coord = array($ursprungx, $ursprungy, $ursprungz);
return $coord;
}
Es wäre schön, wenn Ihr mir dabei helfen könntet.
Danke im Voraus.
Philipp