使用Google Directions API的动态路线

时间:2014-03-22 16:45:00

标签: javascript google-maps google-maps-api-3 map directions

最初我在地图上有两个点。其中一个是出身,另一个是目的地。

当目的地固定时,原点可以拖动。

在页面加载后第一次绘制地图时,我有一些默认值为origin,而目标点从database获取值.Initial Loading工作正常。我能够在起点和终点之间画出路线。

我使用以下功能在地图上绘制路线

function calcRoute() {
  var request = {
      origin:myLatLng1,
      destination:myLatLng,
      optimizeWaypoints: true,
      travelMode: google.maps.TravelMode.DRIVING
  };
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
    }
  });
}

现在,只要我的原点标记被拖动,我就会有一个事件监听器,它会获得orign标记新位置的新latlong,然后我调用上面相同的函数来获取新路径。

function togglePos(){
    myLatLng1 = new google.maps.LatLng(marker1.getPosition());
    calcRoute();
}

这是我遇到问题的地方,我无法在新标记的原点和同一个旧目的地之间重新绘制新路线。 如果any1需要它,这是我的初始化函数。

function initialize() {
    var mapOptions = {
        zoom: 13,
        center: myLatLng
    };
    map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);

    directionsDisplay.setMap(map);

    var image = 'myimage.png';

    marker = new google.maps.Marker({
          position: myLatLng,
          map: map,
          icon: image,
    });
    marker1 = new google.maps.Marker({
          position: myLatLng1,
          map: map,
          draggable: true
    });
    google.maps.event.addListener(marker1, 'dragend', togglePos);

    calcRoute();
}

我没有收到任何javascript错误。 我正在建立这样的东西。
https://developers.google.com/maps/documentation/javascript/examples/directions-simple

但是不是从下拉框中选择它,而是在移动标记时调用该函数。

小提琴链接:http://jsfiddle.net/FvqAL/4/ 但我不知道为什么它不适合小提琴:|

1 个答案:

答案 0 :(得分:1)

我对calc路线进行了一些更改,现在无论何时调用它,它都会获得marker1位置并通过它绘制路线。

function calcRoute() {
  var request = {
      origin:marker1.getPosition(),
      destination:myLatLng,
      optimizeWaypoints: true,
      travelMode: google.maps.TravelMode.DRIVING
  };
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
    }
  });
}

如果你想查看它,这是最终的fiddle。 感谢您的帮助:)