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) を使用する他のアプローチを試しましたが、以前はエラー uncaught type error setMap not defined in console が表示されました。

私は何を間違っていますか?

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 に答える