Транзит Google Directions API всегда возвращает "ZERO_RESULTS"

Я занимаюсь разработкой приложения, которое использует Google API для получения транспортного решения для достижения местоположения в нужное время.

Мой код, который вызывает google API, прекрасно работает с режимами "вождение" и "ходьба", но с "транзитом" и "ездой на велосипеде" ответ всегда помечается статусом "ZERO_RESULTS" ​​и маршруты не рассчитываются. Это, согласно документации Google, означает, что транзит и езда на велосипеде недоступны в стране, где необходимо рассчитать решение. Я пробовал с несколькими странами, и у меня всегда был один и тот же результат, я пробовал также с примером Google (для транзита) в обзоре, и он не работает.

Параметры, которые я передаю с запросом HTTPS: источник, пункт назначения, режим путешествия, время прибытия. Первое, что я попробовал, это изменить время прибытия, если значение относится к прошлому или слишком отдаленному будущему, но это не работает.

В случае, если я не передаю "Arrival_Time", ответ является идеальным, но я не понимаю, потому что в Документации Google ясно, что Arrival_Time является возможным аргументом запроса https также с режимом транзитного путешествия. Без этого аргумента запрос бесполезен для моей цели.

Любопытно, что, если я пройду "транзит" (со временем прибытия или отправления), ответ будет таким:

{
   "available_travel_modes" : [ "DRIVING", "WALKING" ],
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJu46S-ZZhLxMROG5lkwZ3D7k",
         "types" : [ "locality", "political" ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJ53USP0nBhkcRjQ50xhPN_zw",
         "types" : [ "locality", "political" ]
      }
   ],
   "routes" : [],
   "status" : "ZERO_RESULTS"
}

И если я прохожу "велосипед" (со всеми остальными параметрами без изменений):

{
   "available_travel_modes" : [ "DRIVING", "WALKING", "TRANSIT" ],
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJu46S-ZZhLxMROG5lkwZ3D7k",
         "types" : [ "locality", "political" ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJ53USP0nBhkcRjQ50xhPN_zw",
         "types" : [ "locality", "political" ]
      }
   ],
   "routes" : [],
   "status" : "ZERO_RESULTS"
}

Таким образом, во втором случае API сказал, что TRANSIT доступен, и это не имеет никакого смысла вообще!

Формат местоположения, которое я использую, - это географические координаты, чтобы избежать случаев двусмысленности.

Надеюсь, что я дам достаточно информации, чтобы ты смогла мне помочь.

РЕДАКТИРОВАТЬ: извините, я думал, что мой пост был достаточно ясным. Я использую Google Directions API: https://developers.google.com/maps/documentation/directions/

Моя проблема связана с "транзитом" и "ездой на велосипеде" в качестве режима путешествия, и это не проблема кода, но проблема возникает на уровне ответа https, даже с примером Google для "транзита", который можно найти в обзоре, который я получаю ответ "ZERO_RESULTS". Это URL примера:

https://maps.googleapis.com/maps/api/directions/json?origin=75+9th+Ave+New+York,+NY&destination=MetLife+Stadium+1+MetLife+Stadium+Dr+East+Rutherford,+NJ+07073&mode=transit&arrival_time=1391374800&key=YOUR_API_KEY

И вот два URL, которые дают мне два ответа, которые я скопировал выше: с транзитом:

https://maps.googleapis.com/maps/api/directions/json?origin=Rome&destination=Milan&mode=transit&arrival_time=1513162800000&key=++API_KEY++

и с велосипедом:

https://maps.googleapis.com/maps/api/directions/json?origin=Rome&destination=Milan&mode=transit&arrival_time=1513162800000&key=++API_KEY++

в коде, который я использую для географических координат отправления и назначения, как здесь:

https://maps.googleapis.com/maps/api/directions/json?origin=41.9027835,12.496365500000024&destination=45.4642035,9.189981999999986&mode=transit&arrival_time=1513162800000&key=++API_KEY++

единственное отличие состоит в том, что Google не распознает геокодированные путевые точки:

{
   "available_travel_modes" : [ "DRIVING", "WALKING" ],
   "geocoded_waypoints" : [ {}, {} ],
   "routes" : [],
   "status" : "ZERO_RESULTS"
}

Если я использую "вождение" в качестве режима путешествия, это работает:

https://maps.googleapis.com/maps/api/directions/json?origin=41.9027835,12.496365500000024&destination=45.4642035,9.189981999999986&mode=driving&arrival_time=1513162800000&key=++API_KEY++

{
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "EjJQaWF6emEgZGVsbGEgUmVwdWJibGljYSwgMTAsIDAwMTg1IFJvbWEgUk0sIEl0YWxpYQ",
         "types" : [ "street_address" ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJC5u9LazGhkcRXAZQFNDTpKc",
         "types" : [ "street_address" ]
      }
   ],
   "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 45.4731019,
               "lng" : 12.6177051
            },
            "southwest" : {
               "lat" : 41.9028523,
               "lng" : 9.1839517
            }
         },
         "copyrights" : "Dati mappa ©2017 Google",
         "legs" : [
            {
               "distance" : {
                  "text" : "573 km",
                  "value" : 572600
               },
               "duration" : {
                  "text" : "5 ore 51 min",
                  "value" : 21069
               },
               "end_address" : "Via Silvio Pellico, 2, 20121 Milano MI, Italia",
               "end_location" : {
                  "lat" : 45.46495119999999,
                  "lng" : 9.1892874
               },
               "start_address" : "Piazza della Repubblica, 10, 00185 Roma RM, Italia",
               "start_location" : {
                  "lat" : 41.9028523,
                  "lng" : 12.4964704
               },
               "steps" : [
                  {
                     "distance" : {
                        "text" : "93 m",
                        "value" : 93
                     },
                     "duration" : {
                        "text" : "1 min",
                        "value" : 19
                     },
                     "end_location" : {
                        "lat" : 41.9035781,
                        "lng" : 12.4959908
                     },
                     "html_instructions" : "Procedi in direzione \u003cb\u003enord\u003c/b\u003e da \u003cb\u003ePiazza della Repubblica\u003c/b\u003e verso \u003cb\u003eVia Giuseppe Romita\u003c/b\u003e",
                     "polyline" : {
                        "points" : "ycw~F}ugkAU?I@E@E@a@RG@EDED_@d@OP"
                     },
                     "start_location" : {
                        "lat" : 41.9028523,
                        "lng" : 12.4964704
                     },
                     "travel_mode" : "DRIVING"
                  },
                  // cut
                  {
                     "distance" : {
                        "text" : "52 m",
                        "value" : 52
                     },
                     "duration" : {
                        "text" : "1 min",
                        "value" : 14
                     },
                     "end_location" : {
                        "lat" : 45.4665738,
                        "lng" : 9.1889772
                     },
                     "html_instructions" : "Continua su \u003cb\u003eVia Santa Margherita\u003c/b\u003e",
                     "polyline" : {
                        "points" : "ogotGoxaw@`@`@j@h@"
                     },
                     "start_location" : {
                        "lat" : 45.4669622,
                        "lng" : 9.189359399999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : {
                        "text" : "0,2 km",
                        "value" : 192
                     },
                     "duration" : {
                        "text" : "1 min",
                        "value" : 87
                     },
                     "end_location" : {
                        "lat" : 45.46495119999999,
                        "lng" : 9.1892874
                     },
                     "html_instructions" : "Svolta a \u003cb\u003esinistra\u003c/b\u003e e prendi \u003cb\u003eVia Silvio Pellico\u003c/b\u003e",
                     "maneuver" : "turn-left",
                     "polyline" : {
                        "points" : "aeotGcvaw@Xw@DCBAxC@~A?d@A"
                     },
                     "start_location" : {
                        "lat" : 45.4665738,
                        "lng" : 9.1889772
                     },
                     "travel_mode" : "DRIVING"
                  }
               ],
               "traffic_speed_entry" : [],
               "via_waypoint" : []
            }
         ],
         "overview_polyline" : {
            "points" : "//collapsed//"
         },
         "summary" : "A1/E35 e A1",
         "warnings" : [],
         "waypoint_order" : []
      }
   ],
   "status" : "OK"
}

и если я использую "транзит" без времени прибытия, это работает:

 https://maps.googleapis.com/maps/api/directions/json?origin=41.9027835,12.496365500000024&destination=45.4642035,9.
189981999999986&mode=transit&key=++API_KEY++

а также:

{
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "EjJQaWF6emEgZGVsbGEgUmVwdWJibGljYSwgMTAsIDAwMTg1IFJvbWEgUk0sIEl0YWxpYQ",
         "types" : [ "street_address" ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJRYxePKzGhkcRsgPwamn2Pfo",
         "types" : [ "street_address" ]
      }
   ],
   "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 45.4969308,
               "lng" : 12.5528041
            },
            "southwest" : {
               "lat" : 41.892252,
               "lng" : 9.188611
            }
         },
         "copyrights" : "Dati mappa ©2017 Google",
         "legs" : [
            {
               "arrival_time" : {
                  "text" : "13:55",
                  "time_zone" : "Europe/Rome",
                  "value" : 1513169733
               },
               "departure_time" : {
                  "text" : "10:10",
                  "time_zone" : "Europe/Rome",
                  "value" : 1513156231
               },
               "distance" : {
                  "text" : "571 km",
                  "value" : 571467
               },
               "duration" : {
                  "text" : "3 ore 45 min",
                  "value" : 13502
               },
               "end_address" : "Piazza del Duomo, 1, 20121 Milano MI, Italia",
               "end_location" : {
                  "lat" : 45.4639037,
                  "lng" : 9.188611
               },
               "start_address" : "Piazza della Repubblica, 10, 00185 Roma RM, Italia",
               "start_location" : {
                  "lat" : 41.9028429,
                  "lng" : 12.4964793
               },
               "steps" : [
                  {
                     "distance" : {
                        "text" : "0,1 km",
                        "value" : 102
                     },
                     "duration" : {
                        "text" : "1 min",
                        "value" : 87
                     },
                     "end_location" : {
                        "lat" : 41.902193,
                        "lng" : 12.4958041
                     },
                     "html_instructions" : "Cammina fino a Repubblica",
                     "polyline" : {
                        "points" : "wcw~F_vgkA@CBADABA@A@?B?D?B?B@B?B@BBB@@BBBDH@D@H@@?D?BDRBL?@DXBLBJDHBFVM"
                     },
                     "start_location" : {
                        "lat" : 41.9028429,
                        "lng" : 12.4964793
                     },
                     "steps" : [
                        {
                           "distance" : {
                              "text" : "54 m",
                              "value" : 54
                           },
                           "duration" : {
                              "text" : "1 min",
                              "value" : 49
                           },
                           "end_location" : {
                              "lat" : 41.9024775,
                              "lng" : 12.4962611
                           },
                           "html_instructions" : "Procedi in direzione \u003cb\u003esudest\u003c/b\u003e verso \u003cb\u003ePiazza della Repubblica\u003c/b\u003e",
                           "polyline" : {
                              "points" : "wcw~F_vgkA@CBADABA@A@?B?D?B?B@B?B@BBB@@BBBDH@D@H@@?D?B"
                           },
                           "start_location" : {
                              "lat" : 41.9028429,
                              "lng" : 12.4964793
                           },
                           "travel_mode" : "WALKING"
                        },
                        {
                           "distance" : {
                              "text" : "48 m",
                              "value" : 48
                           },
                           "duration" : {
                              "text" : "1 min",
                              "value" : 38
                           },
                           "end_location" : {
                              "lat" : 41.902193,
                              "lng" : 12.4958041
                           },
                           "html_instructions" : "Esci dalla rotonda e prendi \u003cb\u003ePiazza della Repubblica\u003c/b\u003e",
                           "polyline" : {
                              "points" : "oaw~FstgkADRBL?@DXBLBJDHBFVM"
                           },
                           "start_location" : {
                              "lat" : 41.9024775,
                              "lng" : 12.4962611
                           },
                           "travel_mode" : "WALKING"
                        }
                     ],
                     "travel_mode" : "WALKING"
                  },
                  {
                     "distance" : {
                        "text" : "0,4 km",
                        "value" : 437
                     },
                     "duration" : {
                        "text" : "1 min",
                        "value" : 46
                     },
                     "end_location" : {
                        "lat" : 41.9011732,
                        "lng" : 12.4996019
                     },
                     "html_instructions" : "Metropolitana verso Anagnina",
                     "polyline" : {
                        "points" : "u_w~FwqgkAeBIBoA@I|ByM~CmELR"
                     },
                     "start_location" : {
                        "lat" : 41.902193,
                        "lng" : 12.4958041
                     },
                     "transit_details" : {
                        "arrival_stop" : {
                           "location" : {
                              "lat" : 41.9011732,
                              "lng" : 12.4996019
                           },
                           "name" : "Termini"
                        },
                        "arrival_time" : {
                           "text" : "10:12",
                           "time_zone" : "Europe/Rome",
                           "value" : 1513156353
                        },
                        "departure_stop" : {
                           "location" : {
                              "lat" : 41.902193,
                              "lng" : 12.4958041
                           },
                           "name" : "Repubblica"
                        },
                        "departure_time" : {
                           "text" : "10:11",
                           "time_zone" : "Europe/Rome",
                           "value" : 1513156307
                        },
                        "headsign" : "Anagnina",
                        "line" : {
                           "agencies" : [
                              {
                                 "name" : "Atac",
                                 "phone" : "011 39 06 57003",
                                 "url" : "http://www.atac.roma.it/"
                              }
                           ],
                           "color" : "#e27439",
                           "name" : "Metro A",
                           "short_name" : "MEA",
                           "url" : "http://muovi.roma.it/percorso/js?query=MEA&cl=1",
                           "vehicle" : {
                              "icon" : "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png",
                              "local_icon" : "//maps.gstatic.com/mapfiles/transit/iw2/6/it-metro.png",
                              "name" : "Metropolitana",
                              "type" : "SUBWAY"
                           }
                        },
                        "num_stops" : 1
                     },
                     "travel_mode" : "TRANSIT"
                  },

                  {
                     "distance" : {
                        "text" : "2,6 km",
                        "value" : 2641
                     },
                     "duration" : {
                        "text" : "6 min",
                        "value" : 330
                     },
                     "end_location" : {
                        "lat" : 45.4639037,
                        "lng" : 9.188611
                     },
                     "html_instructions" : "Metropolitana verso San Donato",
                     "polyline" : {
                        "points" : "//collapsed//"
                     },
                     "start_location" : {
                        "lat" : 45.4844397,
                        "lng" : 9.202612799999999
                     },
                     "transit_details" : {
                        "arrival_stop" : {
                           "location" : {
                              "lat" : 45.4639037,
                              "lng" : 9.188611
                           },
                           "name" : "Duomo"
                        },
                        "arrival_time" : {
                           "text" : "13:55",
                           "time_zone" : "Europe/Rome",
                           "value" : 1513169730
                        },
                        "departure_stop" : {
                           "location" : {
                              "lat" : 45.4844397,
                              "lng" : 9.202612799999999
                           },
                           "name" : "Centrale FS"
                        },
                        "departure_time" : {
                           "text" : "13:50",
                           "time_zone" : "Europe/Rome",
                           "value" : 1513169400
                        },
                        "headsign" : "San Donato",
                        "line" : {
                           "agencies" : [
                              {
                                 "name" : "COMUNE DI MILANO",
                                 "phone" : "011 39 02 0202",
                                 "url" : "http://www.muoversi.milano.it/"
                              }
                           ],
                           "color" : "#ffea00",
                           "name" : "M3 - Linea Gialla",
                           "short_name" : "3",
                           "vehicle" : {
                              "icon" : "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png",
                              "local_icon" : "//maps.gstatic.com/mapfiles/transit/iw2/6/it-metro.png",
                              "name" : "Metropolitana",
                              "type" : "SUBWAY"
                           }
                        },
                        "num_stops" : 4
                     },
                     "travel_mode" : "TRANSIT"
                  }
               ],
               "traffic_speed_entry" : [],
               "via_waypoint" : []
            }
         ],
         "overview_polyline" : {
            "points" : "//collapsed//"
         },
         "summary" : "",
         "warnings" : [
            "Le indicazioni per tragitti a piedi sono in versione beta. Presta attenzione – questo percorso potrebbe non disporre di marciapiede o aree pedonali."
         ],
         "waypoint_order" : []
      }
   ],
   "status" : "OK"
}

Надеюсь, это будет более понятно.

Благодарю вас

3 ответа

Решение

Проблема в вашем запросе - это значение, которое вы передаете как arrival_time параметр. Обратите внимание, что это значение должно быть в секундах:

прибытие - указывает желаемое время прибытия для транзитных направлений в секундах с полуночи 1 января 1970 года по Гринвичу. Вы можете указать время отправления или прибытия, но не оба сразу. Обратите внимание, что прибытие должно быть указано как целое число.

https://developers.google.com/maps/documentation/directions/intro

Вы проходите миллисекунды 1513162800000 что соответствует 03/22/49920 @ 8:00am (UTC), правильное значение 1513162800 что соответствует 12/13/2017 @ 11:00am (UTC),

Запрос должен быть:

https://maps.googleapis.com/maps/api/directions/json?origin=41.9027835%2C12.496365500000024&destination=45.4642035%2C9.189981999999986&mode=transit&arrival_time=1513162800&key=YOUR_API_KEY

Тот же запрос в калькуляторе направлений:

https://directionsdebug.firebaseapp.com/?origin=41.9027835%2C12.496365500000024&destination=45.4642035%2C9.189981999999986&mode=transit&arrival_time=1513162800

Надеюсь, это поможет!

В случае, если это поможет кому-то еще, я также обнаружил, что установка departure_timeслишком далеко в будущем (более года в моем случае) привело к ответу «ZERO_RESULTS». Приближение к настоящему исправило это.

      need help
I'm creating an app xamarin forms, which consumes api from google maps and when I try to get a route I'm taking an error:
{
   "geocoded_waypoints": [{}, {}],enter code here
   "routes": [],`enter code here`
   "status": "ZERO_RESULTS"
} when I pass the rounds with a dot:
https://maps.googleapis.coenter code herem/maps/api/directions/json?mode=driving&transit_routing_preference=less_driving&origin=-22.8735905,43.2974482&destination=-22.8693246,-43.3026428&key=YOUR_API_KEY

and this when I try to consume with the coordinates separated by ","
URL:

{
   "geocoded_waypoints": [
      {
         "geocoder_status": "ZERO_RESULTS"
      },
      {
         "geocoder_status": "ZERO_RESULTS"
      }
   ],
   "routes": [],
   "status": "NOT_FOUND"
}

Follows source code

  public async Task<GoogleDirection> GetDirections(string originLatitude, string originLongitude, string destinationLatitude, string destinationLongitude)
        {
            GoogleDirection googleDirection = new GoogleDirection();

            using (var httpClient = CreateClient())
            {
                var response = await httpClient.GetAsync($"api/directions/json?mode=driving&transit_routing_preference=less_driving&origin={originLatitude},{originLongitude}&destination={destinationLatitude},{destinationLongitude}&key={_googleMapsKey}").ConfigureAwait(false);
                if (response.IsSuccessStatusCode)
                {
                    var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                    if (!string.IsNullOrWhiteSpace(json))
                    {
                        googleDirection = await Task.Run(() =>
                           JsonConvert.DeserializeObject<GoogleDirection>(json)
                        ).ConfigureAwait(false);

                    }
                }
            }

            return googleDirection;
Другие вопросы по тегам