2012-04-03 31 views
1

Google Maps API V3を使用してマーカーをマーカーに配置しています。同じLatLngを持つ複数のマーカーのために重複するマーカーがある可能性があるので、最初のもの以外のすべての重複マーカーを削除しようとしています(setMap(null)setVisible(false))。setVisible(false)はマーカーを削除しますが、setMap(null)を削除しません。

問題: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); 
      } 
+0

なぜ重複マーカーを作成しないのですか?あるいは、少なくとも 'map'パラメータを指定せずにマーカーを作成し、後でそれを設定したら? – hamczu

答えて

1

あなたはクラスタラの使用に言及をカウントしなかったことに気づきます。クラスタラーは、setMapを呼び出すことによって個々のマーカーを表示および非表示にするため、setMap(null)の呼び出しをオーバーライドする可能性があります。しかし、setVisibleはそれらが表示されないようにします。クラスタラーから重複したマーカーを削除するか、まったく作成しないでください

関連する問題