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 将图像裁剪为双精度像素值

无法在文本字段中获取文本输入以解析为双精度

将变体转换为双精度时出错 [ Delphi XE + IBObjects 4.9.12 ]

使用 '%' 将字符串转换为双精度

将字符串转换为双精度的最佳方法

如何以 2 精度转换为双精度 - 点后的字符串?