【问题标题】:Google Maps API and duration_in_trafficGoogle Maps API 和 duration_in_traffic
【发布时间】:2019-01-05 05:30:21
【问题描述】:

我正在尝试了解 DistanceMatrix API。当我在浏览器上执行此操作时:

https://maps.googleapis.com/maps/api/distancematrix/json?origins=14.614786,121.046587&destinations=14.610301,121.080233&mode=driving&language=en&departure_time=now&key=MY_KEY

我得到了 duration_in_traffic。

{
   "destination_addresses" : [
      "17 Orchard Rd, Bagumbayan, Quezon City, 1109 Metro Manila, Philippines"
   ],
   "origin_addresses" : [ "74 C. Benitez St, Quezon City, Metro Manila, Philippines" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "8.5 km",
                  "value" : 8470
               },
               "duration" : {
                  "text" : "23 mins",
                  "value" : 1406
               },
               "duration_in_traffic" : {
                  "text" : "35 mins",
                  "value" : 2112
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

但是当我在 golang 中使用地图 API 时

我没有得到 duration_in_traffic 并且只返回 null

    r := &maps.DistanceMatrixRequest{
    Language:      *language,
    DepartureTime: "now",
    ArrivalTime:   *arrivalTime,
}

下面是结果

{
    "origin_addresses": [
        "74 C. Benitez St, Quezon City, Metro Manila, Philippines"
    ],
    "destination_addresses": [
        "17 Orchard Rd, Bagumbayan, Quezon City, 1109 Metro Manila, Philippines"
    ],
    "rows": [
        {
            "elements": [
                {
                    "status": "OK",
                    "distance": {
                        "text": "8.5 km",
                        "value": 8470
                    },
                    "duration": {
                        "value": 1406,
                        "text": "23m26s"
                    },
                    "duration_in_traffic": null
                }
            ]
        }
    ]
}

我做错了什么?

编辑:

    r := &maps.DistanceMatrixRequest{
    Origins:       strings.Split(origins, "|"),
    Destinations:  strings.Split(destinations, "|"),
    Language:      "en",
    DepartureTime: "now",
    Mode:          maps.TravelModeDriving,
    Units:         maps.UnitsMetric,
}

resp, err := client.DistanceMatrix(context.Background(), r)
if err != nil {
    return c.JSON(http.StatusBadRequest, err)
}

return c.JSON(http.StatusOK, resp)

【问题讨论】:

标签: google-maps go google-distancematrix-api


【解决方案1】:

另一个潜在的问题是,如果 Google 没有流量数据,它不会返回 duration_in_traffic。

Documentation states:

仅当满足以下所有条件时,才会返回流量持续时间 真的:

The request includes a departure_time parameter.
The request includes a valid API key, or a valid Google Maps Platform Premium Plan client ID and signature.
Traffic conditions are available for the requested route.
The mode parameter is set to driving.

【讨论】:

    【解决方案2】:

    遇到了和你一样的问题,对你帖子的编辑解决了我的问题。

    为以后可能出现的任何人澄清解决方案 - 问题是我没有在我的请求中指定 DepartureTime

    如果您在 DepartureTime 注释掉的情况下运行以下代码,它会打印:

    go run traffic.go 
    Duration in minutes: 0.000000
    

    但是在请求中指定了DepartureTime: "now",它给出了:

    go run traffic.go 
    Duration in minutes: 135.966667
    

    这是完整的工作示例的样子。

    package main
    
    import (
        "fmt"
        "log"
    
        "golang.org/x/net/context"
        "googlemaps.github.io/maps"
    )
    
    func main() {
        c, err := maps.NewClient(maps.WithAPIKey("my-api-key-here"))
        if err != nil {
            log.Fatalf("fatal error: %s", err)
        }
        r := &maps.DistanceMatrixRequest{
            Origins:      []string{"Newark, DE"},
            Destinations: []string{"Charles Town, WV"},
            Units:        maps.UnitsImperial,
            Language:     "en",
            // Must specify DepartureTime in order to get DurationInTraffic in response
            DepartureTime: "now",
        }
        route, err := c.DistanceMatrix(context.Background(), r)
    
        if err != nil {
            log.Fatalf("fatal error: %s", err)
        }
    
        fmt.Printf("Duration in minutes: %f\n", route.Rows[0].Elements[0].DurationInTraffic.Minutes())
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多