0

さまざまなカテゴリの場所をマップに表示することができます。最終的には、それらにフィルターを適用したいと思います。問題を解決しようとしているときに Web でそれらの多くを見つけたので、おそらくシナリオは非常によく知られています。マップにマーカーを配置しましたが、非表示にする方法が見つかりません。これが私がそれを試す方法です:

function addLocations($content, id, map){
var $mapdiv = $content.find('div.map_div');
catValues = [map.catPrimary, map.catWhite, map.catGreen, map.catYellow, map.catRed, map.catBrown, map.catPurple, map.catGray, map.catOrange];
db.locations.all(function(obj){
    $.each(obj, function(index, location){
        if(location.value.nodeID == id){
            var latitude = location.value.latitude;
            var longitude = location.value.longitude;
            var description = location.value.description;
            var category = location.value.category;
            var position = new google.maps.LatLng(latitude, longitude);
            if(category == "0"){
                homeLocation = position;
                $mapdiv.gmap('get','map').setOptions({'center':position});
            }       
            var marker = new google.maps.Marker({
                position: position, 
                icon: "assets/img/marker_" + category + ".png", 
                category: category,
                shadow: iconShadow,
            });
            marker.setMap( $mapdiv.gmap('get','map') );
            $mapdiv.gmap('addMarker', marker).click(function() {
                $mapdiv.gmap('openInfoWindow', { 'content': description + "<br/> (" + catValues[category] + ")"}, this);
            });
        }       
    });
    markers = $mapdiv.gmap('get', 'markers');
    for(var i = 0; i<markers.length; i++){
        if(markers[i].category != "0"){
            //"not primary, hiding  
            markers[i].setVisibile(false);
        }
    }
});

すべてのマーカーが表示され、非表示になるはずのマーカーは表示されません。また、マーカーをマップに追加して操作する前に、マーカーを配列に追加しようとしましたが、成功しませんでした。マーカー[i].setVisible(false) を try と catch の周りに含めると、「オブジェクト # にはメソッド 'setVisible' がありません。驚いたことに、marker[i].getVisible() をテストすると、値が true になります。感謝します。事前にあなたの助け。

4

1 に答える 1

2

正しいコードはmarkers[i].setMap(null);

https://developers.google.com/maps/documentation/javascript/overlays#RemovingOverlays

記事から:

オーバーレイを削除する

地図からオーバーレイを削除するには、オーバーレイの setMap() メソッドを呼び出して null を渡します。このメソッドを呼び出してもオーバーレイは削除されないことに注意してください。マップからオーバーレイを削除するだけです。代わりにオーバーレイを削除する場合は、オーバーレイをマップから削除してから、オーバーレイ自体を null に設定する必要があります。

オーバーレイのセットを管理したい場合は、オーバーレイを保持する配列を作成する必要があります。この配列を使用すると、オーバーレイを削除する必要があるときに、配列内の各オーバーレイで setMap() を呼び出すことができます。(V2 とは異なり、clearOverlays() メソッドが存在しないことに注意してください。オーバーレイを追跡し、不要な場合はマップから削除する必要があります。) オーバーレイをマップから削除してから、配列のlength を 0 にすると、オーバーレイへのすべての参照が削除されます。

于 2012-09-12T19:54:34.650 に答える