deg2rad() 期望参数 1 为双精度,给定对象
Posted
技术标签:
【中文标题】deg2rad() 期望参数 1 为双精度,给定对象【英文标题】:deg2rad() expects parameter 1 to be double, object given 【发布时间】:2020-07-09 07:40:19 【问题描述】:当我使用半正弦公式求距离时,它显示了这个错误
deg2rad() 期望参数 1 为双精度,对象给定
从 mysql 中获取 lat 和其他的值
$users_id = Auth::id();
$lon = DB::table('tbl')
->SELECT('lon')
->where("id", $users_id)
->get();
$lat = DB::table('tbl')
->SELECT('lat')
->where("id", $users_id)
->get();
$vehicle_lon=DB::table('tbl_2')
->select('lon')
->get();
$vehicle_lat=DB::table('tbl_2')
->select('lat')
->get();
我的代码
function haversineGreatCircleDistance($lat, $lon, $vehicle_lat, $vehicle_lon, $earthRadius = 6371000)
// convert from degrees to radians
$latFrom = deg2rad($lat);
$lonFrom = deg2rad($lon);
$latTo = deg2rad($vehicle_lat);
$lonTo = deg2rad($vehicle_lon);
【问题讨论】:
$lat, $lon, $vehicle_lat, $vehicle_lon
都是从哪里检索到的?
从mysql使用选择查询
错误消息很清楚 - 但您显示的代码没有显示变量的分配方式或它们的值。请添加所有相关详细信息或示例数据/变量
检查我的问题我更新了我的问题你还需要什么?
【参考方案1】:
当您使用以下查询时
$lon = DB::table('tbl')
->SELECT('lon')
->where("id", $users_id)
->get();
你得到一个集合。您必须遍历它才能获得所需的属性。你需要使用first()
来获取一个对象。
$lon = DB::table('tbl')
->SELECT('lon')
->where("id", $users_id)
->first();
但是即使现在你的问题也没有解决。你得到一个对象。你必须使用它的属性。所以让它像
$lonFrom = deg2rad($lon->lon);
lon
是您从数据库中获取的值。 $lon->lon
给你类似 0.25588484 的东西,这是 deg2rad()
方法所必需的。
【讨论】:
它向我显示了这个错误“未定义的属性:stdClass::$vehicle_lat” 你是如何使用它的?使用$latTo = deg2rad($vehicle_lat->lat)
;
您的列名是 lat
而不是 vehicle_lat
。您必须使用您通过 db 查询选择的列名。
没有错误,但我仍然对结果不满意,因为它导致我“7096.589079796”,但我想与所有车辆保持距离
然后使用 get() 并循环集合以获取每辆车的距离。以上是关于deg2rad() 期望参数 1 为双精度,给定对象的主要内容,如果未能解决你的问题,请参考以下文章
wpf CroppedBitmap 将图像裁剪为双精度像素值