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

Posted

技术标签:

【中文标题】如果我使用 Origin 和 Destination 变量,Google Distance Matrix API 不会返回值【英文标题】:Google Distance Matrix API does not return value if I am using variables of Origin and Destination 【发布时间】:2015-02-10 06:35:06 【问题描述】:

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

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

我的代码是这样的:

<?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;

它给了我“49.0 km 45 mins”的结果,这是我想要出现的结果。

谁能帮我格式化我的变量?我认为是我的 URL 中包含的变量的格式或语法有问题。

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

非常感谢!

【问题讨论】:

【参考方案1】:

使用字符串连接运算符创建您的 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 编码。

【讨论】:

非常感谢@geocodezip 的回答!它对我帮助很大。但不足之处在于,如果起点和终点包含空格,则会发送错误。无论如何,您的回答对我有所帮助,我们已经解决了这个问题。非常感谢!【参考方案2】:

上面@geocodezip 的答案是对的,但是如果Origin 和Destination 包含空格会触发错误。所以我们必须用“+”替换空格来避免它。这个问题的完整答案如下:

$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='.$origin.',而不是让我们的 origin=$origin 和我们的 destination=#desti。对于目的地,我们必须将其设为destination='.$desti.'

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

【讨论】:

【参考方案3】:

使用您的代码,我能够通过使用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 获得了用户的纬度和经度

【讨论】:

以上是关于如果我使用 Origin 和 Destination 变量,Google Distance Matrix API 不会返回值的主要内容,如果未能解决你的问题,请参考以下文章

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

如果不再使用本地分支,我应该使用 `git pull --rebase origin master` 还是 `git rebase origin/master`?

缺少 Access-Control-Allow-Origin 时的跨域请求

动态导航链接 SwiftUI Xcode

ActiveMQ

如果 EnableCors Origin 无效,则完全阻止 Web API 执行