Google Maps Polyline - как мне его удалить? - PullRequest
9 голосов
/ 30 декабря 2010

Итак, я проверил предыдущие вопросы по этому вопросу, которые все относятся к V2, который не помогает.

Итак, я создаю два маркера, сохраняю их в массиве как маркеры ["to"] и маркеры["from"]

А затем добавьте их с этим

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.Но.В следующий раз, когда я использую его (с новыми маркерами в массиве), он просто добавляет туда полилинию, не удаляя предыдущую.Кажется, я все перепробовал, удалив из первого массива flightPath, setMap (null) и т. Д.

Как правильно удалить предыдущую строку перед рисованием новой?

РЕДАКТИРОВАТЬ: РЕШЕННОЕ РЕШЕНИЕ

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

Причина: flightPlanCoordinates необходимо инициализировать в области видимости: при каждом использовании он сбрасывает массив, правильно его очищая.(Также спасибо за ввод, сделанный ниже, чтобы сделать код немного лучше.

Ответы [ 5 ]

7 голосов
/ 17 октября 2011

Предполагая, что "mypolyline" является вашим объектом Polyline, вы также можете попробовать:

mypolyline.setPath([]);

Таким образом, вы берете координаты из полилинии, которая фактически удалит их с карты.

3 голосов
/ 30 декабря 2010

Я не вижу var до flightPath = new..., поэтому я предполагаю, что flightPath является глобальной переменной.

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
   }

}
1 голос
/ 22 июня 2016

установить штрих-вес: 0, тогда полилиния будет скрыта

1 голос
/ 09 мая 2013

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

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

Теперь вы помещаете все объекты полилинии в строку массива.Вы можете сделать его невидимым или удалить его с карты, зациклив его так:

for (i=0; i<line.length; i++) 
{                           
  line[i].setMap(null); //or line[i].setVisible(false);
}
1 голос
/ 25 марта 2011

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...