如何在Laravel中计算两个Lat和Long之间的ETA

如何在Laravel中计算两个Lat和Long之间的ETA,laravel,google-maps,Laravel,Google Maps,我正在我的一个应用程序中使用谷歌地图。 在Driver\u location表中,每个驱动程序当前位置都会使用驱动程序id、纬度和经度值定期更新。下面是我的Driver\u location数据表结构 从上表中,我得到了最近的5名司机,代码如下 $nearest_carbid = DriverLocation::select(DB::raw('*, ( 6371 * acos( cos( radians('.$pickup_latitude.') ) * cos( radians( lati

我正在我的一个应用程序中使用谷歌地图。 在
Driver\u location
表中,每个驱动程序当前位置都会使用驱动程序id、纬度和经度值定期更新。下面是我的
Driver\u location
数据表结构

从上表中,我得到了最近的5名司机,代码如下

 $nearest_carbid = DriverLocation::select(DB::raw('*, ( 6371 * acos( cos( radians('.$pickup_latitude.') ) * cos( radians( latitude ) ) * cos(radians( longitude ) - radians('.$pickup_longitude.') ) + sin( radians('.$pickup_latitude.') ) * sin( radians( latitude ) ) ) ) as distance'))
        ->having('distance', '<=', 5)
        ->where('driver_location.status','Online')
        ->where('driver_location.car_id',$car_id)
        ->limit(5)->get();
我要做的是计算
$value->user\u id
$picking\u latitude
$picking\u longitude
中的每个
$value->user\u id
的预计到达时间(以分钟为单位),如下所示


如何使用google map api实现这一点?这里的问题是,司机与用户之间的距离是一条直线

我可能就在你的对面,但在河的另一边,这可能会让你觉得我是离你最近的司机,但事实上,我必须开车5公里才能找到一座桥过河

此外,您的计算将以直线返回距离,并且不会考虑您在道路上行驶时需要行驶的实际距离等,因此您甚至无法使用平均速度获得ETA

实际上,我建议您使用谷歌地图API或类似的服务,以获得他们实际需要的旅行距离。然后,您可以使用他们所在区域的平均速度来猜测ETA,也可以使用相同(或不同)的服务来查询ETA。谷歌地图是相当准确的,考虑到当前的交通状况,一天中的时间等,但这只是一个意见


如果上述任何一项都不适用于您,您只需推导出一个平均速度,您认为该速度可以解释驾驶员实际行驶距离的变化,并将其与他们需要行驶的距离一起计算出行驶该距离所需的时间。

我如何使用google map api实现这一点,我目前正在使用谷歌地图获取lat和lng@MithuGoogle距离矩阵API()可能就是您想要的。他们有PHPSDK,尽管您可能也会发现一个特定于Laravel的包。通常,他们允许您提供出发和到达地点以及交通方式,并返回路线选项和ETA。
 $data = [];
        foreach ($nearest_carbid as $key => $value) {

         $data[] = [
        'pickup_latitude'     => $pickup_latitude,
        'pickup_longitude'   =>  $pickup_longitude,
        'driver_id'     =>   $value->user_id, // each driver_id from driver location table