有没有一种方式可以通过 Web 服务访问 Google 提供的交通数据?
似乎有一个 GTrafficOverlay
可以将交通信息放置在嵌入式 Google 地图上的路线之上,但是没有直接的 Web 服务可以使用,例如提供起点和终点并查找它们之间的交通情况?
是否有其他来源可以获取此数据?
有没有一种方式可以通过 Web 服务访问 Google 提供的交通数据?
似乎有一个 GTrafficOverlay
可以将交通信息放置在嵌入式 Google 地图上的路线之上,但是没有直接的 Web 服务可以使用,例如提供起点和终点并查找它们之间的交通情况?
是否有其他来源可以获取此数据?
更新(2022年5月):来自@AbdullahTahan:
现在谷歌有这个功能,但需要付费,每次请求的费用为0.01美元,请查看https://developers.google.com/maps/documentation/distance-matrix/distance-matrix#distance-matrix-advanced
更新(2016年3月):自2011年撰写此答案以来,发生了很多事情,但核心观点似乎仍然成立:您不会在免费的API服务中找到原始交通数据(至少不是针对美国和可能不是大多数其他地方)。但是,如果您不介意支付一些费用和/或者只需要像“考虑交通状况的特定路线的旅行时间”之类的东西,那么您有选择。例如,@Anto's answer指向Google's Maps For Work作为一个付费API服务,可以让您考虑交通状况获取旅行时间。
原始答案:从Google Maps Javascript API v3中获取原始交通数据没有办法(或者至少没有合理易用的方法)。即使您能够做到这一点,这样做很可能会违反Google Maps的服务条款中的某些条款。您必须从另一个服务中获取此信息。我怀疑目前没有免费的提供此信息的服务,但如果有人证明我是错误的,我会很高兴。
正如@crdzoba所指出的那样,Bing Maps API公开了一些交通数据。也许这能满足您的需求。从文档中并不清楚它公开了多少交通数据,因为它只提供“事件”的数据。由于建筑施工而导致的缓慢交通会在其中,但是对我而言,仅仅由于车流量大而导致的缓慢交通是否包含在内并不明显。{
"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
以获取道路段的地理坐标。
缩写可以在此处找到:解释HERE 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%历史值通常在0.7到1.0之间
- "FF" = 此路段的自由流速度。
- "JF" = 0.0至10.0之间的数字,表示预期的行驶质量。当道路关闭时,拥堵因素将为10.随着数字接近10.0,行驶质量变得更差。-1.0表示无法计算拥堵因素
- "SP" = 根据UNITS计算的速度,以速度限制为上限
- "SU" = 根据UNITS计算的速度,没有速度限制
- "TY" = 给定位置引用容器的类型信息。这可以是自由定义的字符串
此外,数据来源为:https://developer.here.com/rest-apis/documentation/traffic/topics/additional-parameters.html
Bing Maps API提供了一个REST服务,返回交通信息。
可以获取流量数据。
以下是我在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
有一个名为Open Traffic的项目,目前尚未完全实现功能,但似乎是未来的正确答案。
OpenTraffic是一个全球数据平台,将车辆和智能手机的匿名位置信息处理成实时和历史交通统计数据。我们正在采用完全开源的软件开发,并得到日益增长的合作伙伴的参与。