Frage

Ich brauche verschiedenen Marker für verschiedene mapTypes haben, und ich schiebe sie auf einen MarkerClusterer .

I "verstecken" der Marker mit:

cluster.set("map", null);
cluster.resetViewport();
cluster.redraw();

Und "zeigen", um sie mit:

cluster.set("map", MAP);
cluster.resetViewport();
cluster.redraw();

Das Problem ist, dass MarkerClusterer nicht wie set("map", null) scheint; es führt den Fehler TypeError: Object #<a MarkerClusterer> has no method 'remove'. Wie kann ich zeigen / verstecken sie den richtigen Weg?

War es hilfreich?

Lösung 5

kämpfte ich mich in diesen von einem kleinen monkeypatching lösen und ein wenig Hack. Ich warte immer noch für eine saubere Antwort, aber das ist eine Lösung für mein Problem, so dass ich auch bin dieses Posting:

MarkerClusterer.prototype.remove = function () {}

[..]

cluster.set("map", HIDDEN_MAP); // remove the clusterer
cluster.resetViewport();
cluster.redraw();

Andere Tipps

elegante Weise, die Cluster löschen

cluster.clearMarkers();

In der Javascript API v3 ist es ausreichend zu sagen:

clusterer.setMap(null);

Wenn Sie Ihre Karte zurück an das bestehende Kartenobjekt gesetzt ist, wird die Cluster wieder auftauchen.

clusterer.setMap( this.map );

Außerdem würde ich vorschlagen, nicht Ihre Clusterer ‚Cluster‘ zu nennen, wie in Ihrem Beispiel. Die MarkerClusterer enthält Cluster-Objekte, die die tatsächlichen Cluster-Marker sind und nicht die Clusterer selbst.

Hier ist eine komplette Lösung:

in .html add:

<div id="map-canvas-hidden" style="display:none"></div>
<div id="map-canvas-shown" style="width:500px; height:500px"></div>

in Js hinzuzufügen:

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"), {});

, um die Cluster zeigen:

    cluster.setMap(gmap);
    cluster.resetViewport();
    cluster.redraw();

, um die Cluster zu verbergen:

    cluster.setMap(HIDDEN_MAP);
    cluster.resetViewport();
    cluster.redraw();

Schließlich musste ich die Folowing Patches 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;
 };

hoffe, das hilft

Hier ist mein Code auf einfache Weise anzuzeigen / auszublenden Cluster auf der Karte (aktualisiert für die aktuellen Versionen von Google Maps API und JS-Cluster-Renderer). Dank 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top