有什么方法可以访问Google通过网络服务提供的交通数据?
似乎有一种GTrafficOverlay
将流量放在嵌入式google地图上的路线顶部的方法,但是没有我可以使用的直接网络服务来提供源和目的地并找到它们之间的流量?
我还有其他来源可以获取此数据吗?
有什么方法可以访问Google通过网络服务提供的交通数据?
似乎有一种GTrafficOverlay
将流量放在嵌入式google地图上的路线顶部的方法,但是没有我可以使用的直接网络服务来提供源和目的地并找到它们之间的流量?
我还有其他来源可以获取此数据吗?
Answers:
无法(或至少没有合理的简便方法)从Google Maps Javascript API v3获取原始流量数据。即使您可以这样做,也可能会违反《 Google地图服务条款》中的某些条款。您将不得不从另一服务获得此信息。我怀疑当前是否有免费服务可以提供此信息,但是如果有人证明我对此有误,我将非常乐意。
正如@crdzoba指出的那样,Bing Maps API公开了一些路况数据。也许可以满足您的需求。从文档中还不清楚暴露出多少流量数据,因为它只是有关“事件”的数据。由于施工会导致交通缓慢,但对于我来说,是否仅仅是由于交通量造成的交通缓慢对我来说并不明显。
更新(2016年3月):自从在2011年编写此答案以来,发生了很多事情,但是核心问题似乎成立了:您不会在免费的API服务中找到原始流量数据(至少不是在美国,而且可能不是)其他大多数地方)。但是,如果您不介意花一点钱和/或只需要“考虑到交通的特定路线的旅行时间”之类的东西,则可以选择。例如,@ Anto的答案指向Google的Maps For Work作为一项付费API服务,可让您在考虑交通情况的情况下获得出行时间。
显然,可以在其专业版Maps for work中使用Google Directions API获得该信息。根据API的文档:
注意:Maps for Work用户必须在请求中包括客户端和签名参数,而不是密钥。
[...]
duration_in_traffic表示这条路段的总时长,考虑到当前的交通状况。如果满足以下所有条件,则只会返回持续时间:
- 路线请求中包含一个设为当前时间几分钟内的值的离开时间参数。
- 该请求包括有效的Google Maps API for Work客户端和签名参数。
- 所请求路线的路况条件可用。
- 路线请求不包含中途停留点。
您可能想看看这里的地图服务。它们具有您可以使用的直接流量数据,而这正是您所需要的:https : //developer.here.com/api-explorer/rest/traffic/traffic-flow-bounding-box
例如,通过查询感兴趣的区域,您可能会得到以下信息:
{
"RWS": [
{
"RW": [
{
"FIS": [
{
"FI": [
{
"TMC": {
"PC": 32483,
"DE": "SOHO",
"QD": "+",
"LE": 0.71682
},
"CF": [
{
"TY": "TR",
"SP": 9.1,
"SU": 9.1,
"FF": 17,
"JF": 3.2911,
"CN": 0.9
}
]
}
]
}
],
....
此示例显示当前平均速度SU
为9.1,其中自由流动速度FF
为17。果酱系数JF
为3.3,仍被认为是自由流动,但速度变慢。可以在API调用中定义使用的单位(英里/公里)。为避免处理TMC位置,您可以通过添加responseattributes=sh
请求来询问路段的地理坐标。
此处使用的缩写可在此处解释“ Maps”实时交通标签:
- “ RWS”-巷道(RW)项目列表
- “ RW” =这是用于整个道路的流量的合成项目。每个道路都会显示一个道路项目,并提供交通流信息
- “ FIS” =流项目(FI)元素的列表
- “ FI” =单个流程项目
- “ TMC” = TMC位置的有序集合
- “ PC” =点TMC位置代码
- “ DE” =道路的文字说明
- “ QD” =排队方向。“ +”或“-”。请注意,这与完全限定ID中的行进方向相反,例如,对于位置107 + 03021,QD为'-'
- “ LE” =路段的长度。单位在文件头中定义
- “ CF” =电流。该元素包含有关给定流项目的速度和卡纸因子信息的详细信息。
- “ CN” =置信度,表示如何确定速度。-1.0道路封闭。1.0 = 100%0.7-100%历史值通常介于.7和1.0之间的值“ FF” =这
条道路上的自由流动速度。- “ JF” = 0.0到10.0之间的数字,表示预期的旅行质量。道路封路时,“堵塞系数”将为10。随着数字的接近10.0,旅行质量会越来越差。-1.0表示无法计算出堵塞因子
- “ SP” =速度(基于单位),以速度限制为上限
- “ SU” =速度(基于单位)不受速度限制的限制
- “ TY” =给定“位置引用”容器的类型信息。这可以是自由定义的字符串
来源也来自 https://developer.here.com/rest-apis/documentation/traffic/topics/additional-parameters.html
您可以尝试其他方法,而不是尝试提取原始流量数据。Google Directions API允许您使用特定的路线查询api,并返回JSON字符串或XML元素。该结果包括元素-'duration_in_traffic',它考虑了当前的交通状况,表明了特定行程的总时长。(有关“方向”和Directions API返回的JSON字符串的其他元素的信息,请参见下面的链接)
https://developers.google.com/maps/documentation/directions/#JSON 我自己还没有尝试过,只是在文档中遇到了一些问题。
在印度,我们使用http://www.itrafficnews.com。但是数据是由用户发布的。我不认为谷歌将提供数据。
也许您应该看看Mapquests Traffic API:http://www.mapquestapi.com/traffic/
我认为该Web服务仅在美国的某些城市可用。但是可能可以解决您的问题。
我认为Google不会提供此API。交通数据不仅包含事件数据。
如今,许多在线地图都显示城市交通状况,但它们尚未为开发人员提供API。我们甚至不知道他们从哪里获得交通数据。也许政府有数据。
所以我认为您可以从另一个方向考虑。例如,那里有很多社交网络网站。每个人都可以在网站上发布交通信息。我们可以收集这些信息以获得交通状况。或者,也许我们可以创建一个此类网站。
但是这种类型的流量数据(上面已经讨论过)是不准确的。甚至人类提供的信息也是错误的。
幸运的是,我发现我所在的城市现在提供了一个名为“实时公交信息”的移动应用程序。它可以告诉市民公交车现在在哪里,什么时候到达公交车站。我在这个应用程序中嗅探REST API。REST API的数据提供了重要数据,例如纬度和经度,以及总线速度。这是实时数据!因此,我认为我们可以(通过一些编程)从这些数据计算流量状态。这是一些示例数据:https : //github.com/sp-chenyang/bus/blob/master/sample_data/bjgj_aibang_com_8899_bjgj_php_city_linename_stationno_datatype_type.json
即使是总线数据也不足以计算准确的实时交通状况。事故,交通信号灯等会影响交通状况。但是我认为这是开始。
最后,我认为您可以尝试查找您的城市是否提供了这些数据。
PS:我一直在想,未来的生活会比现在更好,但现在不会。
可以获取交通数据。下面是我在python中的实现。该API有一定的配额,并且不是完全免费的,但对于小型项目来说足够了
import requests
import time
import json
while True:
url = "https://maps.googleapis.com/maps/api/distancematrix/json"
querystring = {"units":"metric","departure_time":str(int(time.time())),"traffic_model":"best_guess","origins":"ITPL,Bangalore","destinations":"Tin Factory,Bangalore","key":"GetYourKeyHere"}
headers = {
'cache-control': "no-cache",
'postman-token': "something"
}
response = requests.request("GET", url, headers=headers, params=querystring)
d = json.loads(response.text)
print("On", time.strftime("%I:%M:%S"),"time duration is",d['rows'][0]['elements'][0]['duration']['text'], " & traffic time is ",d['rows'][0]['elements'][0]['duration_in_traffic']['text'])
time.sleep(1800)
print(response.text)
回应是:-
{
"destination_addresses": [
"Tin Factory, Swamy Vivekananda Rd, Krishna Reddy Industrial Estate, Dooravani Nagar, Bengaluru, Karnataka 560016, India"
],
"origin_addresses": [
"Whitefield Main Rd, Pattandur Agrahara, Whitefield, Bengaluru, Karnataka 560066, India"
],
"rows": [
{
"elements": [
{
"distance": {
"text": "10.5 km",
"value": 10505
},
"duration": {
"text": "35 mins",
"value": 2120
},
"duration_in_traffic": {
"text": "45 mins",
"value": 2713
},
"status": "OK"
}
]
}
],
"status": "OK"
}
您需要传递的"departure_time":str(int(time.time()))
是交通信息所需的查询字符串参数。
您的路况信息将出现在 duration_in_traffic
。
请参阅此文档以获取更多信息。
https://developers.google.com/maps/documentation/distance-matrix/intro#traffic-model