Comment afficher / cacher une MarkerCluster dans google maps v3?
-
27-09-2019 - |
Question
Je dois avoir différents marqueurs pour différents mapType
s, et je les pousse à une MarkerClusterer .
I "cacher" les marqueurs avec:
cluster.set("map", null);
cluster.resetViewport();
cluster.redraw();
Et les "montrer" avec:
cluster.set("map", MAP);
cluster.resetViewport();
cluster.redraw();
Le problème est que MarkerClusterer semble pas comme set("map", null)
; il jette le TypeError: Object #<a MarkerClusterer> has no method 'remove'
d'erreur. Comment puis-je afficher / cacher les la bonne façon?
La solution 5
Je me suis battu mon chemin dans la résolution de ce par un peu monkeypatching et un petit hack. Je suis toujours en attente d'une réponse propre, mais une solution à mon problème, donc je suis aussi affiché:
MarkerClusterer.prototype.remove = function () {}
[..]
cluster.set("map", HIDDEN_MAP); // remove the clusterer
cluster.resetViewport();
cluster.redraw();
Autres conseils
façon élégante pour effacer le cluster
cluster.clearMarkers();
Dans l'API Javascript v3 il suffit de dire:
clusterer.setMap(null);
Si vous définissez votre carte à l'objet carte existante, les grappes réapparaissent.
clusterer.setMap( this.map );
En outre, je vous suggère de ne pas nommer votre Clusterer « cluster », comme dans votre exemple. Le MarkerClusterer contient des objets cluster, qui sont les marqueurs en cluster réelles et non le Clusterer lui-même.
Voici une solution plus complète:
.html ajouter:
<div id="map-canvas-hidden" style="display:none"></div>
<div id="map-canvas-shown" style="width:500px; height:500px"></div>
.js ajouter:
MarkerClusterer.prototype.remove = function() { };
var HIDDEN_MAP = new google.maps.Map(document.getElementById("map-canvas-hidden"), {});
var gmap = new google.maps.Map(document.getElementById("map-canvas-shown"), {});
pour afficher les groupes:
cluster.setMap(gmap);
cluster.resetViewport();
cluster.redraw();
pour cacher les groupes:
cluster.setMap(HIDDEN_MAP);
cluster.resetViewport();
cluster.redraw();
enfin, je devais les patches folowing à markerclusterer.js:
--- markerclusterer.js.orig 2013-12-06 18:02:32.887516000 +0100
+++ markerclusterer.js 2013-12-06 18:03:25.487516924 +0100
@@ -620,6 +620,7 @@
*/
MarkerClusterer.prototype.getExtendedBounds = function(bounds) {
var projection = this.getProjection();
+ if (!projection) return null;
// Turn the bounds into latlng.
var tr = new google.maps.LatLng(bounds.getNorthEast().lat(),
@@ -657,7 +658,7 @@
* @private
*/
MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) {
- return bounds.contains(marker.getPosition());
+ return bounds ? bounds.contains(marker.getPosition()) : false;
};
espérons que cette aide
Voici mon code pour montrer facilement / clusters masquer sur la carte (mise à jour pour les versions actuelles de Maps API et JS-Cluster-Renderer). Merci Gabi.
MarkerClusterer.prototype.remove = function() {};
MarkerClusterer.prototype.hide = function() {
this.setMap(null);
this.resetViewport();
};
MarkerClusterer.prototype.show = function() {
this.setMap(map); // replace map with your reference to the map object
this.redraw();
};
// To hide the clusters:
cluster.hide();
// To show the clusters:
cluster.show();