2010-12-30 38 views
9

Vì vậy, tôi đã kiểm tra các câu hỏi trước đây về vấn đề này, tất cả đều liên quan đến V2, điều này không giúp được gì.Polyline của Google Maps - Làm thế nào để xóa nó?

Vì vậy, tôi tạo ra hai dấu, lưu chúng trong một mảng như đánh dấu [ "để"] và đánh dấu [ "từ"]

Và sau đó thêm chúng với điều này

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. Nhưng. Tiếp theo thời gian tôi sử dụng nó (Với các dấu hiệu mới trong mảng) nó chỉ thêm một polyline có mà không cần loại bỏ trước đó. Tôi dường như đã thử tất cả mọi thứ, loại bỏ khỏi mảng đầu tiên, flightPath, setMap (null) và vv.

Cách chính xác để xóa dòng trước đó trước khi vẽ một dòng mới là gì?

EDIT: SOLVED Giải pháp

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

Lý do: flightPlanCoordinates cần phải được khởi tạo trong phạm vi, điều này resets các mảng mỗi khi nó được sử dụng, làm sạch nó ra đúng cách. (Cũng nhờ cho đầu vào dưới đây để làm cho đoạn code một chút đẹp hơn.

+0

bạn có thể chia sẻ một liên kết hoạt động của dự án này? im làm một cái gì đó tương tự cho một hãng hàng không địa phương. – andufo

Trả lời

3

Tôi không thấy var trước flightPath = new..., vì vậy tôi đoán flightPath là một biến toàn cầu.

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 thực sự nằm trong phạm vi. Tuy nhiên, setMap (null) không * không * hoạt động – 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

Giả sử rằng " mypolyline "là đối tượng Polyline của bạn, bạn cũng có thể thử:

mypolyline.setPath([]); 

Bằng cách này, bạn đang lấy các tọa độ từ Polyline, có hiệu lực sẽ xóa nó khỏi bản đồ.

1

flightPath chỉ là một mảng các đối tượng LatLng, chứ không phải các polylines riêng lẻ. Tôi nghĩ rằng bạn có thể cần một mảng riêng biệt cho các polylines, mà sau đó bạn có thể lặp lại để loại bỏ tất cả chúng. Tạo một mảng mảng toàn cầu.

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

Bây giờ bạn đang đẩy tất cả các đối tượng polyline vào một dòng mảng. Bạn có thể làm cho nó vô hình hoặc loại bỏ nó khỏi bản đồ bằng cách lặp nó như thế này:

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

bộ strokeWeight: 0 thì polyline sẽ ẩn

Các vấn đề liên quan