Ich versuche verkettete GPS-Positionen in einer Zeichenfolge anzuzeigen, wenn der Abstand zwischen dem Eingabeort und dem in der Datenbank weniger als 50 km beträgt. Dazu benutze ich einen Funktionsabstand ($ lat1, $ lon1, $ lat2, $ lon2, $ unit), der die Parameter für den Breiten- und Längengrad der beiden Orte enthält. Diese Funktion scheint in vielen Fällen gut zu funktionieren, aber ich bekomme manchmal eine NAN als Ausgabe (Abstand zwischen Punkten) in der Zeichenfolge. Ich weiß nicht, was es verursacht, ob die Funktion der Eingabe. Bitte überprüfen Sie meinen Code und Beispiel Eingabe-Ausgabe unten. PS: $ date ist die Breite des Eingabestandorts.Entfernung zwischen 2 GPS-Standorten PHP
function getGPS($date,$gps){
$stringa="";
$connx = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $connx) {
die('Could not connect: ' . mysql_error());
}
$sqlx = 'SELECT gpslat,gpslong FROM whosonline';
mysql_select_db('revietbw_reviewitappDB');
$retvalx = mysql_query($sqlx, $connx);
if(! $retvalx) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retvalx)) {
$glat=(float)$row['gpslat'];
$glong=(float)$row['gpslong'];
$dis=distance((float)$date, (float)$gps, $glat, $glong, "K");
echo $dis;
if($dis<100){
$stringa = $stringa . ":" . $glat . " " . $glong;
}
}
//echo "Fetched data successfully\n";
mysql_close($connx);
return $stringa;
}
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
Probe Input: gpslong=101.1020&gpslat=11.1241
Ausgang: NANNANNAN872.77757900898
Bitte beenden Sie die mysql_ Funktionen sofort. Sie sind in PHP 5.5 veraltet und in PHP 7 entfernt worden. Verwenden Sie stattdessen 'mysqli_' -Funktionen oder 'PDO'. – Chris
Fast ein exaktes Duplikat von: http://StackOverflow.com/Questions/8696755/PHP-ReTurning-Nan –
Hinweis: MySQL 5.6.1 + hat 'ST_DISTANCE', die genau das tun würden, was Sie brauchen (vorausgesetzt, Sie konvertieren Ihre lange/lat zu Geometrien). Überprüfen Sie https://dev.mysql.com/doc/refman/5.6/en/spatial-analysis-functions.html es kann Ihnen eine Menge Ärger ersparen. – apokryfos