2010-12-30 28 views
9

Así que revisé las preguntas anteriores con respecto a esto, que se relacionan con V2, lo cual no es de ayuda.Google Maps Polyline - ¿Cómo lo elimino?

Por lo tanto, crear dos marcadores, guardarlos en una matriz como marcadores [ "a"] y los marcadores [ "desde"]

y luego añadir con este

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); 
} 

brillante. Pero. La próxima vez que lo use (con nuevos marcadores en la matriz) simplemente agrega una polilínea allí sin quitar la anterior. Parece que lo he intentado todo, eliminando de la primera matriz, el flightPath, setMap (nulo) y así sucesivamente.

¿Cuál es la forma correcta de eliminar la línea anterior antes de dibujar una nueva?

EDIT: SOLUCIONADO Solución

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); 
    } 
} 

Motivo: flightPlanCoordinates necesita ser inicializado dentro del alcance, esto restablece la matriz cada vez que se utiliza, limpiarlo correctamente. (También gracias a la entrada de abajo para hacer el código un poco más agradable.

+0

puede compartir un enlace de trabajo de este proyecto? Estoy haciendo algo similar para una aerolínea local. – andufo

Respuesta

3

no veo var antes flightPath = new..., así que supongo flightPath es una variable global.

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 está de hecho en el alcance. Sin embargo, setMap (null) no funciona * no * – 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

Suponiendo que " mypolyline" es el objeto de polilínea, también puede intentar:

mypolyline.setPath([]); 

esta manera, se están llevando a cabo las coordenadas de la polilínea, que en efecto lo eliminará del mapa.

1

flightPath es solo una matriz de objetos LatLng, no polilíneas individuales. Creo que probablemente necesite una matriz separada para las polilíneas, que luego puede recorrer para eliminarlas todas. Crea una línea de matriz global.

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

Ahora está empujando todos los objetos de la polilínea en una línea de matriz. Puede hacerlo invisible o eliminarlo del mapa al enrollarlo como esto:

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

conjunto strokeWeight: 0 entonces polilínea ocultará