2012-03-01 107 views
15

リトル背景。特定のナビゲーション項目をクリックすると、地図上にmarkersが作成されます。別のナビゲーション項目をクリックすると、以前のmarkersが削除され、新しい項目が設定されます。Google Maps API v3はすべてのポリラインを削除します

今私はpolylinesと一緒に働いていて、polylinesと同じコンセプトを作成しようとしていますが、難しい時があります。ここに私が持っているものがあります:

// Global variable for array of lines 
    var points= []; 

私のポイントを設定します。

line1 = new google.maps.LatLng(line1Start, line1Finish); 
    line2 = new google.maps.LatLng(line2Start, line2Finish); 
    line3 = new google.maps.LatLng(line3Start,line3Finish); 

    points.push(line1, line2, line3); 

私のポリラインを設定します。

var polyline = new google.maps.Polyline({ 
     path:points, 
     strokeColor:"#FF0000", 
     strokeOpacity:1.0, 
     strokeWeight:2 
    }); 

マップを線で初期化します。

polyline.setMap(map); 

すべてがうまく動作します。線が作成され、マーカー間に現れます。今、彼ら(またはしない...)

function removeLines() { 
     if (points) { 
      points.length = 0; 
     } 
     points = []; 
    } 

removeLinesを(削除することができます)、次に新しいものが設定され、それらをクリアするために、関数の先頭で呼び出されています。これは実際にポイント配列の私のポイントをクリアしますが、マップ自体にはまだpolylinesが表示され、マーカのように消えることはありません。

何がありますか?

答えて

30

polyline.setMap(null)を実行すると、マップからその行が削除されます。 Documentation

+2

うわー..私はこの前にやっていた、しかし、私がやっていましたpoints配列のループとpoints [i] .setMap(null);明らかに、これはポリライン上にある必要があり、点配列ではありません... DUH。 +1のおかげで私はそれを実現する手助けをしました:) – Romes

12

ポリラインは、個々のポリラインではなく、LatLngオブジェクトの配列です。ポリラインのために別の配列が必要になると思います。ポリラインをループしてそれらをすべて削除することができます。グローバル配列行を作成します。

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

今、あなたは、アレイ線にすべてのポリラインオブジェクトを推進しています。あなたはそれが見えない作るかのようにそれをループすることにより、マップから削除することができます:

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

その行を更新しますあなたのGoogleマップのインスタンス

+1

TypeError:map.clearは関数ではありません – johnlowvale

+0

Android用にうってつけ! –

+0

clear()メソッドはGoogleマップオブジェクトには存在しません。 –

関連する問題