2012-05-04 9 views
1

私は、リモートで座標を取得し、マップ上に配置し、それらをポリラインに接続するクリックイベントを持っています。私は同じことをする他のクリックイベントを持っていますが、別のレイヤーとしてそれらを保持して、ユーザーが行ったクリックのそれぞれを表示するように切り替えることができます。誰かがこれを別々にグループ化して別の方法をとる良い方法を知っていますか?ここでGoogleマップで複数のオーバーレイを切り替えるにはどうすればよいですか?

は私のコードは、これまでのところです:あなたがそれらを持っている

drawPoints: function (points, color) { 
    $.each(points, function (key, val) { 
     var location = new google.maps.LatLng(val.Latitude, val.Longitude); 
     MyTest.addMarker(location, val.Name, val.Description); 
     MyTest.coordinates.push(location); 
    }); 

    this.path = new google.maps.Polyline({ 
     path: MyATest.coordinates, 
     strokeColor: color, 
     strokeOpacity: 1.0, 
     strokeWeight: 2 
    }); 

    this.path.setMap(this.googlemap); 
}, 

addMarker: function (location, title, html) { 
    var marker = new google.maps.Marker({ 
     position: location, 
     map: this.googlemap, 
     title: title, 
     html: html 
    }); 

    this.markers.push(marker); 
}, 

// Removes the overlays from the map, but keeps them in the array 
clearOverlays: function() { 
    if (this.markers) { 
     for (i in this.markers) { 
      this.markers[i].setMap(null); 
     } 
    } 
}, 

// Shows any overlays currently in the array 
showOverlays: function() { 
    if (this.markers) { 
     for (i in this.markers) { 
      this.markers[i].setMap(map); 
     } 
    } 
}, 
+1

ヒジャブラブは、このフィドルを始めにして、ここにそれを複製してください:http://jsfiddle.net/fHsAY/ :))素晴らしいものがあります! cheerios! –

答えて

1

はthis.markersに保管 - 素晴らしいスタートです。

for(i in this.markers) { 
    google.maps.addListener(this.markers[i], function() { 
     this.markers[i].clicked = true; }); 
} 

そして、ユーザは、彼らがクリックしただけでマーカーを切り替えたいあなたのマーカーをループ(あなたがやっているように)いつでも:今、あなたがする必要があるすべては、各マーカーのためclickリスナー関数を定義していますthis.markers [i] .clicked === undefinedのすべての場所でsetMapをnullに設定します。

+2

JavaScriptで 'for for'ループを使って配列を反復処理しないでください。 –

+0

OPは配列を使用していたという事実には同意しませんでした。あなたが使用しているアドバイスdrawPointsメソッドを使用している$ .each()ヘルパーイテレータを使用する – Adam

関連する問題