无法隐藏GMap v3中的标记

时间:2012-09-12 19:52:02

标签: javascript google-maps google-maps-api-3

我可以在地图上显示一组具有不同类别的位置。最后,我想对它们应用过滤器。可能这个场景非常熟悉,因为我在试图解决我的问题时在网上找到了很多这样的场景。我把标记放在我的地图上,我找不到隐藏它们的方法。以下是我尝试的方法:

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

显示所有标记,而不应隐藏的标记。我还尝试将标记添加到数组中,然后将它们添加到地图中并使用它们,但没有成功。当我在try中包含标记[i] .setVisible(false)并捕获它时说&#34;对象#没有方法&#39; setVisible&#39;。令人惊讶的是,如果我测试标记[i] .getVisible()我得到值true。 我提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我认为正确的代码是markers[i].setMap(null);

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

来自文章:

  

删除叠加层

     

要从地图中移除叠加层,请调用叠加层的setMap()方法,并传递null。请注意,调用此方法不会删除叠加层;它只是从地图中删除叠加层。如果您希望删除叠加层,则应将其从地图中删除,然后将叠加层本身设置为空。

     

如果您希望管理一组叠加层,则应创建一个数组来保存叠加层。使用此数组,您可以在需要删除数组时在数组中的每个覆盖上调用setMap()。 (请注意,与V2不同,不存在clearOverlays()方法;您负责跟踪叠加层并在不需要时将其从地图中删除。)您可以通过从地图中删除叠加层然后设置阵列来删除叠加层。 length为0,删除对叠加层的所有引用。