通过Web服务访问Google的流量数据

时间:2011-01-05 03:45:33

标签: google-maps-api-3

我有没有办法访问Google通过网络服务提供的流量数据?

似乎有一个GTrafficOverlay将流量置于嵌入式谷歌地图上的路线之上,但没有直接的网络服务,我可以消费,比如,给出来源和目的地并找到流量他们之间?

我可以从其他任何来源获取此数据吗?

10 个答案:

答案 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服务

http://msdn.microsoft.com/en-us/library/hh441725

答案 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是一个全球数据平台,可将车辆和智能手机的匿名位置处理为实时和历史流量统计信息。我们正在使用完全开放源代码的软件,并在越来越多的合作伙伴的参与下,以开放的方式来构建它。