【问题标题】:deg2rad() expects parameter 1 to be double, object givendeg2rad() 期望参数 1 为双精度,给定对象
【发布时间】: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使用选择查询
  • 错误消息很清楚 - 但您显示的代码没有显示变量的分配方式或它们的值。请添加所有相关详细信息或示例数据/变量
  • 检查我的问题我更新了我的问题你还需要什么?

标签: php laravel haversine


【解决方案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() 并循环集合以获取每辆车的距离。
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2021-05-07
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
相关资源
最近更新 更多