API Карт Google и duration_in_traffic

Я пытаюсь понять 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"
}

Но когда он у меня в голанге с помощью 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)

Опубликуйте код, который вы пытались демаршалировать JSON на карту, используя golang.

Himanshu 28.07.2018 09:13

Я использовал это (github.com/googlemaps/google-maps-services-go/blob/master/…‌). Отредактировал его, чтобы принять ввод через REST

Gus 28.07.2018 09:30

Где вы устанавливаете ключ API в своем коде? Продолжительность в трафике будет отображаться только для запросов с ключом API.

xomena 30.07.2018 20:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
874
2

Ответы 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())
}

Еще одна потенциальная проблема заключается в том, что 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.

Другие вопросы по теме