Дистанционное расстояние Google API с ключом и без него - PullRequest
0 голосов
/ 31 мая 2018

Google, похоже, указывает, что мне нужно использовать SSL и предоставить ключ для расчета расстояния, поэтому я пытаюсь переделать свою функцию, чтобы приспособиться, но в результате могу получить только 0.URL, показанный с использованием distancematrix, дает правильное значение при запуске в браузере, но я не уверен, как получить результат в PHP.Похоже, что набор данных $ пуст, поэтому что-то не так в вызовах curl.Любые идеи, чтобы получить расстояние и есть ли способ получить ближайшее расстояние, а не самое быстрое?

function compareDistance($inLatitude,$inLongitude,$outLatitude,$outLongitude,$units) {
    // If one of my own addresses is entered, return 0
    if ($inLatitude != $outLatitude && $inLongitude != $outLongitude) :
        $googlekey = "ABCDEFG123456";
        $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=$inLatitude,$outLatitude&destinations=$outLatitude,$outLongitude&key=$googlekey";
        // Retrieve the URL contents
        $c = curl_init();
        curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($c, CURLOPT_URL, $url);
        $jsonResponse = curl_exec($c);
        curl_close($c);

        $dataset = json_decode($jsonResponse);
        if (!$dataset)
            return 0;
        if (!isset($dataset->routes[0]->legs[0]->distance->value))
            return 0;

        // Google API returns meters: multiply by .00062 to get miles
        $miles = ($dataset->routes[0]->legs[0]->distance->value * .00062);

        // Convert units
        if ($units == "K") :
            return $miles * 1.609344;
        elseif ($units == "N") :
            return $miles * 0.8684;
        else :
            return $miles;
        endif;
    else:
        return 0;
    endif;
}

$ jsonResponse выводит:

{ "destination_addresses" : [ "44.405159,-121.2556414" ], "origin_addresses" : [ "38.257061,44.405159" ], "rows" : [ { "elements" : [ { "status" : "ZERO_RESULTS" } ] } ], "status" : "OK" } 

1 Ответ

0 голосов
/ 12 июня 2018

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

function compareDistance($inLocation,$outLocation,$units,$googlekey) {
    // If one of my own addresses is entered, return 0
    if ($inLocation != $outLocation) :
        $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=$inLocation&destinations=$outLocation&mode=driving&key=$googlekey";

        // Retrieve the URL contents
        $c = curl_init();
        curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($c, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($c, CURLOPT_URL, $url);
        $jsonResponse = curl_exec($c);
        curl_close($c);

        $dataset = json_decode($jsonResponse);

        if (!$dataset)
            return 0;
        if (!isset($dataset->rows[0]->elements[0]->distance->value))
            return 0;

        $meters = $dataset->rows[0]->elements[0]->distance->value;

        // Convert default meters to other units
        if ($units == "M") :
            return ($meters / 1609.344); // Miles
        elseif ($units == "N") :
            return ($meters / 1852); // Nautical miles
        elseif ($units == "K") :
            return ($meters * 0.001); // Kilometers
        else :
            return $meters;
        endif;
    else:
        return 0;
    endif;
}
...