谷歌方向 API 行程时间与实时谷歌地图不同

Posted

技术标签:

【中文标题】谷歌方向 API 行程时间与实时谷歌地图不同【英文标题】:Google direction API travel time is different from live google map 【发布时间】:2016-04-07 21:47:00 【问题描述】:

我现在在我的项目中使用谷歌方向 API,我还需要两个地方之间的估计旅行时间,包括交通。所以我通过了出发时间:Thursday 07-January-2016 time: 14:10 PM ( 1452175200 ) 根据谷歌方向 API 文档。

查看实时谷歌地图和谷歌方向 API 之间的区别,并建议我是否做错了什么。

Live google map response: (Thursday 07-January-2016 time: 14:10 PM )

https://www.google.com/maps/dir/Los+Angeles+International+Airport,+1+World+Way,+Los+Angeles,+CA+90045,+United+States/Beverly+Hills,+CA/@34.0077875,-118.4795875,12z/data=!3m1!4b1!4m17!4m16!1m5!1m1!1s0x80c2b0d213b24fb5:0x77a87b57698badf1!2m2!1d-118.40853!2d33.9415889!1m5!1m1!1s0x80c2bc04d6d147ab:0xd6c7c379fd081ed1!2m2!1d-118.4003563!2d34.0736204!2m3!6e0!7e2!8j1452175200

typically 28 min - 1 h 15 min

typically 35 min - 1 h 10 min

02:14 PM to 03:28 PM 1 h 14 min

****************************

Google direction API:

//Source address
$a = 'Los Angeles International Airport, 1 World Way, Los Angeles, CA 90045, United States'; 
//Destination address
$b = 'Beverly Wilshire, Beverly Hills (A Four Seasons Hotel), 9500 Wilshire Boulevard, Beverly Hills, CA 90212, United
        States';

//Pass source and destination address in google map API for PESSIMISTIC
$url = 'https://maps.googleapis.com/maps/api/directions/xml?origin='. urlencode($a).'&destination='. urlencode($b).'&departure_time=1452175200&mode=driving&traffic_model=pessimistic&key=AIzaSyC7h7m5bRs-BZwk0XTXEQTB74dZujeLzZs';
//output:  duration_in_traffic =  38 mins

//Pass source and destination address in google map API for OPTIMISTIC
$url = 'https://maps.googleapis.com/maps/api/directions/xml?origin='. urlencode($a).'&destination='. urlencode($b).'&departure_time=1452175200&mode=driving&traffic_model=optimistic&key=AIzaSyC7h7m5bRs-BZwk0XTXEQTB74dZujeLzZs';
//output:  duration_in_traffic = 27 mins

//Pass source and destination address in google map API for BEST_GUESS
$url = 'https://maps.googleapis.com/maps/api/directions/xml?origin='. urlencode($a).'&destination='. urlencode($b).'&departure_time=1452175200&mode=driving&traffic_model=best_guess&key=AIzaSyC7h7m5bRs-BZwk0XTXEQTB74dZujeLzZs';
//output:  duration_in_traffic = 30 mins

两个响应必须相同或近似,但在这里我们可以看到巨大的差异。谁能推荐我?

【问题讨论】:

您是否提供 Google Maps API for Work API 密钥? 是键 =>> AIzaSyC7h7m5bRs-BZwk0XTXEQTB74dZujeLzZs 这并不能告诉我这是否是“专业”密钥(适用于工作客户的 API)。顺便说一句,您应该避免这样提供您的 API 密钥。如果您正确定义了引荐来源网址,那么应该没有问题,但我会说最好自己保留... 好的,我应该使用专业密钥(我必须添加我的信用卡然后重新生成)? 抱歉,我可能误读了此处的文档。它实际上说它“只有在请求包含 API 密钥或 Google Maps API for Work 客户端 ID 时才有效”。所以一个标准的 API 密钥应该可以工作。 【参考方案1】:

时区复杂性

API 采用 UTC 的离开时间。

And it seems that the live Google map takes the timezone of the origin, when 'Depart at' is chosen (and maybe of destination, when 'Arrive by' is selected).

错误来源

您的假设是实时 Google 地图时间以 IST 为单位。

您对 2016 年 1 月 7 日下午 14:10 的实时谷歌地图响应实际上意味着洛杉矶的下午 2:10,即 2016 年 1 月 7 日星期四 22:00:00 UTC(并且离开时间 = 1452204600)。

结果验证

2016 年 1 月 7 日下午 2:10 的实时 Google 地图结果:

通常 28 分钟 - 1 小时 5 分钟 通常 35 分钟 - 1 小时 通常 30 分钟 - 1 小时 5 分钟

从API获取相应时间的结果(departure_time = 1452204600):

best_guess:39 分钟 悲观:1小时1分钟 乐观:28 分钟

PS:要获取与您的 API 结果对应的实时地图结果,请选择“Depart at”=6:00AM。

【讨论】:

有趣的是,我们同时提出了相同的答案......顺便说明一下,洛杉矶是 PST 而不是 IST,它代表“印度、爱尔兰或以色列标准时间”,除非我错过了一些东西;-) @MrUpsidown 呵呵是的!我的意思只是印度标准时间(因为提问者在印度进行了搜索,因此他的假设)。 (太平洋标准时间早上 6 点出发)。 好的,我已经取了印度的地址,出发时间是 2016 年 1 月 8 日下午 6:30 (1452277800) 现在您可以看到相同的结果。 谷歌地图结果:google.com/maps/dir/… 实际 API 结果:悲观==>> 12 分钟,乐观==> 11 分钟,best_guess=> 11 分钟。但实时谷歌地图显示不同路线的不同时间。和第一个一样:16 分钟到 26 分钟 || 16 分钟至 28 分钟 ||和 18 分钟到 30 分钟。【参考方案2】:

我没有机会尝试您的代码,但我怀疑问题可能出在 departure_time 参数上。

1452175200 是 2016 年 1 月 7 日 - 14:00:00 — 这是正确的

documentation 指定 您可以将时间指定为自 UTC 1970 年 1 月 1 日午夜起以秒为单位的整数。

不是很清楚,但我认为 API 希望您将时间作为 UTC 提供。

由于洛杉矶是 UTC-8,您应该相应地调整时间戳

试试看,告诉我!

【讨论】:

以上是关于谷歌方向 API 行程时间与实时谷歌地图不同的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?

谷歌地图方向api:python vs javascript

离子框架:不在设备上加载谷歌地图库

如何使用谷歌地图 api v3 旋转地图方向

如何在不使用谷歌地图 api 的情况下获取方向箭头

旋转谷歌地图以显示我的实时方向