2015-06-01 3 views
2

Привет, Я пытаюсь спланировать маршрут из информационного окна, но я не могу удалить предыдущий заданный маршрут. Я попробовал setMap (null), но это не работало . Я использую обратный вызов для прослушивателя событий, поскольку мне нужно передать параметр, который возвращается из вызова api. Один из вариантов - использовать новый google.maps.map для каждого события, например (link), но маркер уже размещен, когда страница загружается.Удалить все маршруты Маршрут Google Maps

element = document.getElementById('map-canvas'); 
map = new google.maps.Map(element, options); 
var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(car.lat, car.long), 
    map: map, 
    title: car.make 
}); 
google.maps.event.addListener(marker, 'click', directionsCallback(car)); 
function directionsCallback(car) { 
    return function (e) { 
     if(infowindow != null) { 
      infowindow.close(); 
     } 
     var directionsService = new google.maps.DirectionsService(); 
     directionsDisplay = new google.maps.DirectionsRenderer(); 
     directionsDisplay.setMap(null); 
     console.log(directionsDisplay); 
     calcRoute = function(){ 
      var startPoint = document.getElementById('clientAddress').value; 
      var finishPoint = new google.maps.LatLng(car.lat, car.long); 
      var request = { 
       origin: startPoint, 
       destination: finishPoint, 
       travelMode: google.maps.TravelMode.DRIVING 
      }; 
      directionsService.route(request, function (response, status) { 
       if (status == google.maps.DirectionsStatus.OK) { 
        directionsDisplay.setMap(map); 
        directionsDisplay.setDirections(response); 
        console.log(directionsDisplay) 
        console.log(response.routes.length) 
        infowindow.close(); 
       } 
       else{ 
        alert('Sorry ! ' + givenAddress + ' not recognized') 
       } 
      }); 
     } 
     infowindow = new google.maps.InfoWindow(); 
     infowindow.setContent("\n" 
      + 'Directions to here : <input id = \'clientAddress\'  placeholder=\"Postcode or City\" type=\'text\'>' 
      + ' <input type=\'button\' onClick=calcRoute() value=\'Go!\'>') 
     infowindow.open(map, this); 


    } 
} 

ответ

6

определяют directionsDisplay только один раз (за пределами click -handler)

+0

Большое спасибо, это работает. Не могли бы вы объяснить, почему это сработало? Был ли я рендерингом driectionsDisplay на каждом клике, прежде чем устанавливать его в null (setMap (null)) –

+0

Экземпляр 'DirectionsRenderer' (' directionDisplay' в вашем коде) может содержать только один маршрут, поэтому, когда вы устанавливаете новый маршрут по предыдущему маршруту будут удалены автоматически. Но вы должны оставить его как есть (вызовы 'setMap'), иначе произойдет, что предыдущий маршрут не будет удален, когда вызов' routesService.route' не вернет результат. –

Смежные вопросы