Javascript 谷歌交通地图上的可拖动标记

Javascript 谷歌交通地图上的可拖动标记,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我试图使用谷歌地图创建公交地图(带有公交/地铁指示),但当我从输入中创建“开始”和“结束”标记(带有自动完成地址)时,无法拖动任何标记,尽管设置了拖动选项为真 将travelMode选项更改为google.maps.travelMode.DRIVINGdraggin'已启用。将此属性返回到google.maps.TravelMode.TRANSITdaggin'将返回禁用状态 有办法解决这个问题吗 代码: var directionsService; var directionsDisp

我试图使用谷歌地图创建公交地图(带有公交/地铁指示),但当我从输入中创建“开始”和“结束”标记(带有自动完成地址)时,无法拖动任何标记,尽管设置了
拖动
选项为

travelMode
选项更改为
google.maps.travelMode.DRIVING
draggin'已启用。将此属性返回到
google.maps.TravelMode.TRANSIT
daggin'将返回禁用状态

有办法解决这个问题吗

代码:

  var directionsService;
  var directionsDisplay;

  function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 14,
      center: {lat: -32.89, lng: -68.845}  // Mendoza.
    });

    directionsService = new google.maps.DirectionsService;
    directionsDisplay = new google.maps.DirectionsRenderer({
      draggable: true,
      map: map,
      panel: document.getElementById('right-panel')
    });

    directionsDisplay.addListener('directions_changed', function() {
      var addresses = directionsDisplay.getDirections().routes[0].legs[0];
      document.getElementById('from').value = addresses.start_address;
      document.getElementById('to').value = addresses.end_address;
    });
    google.maps.event.addDomListener(document.getElementById('go'), 'click', displayRoute);

    var input_from = document.getElementById('from');
    var autocomplete = new google.maps.places.Autocomplete(input_from);
    autocomplete.bindTo('bounds', map);

    var input_to = document.getElementById('to');
    var autocomplete = new google.maps.places.Autocomplete(input_to);
    autocomplete.bindTo('bounds', map);

    displayRoute();
  }

  function displayRoute() {
    directionsService.route({
      origin: document.getElementById('from').value,
      destination: document.getElementById('to').value,
      //travelMode: google.maps.TravelMode.DRIVING,
      travelMode: google.maps.TravelMode.TRANSIT
    }, function(response, status) {
      if (status === google.maps.DirectionsStatus.OK) {
        console.log(response);
        directionsDisplay.setDirections(response);
      } else {
        alert('Could not display directions due to: ' + status);
      }
    });
  }      

  google.maps.event.addDomListener(window, 'load', initMap);
不幸的是,“可拖动”模式不适用于公交出行模式。刚才我在想办法,顺便问一下你的问题

编辑

正如谷歌文档所说:

用户可以修改显示的自行车、步行或驾驶方向 如果可拖动,则动态使用DirectionsRenderer,允许 用户可以通过单击并拖动来选择和更改路线 地图上的结果路径。您可以指示渲染器的显示 通过将其draggable属性设置为true,允许拖动方向。 运输方向不能设置为可拖动。

请在此处查看:

我们必须找到另一种方法。。。如果我找到它,我会让你知道,如果你先找到它,如果你告诉我,我将不胜感激。

我找到的“解决方案”(hack),使用尝试和错误,是为了防止显示API创建的标记:

var directionsDisplay = new m.DirectionsRenderer({
    suppressMarkers: true, // Supressing the default markers
    map: map,

    // another options...

});
并实现我自己的功能来显示标记:

function placeMarker(e, t) {
    t < 2 && (markers[t] = new m.Marker({
        position: e,
        draggable: true,  // YES! It's draggable!
        map: map
    }), m.event.addListener(markers[t], "dragend", function() {
        geocodePosition(markers[t].getPosition(), t);
    }), markers[t].setVisible(true), geocodePosition(markers[t].getPosition(), t), arrangeBounds());
}
功能定位标记(e,t){
t<2&(标记[t]=新的m.标记({
职位:e,
可拖动:是的,//是的!可拖动!
地图:地图
}),m.event.addListener(标记[t],“dragend”,函数(){
地理编码定位(标记[t].getPosition(),t);
}),markers[t].setVisible(true),geocodePosition(markers[t].getPosition(),t),arrangeBounds());
}

然后,标记可以使用谷歌交通地图拖动。。。解决方案已经晚了,但我希望不是最不重要的。

您如何添加标记?请提供一个例子来说明这个问题。@geocodezip我将使用过的代码添加到了答案中。谢谢。那么这些标记是默认的方向渲染器标记?我可以理解为什么谷歌可能不让这些可拖动,你可能需要添加你自己的带有dragend侦听器的可拖动标记,以便在它们移动时重新计算方向。@geocodezip标记将是DirectionRenderer标记,将
travelMode
更改为
google.maps.travelMode.DRIVING
(注释代码行)标记可以移动。。。我不明白为什么在
TRANSIT
时标记是不可拆卸的。