Я пытаюсь понять 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 карт
Я не получаю 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)
Я использовал это (github.com/googlemaps/google-maps-services-go/blob/master/…). Отредактировал его, чтобы принять ввод через REST
Где вы устанавливаете ключ API в своем коде? Продолжительность в трафике будет отображаться только для запросов с ключом API.





Столкнулся с той же проблемой, что и вы, и редактирование вашего сообщения решило мою проблему.
Чтобы прояснить решение для всех, кто может прийти позже, проблема заключалась в том, что я не указывал 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 duration in traffic is returned only if all of the following are true:
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.
Опубликуйте код, который вы пытались демаршалировать JSON на карту, используя golang.