1

座標をリモートで取得してマップ上に配置し、ポリラインで接続するクリックイベントがあります。同じことを行う他のクリックイベントがありますが、ユーザーが行った各クリックを表示するように切り替えることができるように、それらを個別のレイヤーとして保持したいと考えています。これまたは別のアプローチを行うためにそれらを別々にグループ化する良い方法を知っている人はいますか?

これまでの私のコードは次のとおりです。

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

1 に答える 1

1

あなたはそれらをth​​is.markersに保持しています-これは素晴らしいスタートです。clickこれで、各マーカーのリスナー関数を定義するだけで済みます。

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

次に、ユーザーがクリックしたマーカーのみを切り替えたい場合は、マーカーをループして(実行しているように)、this.markers [i] .clicked===undefinedのすべての場所でsetMapをnullに設定します。

于 2012-05-04T11:31:21.953 に答える