从坐标PHP函数

时间:2015-11-27 22:31:04

标签: php mysqli

我正在使用带有mysqlnd驱动程序的MySQLi,并使用函数来获取长/纬度坐标并计算它们之间的距离,但是我遇到了奇怪的数字和有关“预期的双倍,字符串给定”的错误的问题。 / p>

在我的数据库中,long / lat值存储为“Decimal(18,15)”。然后我使用MySQLi查询从数据库中退出,并将它们存储在PHP变量中,如下所示:

$latitudeTo = $postcoderow[latitude];
$float_latitudeTo = floatval($latitudeTo);
$longitudeTo = $postcoderow[longitude];
$float_longitudeTo = floatval($longitudeTo);

另一组long / lat是相同的(只是使用不同的名称)。

但是,邮政编码只能来自英国,并使用以下PHP函数

function calculateDistance($float_latitudeFrom, $float_longitudeFrom, $float_latitudeTo, $float_longitudeTo, $earthMeanRadius = 3440) {
$deltaLatitude = deg2rad($float_latitudeTo - $float_latitudeFrom);
$deltaLongitude = deg2rad($float_longitudeTo - $float_longitudeFrom);
$a = sin($deltaLatitude / 2) * sin($deltaLatitude / 2) +
     cos(deg2rad($float_latitudeFrom)) * cos(deg2rad(float_latitudeTo)) *
     sin($deltaLongitude / 2) * sin($deltaLongitude / 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
return $earthMeanRadius * $c;
}

//Function call with the coordinates.
$miles = calculateDistance($float_latitudeFrom, $float_longitudeFrom, $float_latitudeTo, $float_longitudeTo, $earthMeanRadius = 3440);

我获得了超过3000英里的价值(我只是呼应'。$ miles。')

如何将$ float_latitudeTo ...等存储为双精度数,因为它们是数据库中的小数,但是会转换为导致错误的字符串。我认为PHP函数本身很好,就像我解析这些值一样。

谢谢你的时间!

0 个答案:

没有答案