2014-01-10 4 views
1

Я пытаюсь показать/скрыть несколько направлений, используя флажок, но не могу скрыть или очистить маршруты, когда они установлены. Я попробовал несколько вещей, которые я нашел в сети, но без каких-либо успехов.clear direction on google map

checbox==false Внутри я попытался

  1. directionsRenderer.setMap(null);

  2. directionsRenderer.setMap(null); directionsRenderer=null; directionsRenderer.setMap(map);

  3. повтор вся функция с directionsRenderer.setMap(null);

  4. directionsDisplay.setMap(map);

и многие другие варианты. ...любая помощь?

код:

var directionsService = new google.maps.DirectionsService; 
function getvoznje() {  
    if (document.getElementById('voznje').checked==true) 
    { 
     function renderDirections(result) { 
      var directionsRenderer = new google.maps.DirectionsRenderer; 
      directionsRenderer.setOptions({ 
       preserveViewport: true, 
       draggable: true, 
       polylineOptions: { 
        strokeColor: "#00" + (Math.round(Math.random() * 0XFFFF)).toString(16) 
       } 
      }); 
      directionsRenderer.setMap(map); 
      directionsRenderer.setDirections(result); 
     } 

     function requestDirections(start1, end1, start2, end2) { 
      directionsService.route({ 
       origin: new google.maps.LatLng(start1,end1), 
       destination: new google.maps.LatLng(start2,end2), 
       travelMode: google.maps.DirectionsTravelMode.DRIVING 
      }, function(result) { 
       renderDirections(result); 
      }); 
     } 

     for (var i = 0; i <put.length-3; i+=4){ 
      requestDirections(put[i], put[i+1], put[i+2], put[i+3]); 
     } 

    } 

    if (document.getElementById('voznje').checked==false) 
    { 
     directionsRenderer.setMap(null); 
    } 
} 

ответ

2

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

Вы правильно передать null функции setMap, чтобы удалить маршруты из карты, according to the documentation:

Этот метод определяет карту, на которой будет вынесено направления. Пропустить null, чтобы удалить маршруты с карты.

var directionsService = new google.maps.DirectionsService, 
    directionsRenderer = new google.maps.DirectionsRenderer; 
function renderDirections(result) { 
    directionsRenderer.setOptions({ 
     preserveViewport: true, 
     draggable: true, 
     polylineOptions: { 
      strokeColor: "#00" + (Math.round(Math.random() * 0XFFFF)).toString(16) 
     } 
    }); 
    directionsRenderer.setMap(map); 
    directionsRenderer.setDirections(result); 
} 
function requestDirections(start1, end1, start2, end2) { 
    directionsService.route({ 
     origin: new google.maps.LatLng(start1,end1), 
     destination: new google.maps.LatLng(start2,end2), 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
    }, function(result) { 
     renderDirections(result); 
    }); 
} 
function getvoznje() {  
    if (document.getElementById('voznje').checked==true) 
    { 
     for (var i = 0; i <put.length-3; i+=4){ 
      requestDirections(put[i], put[i+1], put[i+2], put[i+3]); 
     } 
    } 

    if (document.getElementById('voznje').checked==false) 
    { 
     directionsRenderer.setMap(null); 
    } 
} 
+1

К сожалению, это не решение. Если мы переместим «var routesRenderer = new google.maps.DirectionsRenderer;» из функции «renderDirections» мы не можем отображать больше одного направления на карте, но мы можем показать/очистить это направление. Есть ли способ прояснить направления в противоположной ситуации? –

+0

Если я поставлю «var directionRenderer;» перед «renderDirections (result)» (т. е. сделать его более глобальным) только последнее направление очищается с помощью «directionRenderer.setMap (null)»; –

+0

Мне интересно, как я могу поместить это вне функции initMap()? Я пытаюсь сделать то же самое, но как только я помещаю var routesService = new google.maps.DirectionsService вне функции initMap(), у меня есть ошибка, говорящая: «Google не определен» – Tenz

1

Код, работа ниже.

var directionsService = new google.maps.DirectionsService;   
    var directionsRenderer=[]; 
    var cur=0; 

    function renderDirections(result) { 
     directionsRenderer[cur] = new google.maps.DirectionsRenderer; 
     directionsRenderer[cur].setOptions({ 
     preserveViewport: true, 
     draggable: true, 
     polylineOptions: { 
      strokeColor: "#00" + (Math.round(Math.random() * 0XFFFF)).toString(16) , strokeOpacity:0.6 
      } }); 
     directionsRenderer[cur].setMap(map); 
     directionsRenderer[cur].setDirections(result); 
     cur=cur+1; 
    } 

    function requestDirections(start1, end1, start2, end2) { 
     directionsService.route({ 
     origin: new google.maps.LatLng(start1,end1), 
     destination: new google.maps.LatLng(start2,end2), 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }, function(result) { 
     renderDirections(result); 
     }); 
    } 

    function getvoznjice() { 
    for (var i = 0; i <put.length-3; i+=4){ 
     requestDirections(put[i],put[i+1],put[i+2],put[i+3]); 
     } 
    } 

function getvoznje() {  
    if (document.getElementById('voznje').checked==true) { 
     cur=0; 
     getvoznjice(); 
     } 
    if (document.getElementById('voznje').checked==false) { 
     for (var i = 0; i <cur; i++){ 
     directionsRenderer[i].setMap(null); 
     } 
     } 


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