为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel获取一个位置和位置数组之间的距离谷歌矩阵

Laravel获取一个位置和位置数组之间的距离谷歌矩阵

PHP
白猪掌柜的 2023-07-01 13:00:42
我多次问过这个问题但没有答案,我想使用谷歌的matrixapi获取客户和50家商店之间的驾驶距离,其中我有客户的纬度和经度,以及每个商店的经纬度数组ID       array:57 [▼      0 => array:3 [▼        "id" => 695        "lat" => "2.9315257"        "long" => "101.7638137"      ]      1 => array:3 [▼        "id" => 696        "lat" => "2.9660291"        "long" => "101.7499998"      ]      2 => array:3 [▼        "id" => 700        "lat" => "2.937143099999999"        "long" => "101.7779784"      ]我使用了 url,但很难使用它 forloop 那么我如何传递数组并获取每个商店及其 id 的距离     $distance_data = file_get_contents(                'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins='.$from_latlong.'&destinations='.$to_latlong.'&key='.$googleApi            );                     $distance_arr = json_decode($distance_data);            $distance = $distance_arr->rows[0]->elements[0]->distance->text;            $duration = $distance_arr->rows[0]->elements[0]->duration->text;                       $distance = preg_replace("/[^0-9.]/", "",  $distance);            $duration = preg_replace("/[^0-9.]/", "",  $duration);                       $distance=$distance * 1.609344;                       $distance=number_format($distance, 1, '.', '');            $duration=number_format($duration, 1, '.', '');     
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我还没有尝试运行它,但从文档来看,您似乎应该用|.

起点- 计算行驶距离和时间的起点。您可以以地址、纬度/经度坐标或地点 ID 的形式提供一个或多个由竖线字符 (|) 分隔的位置:

目的地— 一个或多个位置,用作计算行驶距离和时间的终点。目的地参数的选项 与起源参数的选项相同,如上所述

因此,此代码循环遍历目的地并使用值创建第二个数组x,y,然后implode()使用|...

$dests = [[

        "id" => 695,

        "lat" => "2.9315257",

        "long" => "101.7638137"

        ],

        [

        "id" => 696,

        "lat" => "2.9660291",

        "long" => "101.7499998"

        ],

        [

        "id" => 700,

        "lat" => "2.937143099999999",

        "long" => "101.7779784"

]];


$coords = array_map(function($data) { return  $data['lat'].",".$data['long']; }, $dests );

$from_latlong = implode("|", $coords);

$distance_data = file_get_contents(

        'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins='.$from_latlong.'&destinations='.$to_latlong.'&key='.$googleApi

        );

所以目的地看起来像......


2.9315257,101.7638137|2.9660291,101.7499998|2.937143099999999,101.7779784

编辑


从您发布的额外代码来看,它会是这样的......


$distance_arr = json_decode($distance_data);

foreach ( $distance_arr->rows[0] as $key => $element )  {

    $distance = $element->distance->text;

    $duration = $element->duration->text;

    // The matching ID

    $id = $dests[$key];

    

    $distance = preg_replace("/[^0-9.]/", "",  $distance);

    $duration = preg_replace("/[^0-9.]/", "",  $duration);

    

    $distance=$distance * 1.609344;


    $distance=number_format($distance, 1, '.', '');

    $duration=number_format($duration, 1, '.', '');  

}

将foreach循环遍历元素,然后$key将是元素的索引以及目标,因此您可以从源数组中的匹配元素中挑选出 ID。


查看完整回答
反对 回复 2023-07-01
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信