setVisible(false)删除标记但不删除setMap(null)

时间:2012-04-03 10:53:33

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

我正在使用Google Maps API V3在地图上放置一些标记。由于多个标记具有相同的LatLng可能存在重叠标记,因此我尝试使用setMap(null)setVisible(false)删除除第一个之外的所有重叠标记。

问题:当标记上使用setMap(null)时,该功能似乎无法执行任何操作,并且标记仍保留在地图上。但是,如果使用setVisible(false),标记确实会消失。

知道为什么会这样吗?

我还注意到使用的标记群集器插件确实计算了所有已经setVisible(false)setMap(null)的重复标记,

JS代码

$.getJSON(getJSON_url, 
    {
        someValues: someValues
    }, 
    function(json){

        for( i = 0; i < json.length; i++) {

            // Check if marker already exist at that LatLng
            var duplicate_marker = 0;
            for( var j = 0; j < markers.length; j++) {
                // If marker exists
                if( json[i].lat == markers[j].getPosition().lat() && json[i].lng == markers[j].getPosition().lng()) {   
                    console.log( json[i].lat + ' ' +  json[i].lng + ' ' + i + ' ' + markers[j].getPosition().lat() + ' ' + markers[j].getPosition().lng() + ' ' + j);
                    duplicate_marker = 1;
                    break;
                }
            }

            // Place markers on map
            var latLng = new google.maps.LatLng(json[i].lat, json[i].lng);
            var marker = new google.maps.Marker({
                position: latLng,
                icon: base_url + 'images/template/markers/listing.png',
                map: map
            });
            markers.push(marker);

            // Make duplicate marker invisible
            if(duplicate_marker) {
                //marker.setMap(null);
                marker.setVisible(false);
            }

1 个答案:

答案 0 :(得分:1)

您提到使用群集器。通过调用setMap,clusterer显示和隐藏各个标记,因此它可能会覆盖对setMap(null)的调用。但是因为它尊重setVisible,使它们不会出现。从群集器中删除重复的标记,或者根本不创建它们