Функция пробега на карте Google для возврата пробега между двумя адресами - PullRequest
0 голосов
/ 26 сентября 2019

Для каждого цикла перестанет работать.

public static function getMiles($to, $from)
{

    $from = urlencode($from);
    $to = urlencode($to);
    $data = file_get_contents("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=$from&destinations=$to&key=MyKey");

    $time = 0;
    $distance = 0;

    /* return as an object for easier notation */
    $json=json_decode( $data, false );
    $origins = $json->origin_addresses;
    $destinations=$json->destination_addresses;

    /*  if there are multiple rows, use a loop and `$rows[$i]` etc */
    $elements=$json->rows[0]->elements;

    foreach( $elements as $i => $obj ){
    } 
    //extract the mileage as meters
    $miles = $obj->distance->value;

    //converting the meters to miles
    $distance= round(($miles * '0.000621371192'), 1);
    //returning miles
    return $distance;

}

Конечным результатом является возврат пробега между 2 адресами.Сообщение об ошибке: «Недопустимый аргумент для foreach ()».

1 Ответ

0 голосов
/ 28 сентября 2019

Ваша функция работает без проблем на моем конце.На самом деле я получаю эту ошибку «Invalid аргумент предоставлен для foreach ()» только тогда, когда я замаскирую свой ключ API из запроса API Distance Matrix.

Попробуйте запустить приведенный ниже код с действительным ключом API (заменяя «YOUR_KEY»):

function getMiles($to, $from)
{
    $from = urlencode($from);
    $to = urlencode($to);
    $data = file_get_contents("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=$from&destinations=$to&key=YOUR_KEY");

    $time = 0;
    $distance = 0;

    /* return as an object for easier notation */
    $json=json_decode( $data, false );
    $origins = $json->origin_addresses;
    $destinations=$json->destination_addresses;
    /*  if there are multiple rows, use a loop and `$rows[$i]` etc */
    $elements=$json->rows[0]->elements;

    foreach( $elements as $i => $obj ){
    } 
    //extract the mileage as meters
    $miles = $obj->distance->value;

    //converting the meters to miles
    $distance= round(($miles * '0.000621371192'), 1);
    //returning miles
    return $distance;
}

echo "\nMiles: " . getMiles("paris,france", "berlin,germany");

Полученное значение должно быть Miles: 659.

Я рекомендую вам пройти через эти руководства , чтобы дважды проверить ваш ключ, проект и платежный аккаунт, все в хорошем состоянии.

Надеюсь, это поможет!

...