运行此代码时,它没有给出任何值。
但是当用(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 ;
}
答案 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。