如果我使用Origin和Destination变量,Google Distance Matrix API不会返回值

时间:2015-02-10 06:35:07

标签: php google-maps

我正在开展一个项目,需要计算两点之间的距离(纬度和经度或地方的特定名称)。

现在,由于我的出发地和目的地来自我的数据库,我需要使用一个变量来存储和最终计算原点和目的地。

我的代码是这样的:

<?php
//request the directions
$origin="maramag";
$desti="malaybalay";
$routes=json_decode(file_get_contents('http://maps.googleapis.com/maps/api/directions/json?origin=$origin&destination=$desti&alternatives=true&sensor=false'))-  >routes;

//sort the routes based on the distance
usort($routes,create_function('$a,$b','return intval($a->legs[0]->distance->value) - intval($b->legs[0]->distance->value);'));

//print the shortest distance
echo $routes[0]->legs[0]->distance->text;
echo $routes[0]->legs[0]->duration->text;
?>

但是当我尝试不使用变量运行URL时,例如:

    $routes=json_decode(file_get_contents('http://maps.googleapis.com/maps/api/directions/json?origin=maramag&destination=malaybalay&alternatives=true&sensor=false'))->routes;

它给我的结果是&#34; 49.0 km 45分钟&#34;这是我想要出现的结果。

有人可以帮我格式化我的变量吗?我认为URL中包含的变量的格式或语法存在问题。

我浏览了谷歌并在这个网站上,但我从未找到解决问题的方法。

非常感谢!

3 个答案:

答案 0 :(得分:0)

使用字符串连接运算符创建您的URL:

$origin="maramag";
$desti="malaybalay"; 
$routes=json_decode(file_get_contents('http://maps.googleapis.com/maps/api/directions/json?origin='.$origin.'&destination='.$desti.'&alternatives=true&sensor=false'))-  >routes;

如果字符串包含空格或其他在URL中不合法的字符,则URL会先对它们进行编码。

答案 1 :(得分:0)

上面@geocodezip的答案是正确的,但如果Origin和Destination包含空格,它将触发错误。所以我们必须用&#34; +&#34;替换空格。避免它。这个问题的完整答案如下:

$origin="Dologon, Maramag, Bukidnon";
$desti="Malaybalay City, Bukidnon";

//replace the spaces with "+"
$address1 = str_replace(' ', '+', $origin);
$address2 = str_replace(' ', '+', $desti);

//use concatenation as answered by @geocodezip
$routes=json_decode(file_get_contents('http://maps.googleapis.com/maps/api/directions/json?origin='.$address1.'&destination='.$address2.'&alternatives=true&sensor=false'))->routes;

因此,我们必须使它成为origin =&#39;。$ origin。&#39;而不是使我们的origin = $ origin和我们的目的地= #desti。对于目的地,我们必须使目的地=&#39;。$ desti。&#39;

快乐的编码!非常感谢您的帮助!

答案 2 :(得分:0)

使用您的代码我可以使用urlencode获得包含空格的地址的正确回复,并确保我使用双引号而不是单引号。

以下是我所做的一切:

$location = urlencode($location); // May contain spaces
$routes = json_decode(file_get_contents("http://maps.googleapis.com/maps/api/directions/json?origin=$userLat,$userLong&destination=$location&alternatives=true&sensor=false"))->routes;

其余代码完美运行并返回正确的距离和旅行时间。我没有必要使用PHP的字符串连接语法(即:"Text ". $var ." more text

如果有人好奇,我使用this post的答案通过javascript / PHP获得了用户的经纬度