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



我问过这个问题很多次但没有答案,我想使用谷歌的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, '.', '');               

我没有尝试运行它,但从文档中可以看出,您应该用|分隔每组坐标。

原点— 计算行驶距离和时间的起点。您可以提供由管道分隔的一个或多个位置 字符 (|(,以地址、纬度/经度的形式 坐标或地点 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。

最新更新