[英]Google Maps API and duration_in_traffic
我正在嘗試了解 DistanceMatrix API。 當我在瀏覽器上執行此操作時:
我得到了 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"
}
但是當我使用地圖 API 在 golang 中使用它時
我沒有得到 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)
遇到了與您相同的問題,對您帖子的編輯解決了我的問題。
為以后可能出現的任何人澄清解決方案 - 問題是我沒有在我的請求中指定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())
}
另一個潛在的問題是,如果沒有流量數據,Google 不會返回 duration_in_traffic。
文件說明:
僅當以下所有條件都為真時才返回流量持續時間:
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.