使用Google Maps API获取两个lat lan地址之间的距离

时间:2018-02-10 07:25:23

标签: php google-maps google-distancematrix-api

运行此代码时,它没有给出任何值。 但是当用(37.910689 ,-97.250977),(16.110560, -94.174805)替换lat lan值时,它会以米为单位返回结果。它在传递任何其他lat lan值时显示空白输出,然后是美国地址。

function location(){

    $url="https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=28.666585,-77.229059&destinations=28.667053%2C-77.219898&key=Api key";

    $json_string = $url; 
    $jsondata = file_get_contents($json_string);
    $obj = json_decode($jsondata, TRUE); // Set second argument as TRUE

    //print_r($obj['rows']); // Now this will works!
    $prn=$obj['rows'];  
    foreach($prn as $row)
    { 
        $ele=$row['elements'];
        foreach($ele as $k)
        { 
            $dis=$k['distance'];
            foreach($dis as $l=> $lvalue){
                $meter= $lvalue  ;
            }
        }
    }   

    return $meter ;
}

2 个答案:

答案 0 :(得分:1)

您在代码中指定的两点是在大西洋。您可以在https://www.google.com的搜索框中输入28.667053,-77.219898进行验证。 Google以ZERO_RESULTS响应,因为它无法计算海洋中2点之间的距离。

更新:请注意,谷歌地图api给你的不是2点之间的天线或最短距离,或“像乌鸦飞行”的距离。这是行车距离或步行距离。所以它必须要知道2点才可以给你一个距离。如果它不知道2点或无法计算到2点的路线,它将不会给出结果。 https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=20.254916,76.715059&destinations=20.3127202,76.6839331 - 这些点很近但驾驶/步行距离很远。 Goole地图给出了驾驶/步行距离。

{
"destination_addresses": [
"28.667053,-77.219898"
],
"origin_addresses": [
"28.666585,-77.229059"
],
"rows": [
{
"elements": [
{
"status": "ZERO_RESULTS"
}
]
}
],
"status": "OK"
}

Google会在美国境内以2分的正确距离作出回应,例如https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=42.025819,-88.0854497&destinations=41.910088,-87.6929887

答案 1 :(得分:0)

尝试使用此代码计算行驶距离和时间。

代码:

<?php

function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response, true);

    $status = "ERROR"; 
    $dist   = 0;
    $time   = 0;
    if($response_a['rows'][0]['elements'][0]['status'] === 'OK') {
        $dist   = $response_a['rows'][0]['elements'][0]['distance']['text'];
        $time   = $response_a['rows'][0]['elements'][0]['duration']['text'];
        $status = "OK";
    }

    return array('status' => $status, 'distance' => $dist, 'time' => $time);
}

测试: 1.孟买和德里之间的距离2.随机无效拉特兰。

$dist = GetDrivingDistance(19.228825, 28.644800,72.854118, 77.216721);
var_dump($dist);
// OUTPUT : array(3) { ["status"]=> string(2) "OK" ["distance"]=> string(9) "1 386 km" ["time"]=> string(15) "22 godz. 35 min" }
$dist = GetDrivingDistance(888.228825, 28.644800,72.854118, 77.216721);
var_dump($dist);
// OUTPUT : array(3) { ["status"]=> string(5) "ERROR" ["distance"]=> int(0) ["time"]=> int(0) }

提示:您可以通过var_dump($response_a)内部函数获取更多详细信息。

PS:确保您提供正确的LAT LAN。