2010-12-30 12 views
9

Sprawdziłem więc poprzednie pytania dotyczące tego, które odnoszą się do V2, co nie jest pomocne.Google Maps Polyline - Jak mogę ją usunąć?

Więc tworzę dwa markery, zapisać je w tablicy jako markery [ "do"] i markerów [ "z"]

a następnie dodać je z tym

function route(){ 
     for(var key in markers) { 
      flightPlanCoordinates.push(markers[key].position); 
     } 
     flightPath = new google.maps.Polyline({ 
      path: flightPlanCoordinates, 
      strokeColor: "#FF0000", 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
    }); 
    flightPath.setMap(map); 
} 

Brilliant. Ale. Następnym razem, gdy go użyję (z nowymi markerami w tablicy), dodaje polilinię bez usuwania poprzedniej. Wydaje się, że próbowałem wszystkiego, usuwając z pierwszej tablicy, flightPath, setMap (null) i tak dalej.

Jaki jest poprawny sposób usunięcia poprzedniego wiersza przed rysowaniem nowego?

Edycja: ROZWIĄZANIA Rozwiązanie

function route(){ 
    var flightPlanCoordinates = []; 
    for(var key in markers) { 
     flightPlanCoordinates.push(markers[key].position); 
    } 
    if(flightPath) { 
     flightPath.setPath(flightPlanCoordinates); 
    } else { 
     flightPath = new google.maps.Polyline({ 
      path: flightPlanCoordinates, 
      strokeColor: "#FF0000", 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 
     flightPath.setMap(map); 
    } 
} 

Uzasadnienie: flightPlanCoordinates musi być zainicjowany w zakresie, to zeruje się tablicę każdym razem, gdy jest używany do czyszczenia go prawidłowo. (Również dzięki za poniżej wejścia do kodu nieco ładniejszy.

+0

można udostępnić link robocza tego projektu? Robię coś podobnego dla lokalnych linii lotniczych. – andufo

Odpowiedz

3

nie widzę var przed flightPath = new..., więc przypuszczam flightPath jest zmienną globalną.

function route(){ 
    //flightPath.setMap(null); Doesnt't work!? 
    for(var key in markers) { 
     flightPlanCoordinates.push(markers[key].position); 
    } 
    if(flightPath) {//If flightPath is already defined (already a polyline) 
     flightPath.setPath(flightPlanCoordinates); 
    } else { 
     flightPath = new google.maps.Polyline({ 
      path: flightPlanCoordinates, 
      strokeColor: "#FF0000", 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 
     flightPath.setMap(map);//It's not necessary to setMap every time 
    } 

} 
+0

flightPath jest rzeczywiście w zakresie. Jednak setMap (null) nie * działa * – Mantar

1

function traffic(map){ 
// polyline 
this.path=null; 
this.map = google.maps.Map(ele, opt); 
} 
traffic.prototype._draw = function() 
{ 
    //create new polyline 
    var path = new google.maps.Polyline({ 
     path: this.get('latlngArr'), 
     strokeColor: "#FF0000", 
     strokeOpacity: 1.0, 
     strokeWeight: 2 
    }); 
    //delete old 
    var prepath = this.path; 
    if(prepath){ 
     prepath.setMap(null); 
    } 
    //new polyline 
    path.setMap(this.map); 

    this.path = path; 
} 
7

Zakładając, że " mypolyline”to Twój obiekt polilinii, można też spróbować:

mypolyline.setPath([]); 

w ten sposób odbywają się współrzędne z polilinii, co w efekcie usunie go z mapy.

1

flightPath to tylko tablica obiektów LatLng, a nie pojedynczych polilinii. Myślę, że prawdopodobnie potrzebujesz osobnej tablicy dla polilinii, którą możesz potem przelotować, aby je wszystkie usunąć. Utwórz globalną linię tablicową.

var line = []; 
flightPath = new google.maps.Polyline({ 
     path: flightPlanCoordinates, 
     strokeColor: "#FF0000", 
     strokeOpacity: 1.0, 
     strokeWeight: 2 
    }); 
line.push(flightPath); 

Teraz przesuwasz wszystkie obiekty polilinii do linii tablicowej. Można zrobić to niewidoczne lub usunąć go z mapy, okręcając go tak:

for (i=0; i<line.length; i++) 
{       
    line[i].setMap(null); //or line[i].setVisible(false); 
} 
1

zestaw strokeWeight: 0 to polilinia ukryje