我有没有办法访问Google通过网络服务提供的流量数据?
似乎有一个GTrafficOverlay
将流量置于嵌入式谷歌地图上的路线之上,但没有直接的网络服务,我可以消费,比如,给出来源和目的地并找到流量他们之间?
我可以从其他任何来源获取此数据吗?
答案 0 :(得分:43)
从Google Maps Javascript API v3获取原始流量数据是没有办法的(或者至少没有合理简便的方法)。即使您可以这样做,这样做也可能违反Google地图服务条款中的某些条款。您必须从其他服务获取此信息。我怀疑目前有免费服务可以提供这些信息,但如果有人证明我错了,我会很高兴。
正如@crdzoba指出的那样,Bing Maps API exposes some traffic data。也许这可以满足您的需求。从文档中不清楚暴露了多少流量数据,因为它只是关于“事件”的数据。由于施工造成的交通流量缓慢,但对我而言,由于交通流量而导致交通量减慢是不明显的。
更新(2016年3月):自2011年撰写此答案以来已经发生了很多事情,但核心要点似乎仍然存在:您将无法在免费中找到原始流量数据 API服务(至少不适用于美国,也可能不是大多数其他地方)。但是如果你不介意付钱和/或如果你只是需要“考虑到交通的特定路线的旅行时间”这样的东西,你有选择权。例如,@Anto's answer指向Google's Maps For Work作为付费API服务,可让您获得考虑流量的旅行时间。
答案 1 :(得分:12)
显然,可以使用专业版Google Directions API中的Maps for work获取相关信息。根据{{3}}:
注意:Maps for Work用户必须在其请求中包含客户端和签名参数,而不是密钥 [...]
duration_in_traffic 表示此行程的总持续时间,并考虑当前的交通状况。只有满足以下所有条件时,才会返回流量持续时间:
- 路线请求包括departure_time参数,该参数设置为当前时间的几分钟内的值。
- 该请求包含有效的Google Maps API for Work客户端和签名参数。
- 所需路线的交通状况可用。
- 路线请求不包括中途停留点。
答案 2 :(得分:10)
Bing Maps API有一个返回流量信息的REST服务
答案 3 :(得分:6)
在印度,我们正在使用http://www.itrafficnews.com。但数据由用户发布。我不认为谷歌会提供数据。
答案 4 :(得分:6)
您可以尝试不同的方法,而不是尝试提取原始流量数据。 Google Directions API允许您使用特定路径查询api,并返回JSON字符串或XML元素作为结果。 此结果包括元素 - 'duration_in_traffic' 这表示考虑当前交通状况的特定行程段的总持续时间。 (有关'leg'以及Directions API参考链接返回的JSON字符串的其他元素的信息)
https://developers.google.com/maps/documentation/directions/#JSON 我自己没有试过这个,只是我在文档中遇到过的东西。
答案 5 :(得分:6)
您可能需要查看此处的地图服务。他们拥有您可以使用的直接流量数据,这正是您所需要的: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
}
]
}
]
}
],
....
可在此处找到解释Interpreting HERE Maps real-time traffic tags:
- " RWS" - 道路(RW)物品清单
- " RW" =这是整个道路上的流动的复合项目。每条道路都将有一条道路项目 提供交通流量信息
- " FIS" =流程项(FI)元素列表
- " FI" =单个流项目
- " TMC" =有序的TMC位置集合
- " PC" = Point TMC位置代码
- " DE" =道路的文字描述
- " QD" =排队方向。 ' +'或' - '。请注意,这与完全限定ID中的行进方向相反,例如 位置107 + 03021 QD将是' - '
- " LE" =一段路的长度。单位在文件头
中定义- " CF" =当前流量。此元素包含有关给定流项的速度和Jam Factor信息的详细信息。
- " CN" =信心,表明速度是如何确定的。 -1.0路关闭。 1.0 = 100%0.7-100%历史通常 介于.7和1.0之间的值" FF" =此自由流速 一段路。
- " JF" = 0.0到10.0之间的数字表示预期的旅行质量。当有道路封闭时,果酱因子 将是10.当数字接近10.0时,旅行的质量是 越来越糟。 -1.0表示不能使用Jam Factor 计算
- " SP" =以速度限制为限的速度(基于UNITS)
- " SU" =速度(基于UNITS)不受速度限制
- " TY" =键入给定位置引用容器的信息。这可以是自由定义的字符串
来源也来自 https://developer.here.com/rest-apis/documentation/traffic/topics/additional-parameters.html
答案 6 :(得分:4)
也许您应该查看Mapquests Traffic API:http://www.mapquestapi.com/traffic/
遗憾的是,网络服务仅适用于美国的某些城市。但它可能解决了你的问题。
答案 7 :(得分:2)
我认为Google不会提供此API。交通数据不仅包含事故数据。
今天,许多在线地图显示了城市流量,但他们没有为开发者提供API。我们甚至不知道他们从哪里获得交通数据。也许政府有数据。
所以我认为你可以从另一个方向思考它。例如,那里有很多社交网站。每个人都可以在网站上发布交通信息。我们可以收集这些信息以获取流量状态。或者我们可以创建一个这种类型的网站。
但是那种类型的交通数据(上面谈到过)并不准确。甚至人类提供的信息也是错误的。
幸运的是,我发现我的城市现在提供了一个名为“实时总线信息”的移动应用程序。它可以告诉市民现在公共汽车的位置,以及何时到达公交车站。我在这个应用程序中嗅探REST API。 来自REST API的数据提供重要数据,例如lat和lon,以及总线速度。它是实时数据!所以我认为我们可以根据这些数据计算流量状态(通过一些编程)。 以下是一些示例数据:https://github.com/sp-chenyang/bus/blob/master/sample_data/bjgj_aibang_com_8899_bjgj_php_city_linename_stationno_datatype_type.json
即使总线数据也不足以计算准确的实时流量状态。事故,交通信号灯等事情都会影响交通状况。但我认为这是开始。
最后,我想您可以尝试查找您的城市是否提供这些数据。
PS:我一直认为未来人们的生活会更好,但不是现在。答案 8 :(得分:2)
可以获取交通数据。 下面是我在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
答案 9 :(得分:0)
有一个名为Open Traffic的项目,目前尚不能完全正常运行,但将来似乎是正确的答案。
OpenTraffic是一个全球数据平台,可将车辆和智能手机的匿名位置处理为实时和历史流量统计信息。我们正在使用完全开放源代码的软件,并在越来越多的合作伙伴的参与下,以开放的方式来构建它。