Question

Toute modification du niveau de zoom entraîne l'apparition de tous les marqueurs sur la carte sur la carte à tout moment depuis la charge de la dernière page. Ceci est vrai si le changement de niveau de zoom est dû à un appel de Setzoom () dans mon code ou parce que j'utilise le curseur de zoom.

J'ai un widget de contrôle de carte avec des boutons pour ajouter des marqueurs correspondant à différentes catégories. Vous cliquez sur le bouton pour les groupes et la carte remplit les marqueurs représentant des groupes. Ensuite, vous cliquez sur le bouton des individus et les marqueurs de groupes sont effacés et supprimés et les marqueurs individuels apparaissent sur la carte. Et ainsi de suite avec d'autres catégories. Mais tout changement de niveau de zoom ramène tous les marqueurs sur la carte depuis la dernière actualisation de la page.

J'utilise MarkerClustererPlus. Je ne sais pas si ce serait un bogue dans MarkerClustererPlus, dans le code de Google ou dans mon code. Espérons que ce dernier. Je vais inclure ma fonction d'addition ci-dessous. Depuis que je limite et supprimez les marqueurs avant d'ajouter de nouveaux marqueurs, je ne sais pas comment il est possible que les marqueurs précédents reviennent, ne jamais rejeter pourquoi un changement de zoom déclenche son retour:

function addMarkers(map,flag) { 

  clearOverlays();
  deleteOverlays();

  if ('event' == flag) {
    data = himaps_event_data;
  } else if ('story' == flag) {
    data = himaps_story_data;
  } else if ('group' == flag) {
    data = himaps_group_data;
  } else {
    data = himaps_user_data;
  }

  for (var k in data) {
    var item = data[k];
    var latLng = new google.maps.LatLng(item.lat, item.lng);
    var marker = new google.maps.Marker({'position': latLng});
    markersArray.push(marker); 
  } 

  var markerCluster = new MarkerClusterer(map, markersArray);  
}

Aussi, si je change de zoom, les marqueurs ne sont plus clairs. Ils continuent simplement d'accumuler sur la carte si je clique sur les boutons pour changer la catégorie. Cela n'arrive certainement pas si je ne change pas le niveau de zoom.

Par demande, voici plus de code:

function clearOverlays() {
  if (markersArray) { 
    for (var i = 0; i < markersArray.length; i++ ) {
      markersArray[i].setMap(null);
    }
  }
}

function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

/* map controls */
(function($) {
  Drupal.behaviors.himaps = {
  attach: function(context, settings) {
    $('.map-controls button').click(function() {
      flag = this.id.replace('map-',''); 
      addMarkers(map,flag);
    });
  }
  }
})(jQuery);


/* homepage map */
function newMap(clat,clng) {
  if (!clat) {
    clat = 37.65;  
  }
  if (!clng) {
    clng = -97.43;  
  }
  var myOptions = {
    scrollwheel: false,
    mapTypeControl: false,
    mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    panControl: false,
    panControlOptions: {
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    zoomControlOptions: {
        style: google.maps.ZoomControlStyle.LARGE,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    draggable: true,
    center: new google.maps.LatLng(clat, clng),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  return new google.maps.Map(document.getElementById("map-canvas"), myOptions);

}

var map;
var markersArray = [];
var geocoder; 
var marker;
var listener;

google.maps.event.addDomListener(window, 'load', initmapping);

function initmapping() { //aka initialize()
  map = newMap();
  addMarkers(map,'group');
  geocoder = new google.maps.Geocoder();
}

Dernier point mais non le moindre, voici la bibliothèque MarkerClustererPlus: http://google-maps-utilité-library-v3googlecode.com/svn/tags/markerClustererPlus/2.0.9/src/

Était-ce utile?

La solution

Je ne sais pas grand chose sur MarkerClusterner, mais ce qui semble se produire est chaque fois que vous appelez votre fonction addmarkers, vous créez un nouveau marqueur, mais l'ancien n'est jamais détruit / supprimé, par conséquent sur le zoom Change toutes les instances que vous avez créées.redessiner les marqueurs qu'ils ont.Essayez la méthode ClearMarkers ou Removermarkers de MarkerClusterer et créez également une instance de MarkerClusterer et ne le réutilisez-le que pour la création d'une nouvelle à chaque fois que vous avez des adontereurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top