1

我正在添加这样的制造商:

 var markers = [];
    var map = null;
$.ajax({
        type:"GET",
        dataType:"json",
        url:"<?php echo site_url("sandbox_faizan/get_coordinates") ?>",
        success: function(result)
        {
            for(var i=0;i<result.length;i++)
            {
                var obj = [] ;
                obj.lat=result[i].lat;
                obj.lng=result[i].lng;
                obj.count=result[i].Count;
             //   points.push(new google.maps.LatLng(result[i].lat,result[i].lng));
               markers.push(obj);
                //console.log(points[i]);
                console.log(markers[i]);
            }
            addMarkers();
        }
    });
 function addMarkers() {
        // when the map is initialized and the points have been initialized, add them to the map
        if ((map != null) && (markers.length > 0)) {
            for (var i = 0; i < markers.length; i++) {
                var marker = new MarkerWithLabel({
                    map: map,
                    position: new google.maps.LatLng(markers[i].lat,markers[i].lng),
                    icon: pinImage,
                    shadow: pinShadow,
                    labelContent: markers[i].count,
                    labelAnchor: new google.maps.Point(12, -5),
                    labelClass: "labels"
                });
                bounds.extend (new google.maps.LatLng(markers[i].lat,markers[i].lng));
                map.fitBounds (bounds);
            }
        }
    }

我正在清除这样的标记:

  function remove_markers(){

        google.maps.Map.prototype.clearMarkers = function() {
            for(var i=0; i < this.markers.length; i++){
                this.markers[i].setMap(null);
                alert("removing now"); // THIS DOES NOT ALERT
            }
            this.markers = new Array();
        };
    }

它什么都不做,我尝试了其他使用 setMap(null) 的方法,以前它给了我错误未捕获的类型错误 setMap 未在控制台中定义。

我究竟做错了什么?

4

3 回答 3

2
var marker = new MarkerWithLabel({
                map: map,
                position: new google.maps.LatLng(markers[i].lat,markers[i].lng),
                icon: pinImage,
                shadow: pinShadow,
                labelContent: markers[i].count,
                labelAnchor: new google.maps.Point(12, -5),
                labelClass: "labels"
            });
markersToRemove.push(marker); // markersToRemove is a global array

function removeMarkers() {
    for(var i = 0; i < markersToRemove.length; i++) {
        markersToRemove[i].setMap(null);
    }
}
于 2013-11-04T13:31:35.780 回答
2

您的标记数组不是 google.maps.Map 对象的属性(除非您使用的是这样做的库)。您的代码添加它们的方式是,它们位于名为“标记”的全局数组中。

但这不是 google.maps.Marker 对象的数组,您需要保留对这些标记的引用。

 var gmarkers = [];
 function addMarkers() {
        // when the map is initialized and the points have been initialized, add them to the map
        if ((map != null) && (markers.length > 0)) {
            for (var i = 0; i < markers.length; i++) {
                var marker = new MarkerWithLabel({
                    map: map,
                    position: new google.maps.LatLng(markers[i].lat,markers[i].lng),
                    icon: pinImage,
                    shadow: pinShadow,
                    labelContent: markers[i].count,
                    labelAnchor: new google.maps.Point(12, -5),
                    labelClass: "labels"
                });
                bounds.extend (new google.maps.LatLng(markers[i].lat,markers[i].lng));
                gmarkers.push(marker);
                map.fitBounds (bounds);
            }
        }
    }

然后这应该删除它们(并且对于很多标记非常烦人)。

  function remove_markers(){
     for(var i=0; i < gmarkers.length; i++){
       gmarkers[i].setMap(null);
       alert("removing now"); // THIS DOES NOT ALERT
     }
     gmarkers = [];
  };
于 2013-11-04T13:27:57.143 回答
1

1)您向标记添加了错误的信息。您需要在声明标记后添加它:

首先,将您的标记数组重命名为markersData.

然后确保您的标记数组正在获取每个标记。

var marker = new MarkerWithLabel({
  // stuff
});

markers.push(obj);

然后在不调用该原型的情况下尝试:

function remove_markers() {
  for(var i=0; i < this.markers.length; i++){
    markers[i].setMap(null);
    alert("removing now");
  }
  this.markers = new Array();
}

请注意this.markers = new Array();orthis.markers.length = 0;将破坏标记数组,它们将不再存在。如果您只想从地图中删除标记,只需执行以下操作:

function remove_markers() {
  for(var i=0; i < this.markers.length; i++){
    markers[i].setMap(null);
    alert("removing now");
  }
}

标记仍将在数组中,您可以随时将它们添加回地图。

我不确定,但我认为该fitbounds语句应该在循环之外,但我可能错了。

小提琴

于 2013-11-04T13:25:16.987 回答