我正在开展一个项目,需要计算两点之间的距离(纬度和经度或地方的特定名称)。
现在,由于我的出发地和目的地来自我的数据库,我需要使用一个变量来存储和最终计算原点和目的地。
我的代码是这样的:
<?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中包含的变量的格式或语法存在问题。
我浏览了谷歌并在这个网站上,但我从未找到解决问题的方法。
非常感谢!
答案 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获得了用户的经纬度