我正在添加这样的制造商:
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未在控制台中定义。
我做错了什么?
答案 0 :(得分:2)
您的标记数组不是google.maps.Map对象的属性(除非您使用的是执行此操作的库)。代码添加它们的方式,它们位于名为“markers”的全局数组中。
但这不是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 = [];
};
答案 1 :(得分: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);
}
}
答案 2 :(得分: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();
或this.markers.length = 0;
会破坏标记数组,它们将不再存在。如果您只想从地图中删除标记,请执行以下操作:
function remove_markers() {
for(var i=0; i < this.markers.length; i++){
markers[i].setMap(null);
alert("removing now");
}
}
标记仍然在数组中,您可以随时将它们添加回地图。
我不确定,但我认为fitbounds
语句应该在循环之外,但我可能错了。