Можно ли получить только пешеходную прогулку в API Google Directions? - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в Google Maps и Flutter, и мне было интересно, можно ли получить расстояние и продолжительность ходьбы, когда пользователь вводит пункт назначения.

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

Здесь я использую примеры ответов из документации по направлениям API. https://developers.google.com/maps/documentation/directions/intro#DirectionsResponseElements

class GoogleMapsServices{
  Future<String> getRouteCoordinates()async{
    String url = "https://maps.googleapis.com/maps/api/directions/json? 
origin=Chicago,IL&destination=Los+Angeles,CA 
&waypoints=Joplin,MO|Oklahoma+City,OK &key=$apiKey";

    http.Response response = await http.get(url);
    print (response.body);

    Map values = jsonDecode(response.body);
    return values["routes"][0]["overview_polyline"]["points"];

  }

}

В настоящее время у меня есть эти коды и, глядя на response.body, я могу получить все время прибытия и т. Д., Но не расстояние и продолжительность ходьбы до автобусных остановок иот автобусных остановок. Возможно ли это сделать?

Я получаю эти результаты, когда печатаю response.body

I/flutter (23129): {
I/flutter (23129):    "geocoded_waypoints" : [
I/flutter (23129):       {
I/flutter (23129):          "geocoder_status" : "OK",
I/flutter (23129):          "place_id" : "ChIJ7cv00DwsDogRAMDACa2m4K8",
I/flutter (23129):          "types" : [ "locality", "political" ]
I/flutter (23129):       },
I/flutter (23129):       {
I/flutter (23129):          "geocoder_status" : "OK",
I/flutter (23129):          "place_id" : "ChIJ69Pk6jdlyIcRDqM1KDY3Fpg",
I/flutter (23129):          "types" : [ "locality", "political" ]
I/flutter (23129):       },
I/flutter (23129):       {
I/flutter (23129):          "geocoder_status" : "OK",
I/flutter (23129):          "place_id" : "ChIJgdL4flSKrYcRnTpP0XQSojM",
I/flutter (23129):          "types" : [ "locality", "political" ]
I/flutter (23129):       },
I/flutter (23129):       {
I/flutter (23129):          "geocoder_status" : "OK",
I/flutter (23129):          "place_id" : "ChIJE9on3F3HwoAR9AhGJW_fL-I",
I/flutter (23129):          "types" : [ "locality", "political" ]
I/flutter (23129):       }
I/flutter (23129):    ],
I/flutter (23129):    "routes" : [
I/flutter (23129):       {
I/flutter (23129):          "bounds" : {
I/flutter (23129):             "northeast" : {
I/flutter (23129):                "lat" : 41.8781139,
I/flutter (23129):                "lng" : -87.6297872
I/flutter (23129):             },
I/flutter (23129):             "southwest" : {
I/flutter (23129):                "lat" : 34.0523523,
I/flutter (23129):                "lng" : -118.2435731
I/flutter (23129):             }
I/flutter (23129):          },
I/flutter (23129):          "copyrights" : "Map data ©2019 Google, INEGI",
I/flutter (23129):          "legs" : [
I/flutter (23129):             {
I/flutter (23129):      

Спасибо.

1 Ответ

2 голосов
/ 10 ноября 2019

В своем обновленном вопросе вы сказали, что запрашиваете TRANSIT направления из Чикаго в Лос-Анджелес. Это будет , а не , включая пешеходные маршруты, потому что для такого рода запросов API рассматривает автобусную / железнодорожную станцию ​​как пункт отправления и назначения в обоих городах.

Если вы ввели точный адрес, хотяили координаты (вдали от станций отправления / прибытия), скорее всего, они будут включать WALKING шагов:

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

function initialize() {

  var directionsService = new google.maps.DirectionsService();
  var directionsDisplay = new google.maps.DirectionsRenderer();
  var center = new google.maps.LatLng(0, 0);
  var myOptions = {
    zoom: 7,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: center
  }

  var map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
  directionsDisplay.setMap(map);

  var start = "41.925704, -87.634690";
  var end = "34.021617, -118.355122";
  var method = 'TRANSIT';
  var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.DirectionsTravelMode[method]
  };

  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      console.log(response);
      directionsDisplay.setDirections(response);

      // Show first step
      $('.steps').append('<li>1. Distance: ' + response.routes[0].legs[0].steps[0].distance.text + '<br>Instructions: ' + response.routes[0].legs[0].steps[0].instructions + '<br>Travel mode: ' + response.routes[0].legs[0].steps[0].travel_mode + '</li>');
      
      var lastStep = response.routes[0].legs[0].steps.length -1;
      // Show last step
      $('.steps').append('<li>' + lastStep + '. Distance: ' + response.routes[0].legs[0].steps[lastStep].distance.text + '<br>Instructions: ' + response.routes[0].legs[0].steps[lastStep].instructions + '<br>Travel mode: ' + response.routes[0].legs[0].steps[lastStep].travel_mode + '</li>');
    }
  });

}
#map-canvas {
  height: 200px;
}

li {
  margin-bottom: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="//maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initialize">
</script>

<ul class="steps"></ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...