如何在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