【问题标题】:Using TransitOptions Literal in GoogleMaps DistanceMatrix API在 Google Maps Distance Matrix API 中使用 Transit Options Literal
【发布时间】:2020-01-24 09:39:10
【问题描述】:

美好的一天!

我对 JavaScript 非常陌生,并且因为我认为它可以帮助自动化我正在处理的项目而开始使用它。本质上,我正在绘制两个巴西城市(维多利亚和弗洛里亚纳波利斯)的地图,并寻找一系列点之间的运输时间。 GIS 工具适用于驾驶距离/时间,但这些城市没有交通选择(TravelTime 平台在巴西尚不可用)。

我相信我能做的是利用 Google Maps JavaScript API 和距离矩阵服务来构建一个起点/终点 (O/D) 对数组。我想我已经完成了一些介绍性学习和谷歌地图示例的帮助。我的计划是在整理好这个项目后,用我需要的数字来扩展 Origin 和 Destination 变量。

接下来我想使用 TransitOptions 文字将出发时间始终设置为上午 8 点(即高峰时段)。我不希望数据根据我运行脚本的时间而改变。

附件是我到目前为止的内容,但我 99% 确定我使用的 TransitOptions 不正确:

      <body>
    <div id="right-panel">
      <div id="inputs">
        <pre>
var origin1 = {lat: -27.524, lng: -48.642};
var destinationA = {lat: -27.594, lng: -48.554};
        </pre>
      </div>
      <div>
        <strong>Results</strong>
      </div>
      <div id="output"></div>
    </div>
    <div id="map"></div>
    <script>
    let departurewindow = new Date('2020-03-10T08:00:00')
      function initMap() {
        var bounds = new google.maps.LatLngBounds;
        var markersArray = [];

        var origin1 = {lat: -27.524, lng: -48.642};
        var destinationA = {lat: -27.594, lng: -48.554};
        var destinationIcon = 'https://chart.googleapis.com/chart?' +
            'chst=d_map_pin_letter&chld=D|FF0000|000000';
        var originIcon = 'https://chart.googleapis.com/chart?' +
            'chst=d_map_pin_letter&chld=O|FFFF00|000000';
        var map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -27.50, lng: -48.5},
          zoom: 10
        });
        var geocoder = new google.maps.Geocoder;

        var service = new google.maps.DistanceMatrixService;
        service.getDistanceMatrix({
          origins: [origin1],
          destinations: [destinationA],
          travelMode: 'TRANSIT',
          unitSystem: google.maps.UnitSystem.METRIC,
          avoidHighways: false,
          avoidTolls: false,
          departureTime: departurewindow,
        }, function(response, status) {
          if (status !== 'OK') {
            alert('Error was: ' + status);
          } else {
            var originList = response.originAddresses;
            var destinationList = response.destinationAddresses;
            var outputDiv = document.getElementById('output');
            outputDiv.innerHTML = '';
            deleteMarkers(markersArray);

            var showGeocodedAddressOnMap = function(asDestination) {
              var icon = asDestination ? destinationIcon : originIcon;
              return function(results, status) {
                if (status === 'OK') {
                  map.fitBounds(bounds.extend(results[0].geometry.location));
                  markersArray.push(new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    icon: icon
                  }));
                } else {
                  alert('Geocode was not successful due to: ' + status);
                }
              };
            };

            for (var i = 0; i < originList.length; i++) {
              var results = response.rows[i].elements;
              geocoder.geocode({'address': originList[i]},
                  showGeocodedAddressOnMap(false));
              for (var j = 0; j < results.length; j++) {
                geocoder.geocode({'address': destinationList[j]},
                    showGeocodedAddressOnMap(true));
                outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] +
                    ': ' + results[j].distance.text + ' in ' +
                    results[j].duration.text + '<br>';
              }
            }
          }
        });
      }

      function deleteMarkers(markersArray) {
        for (var i = 0; i < markersArray.length; i++) {
          markersArray[i].setMap(null);
        }
        markersArray = [];
      }
    </script>

【问题讨论】:

    标签: google-maps google-maps-api-3


    【解决方案1】:

    departureTime: 应该是 TransitOptions 对象文字中的字段,而不是 DistanceMatrixRequest 对象文字中的字段。

    var transitOptions = {departureTime: departurewindow};

    service.getDistanceMatrix({
          origins: [origin1],
          destinations: [destinationA],
          travelMode: 'TRANSIT',
          unitSystem: google.maps.UnitSystem.METRIC,
          avoidHighways: false,
          avoidTolls: false,
          transitOptions: transitOptions  
        }, function(response, status) {});
    

    这是上面 sn-p 的sample code

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 2019-09-25
      • 2016-06-08
      • 2023-03-07
      • 1970-01-01
      • 2014-10-08
      • 2017-10-06
      • 2019-10-04
      相关资源
      最近更新 更多