markerClusterer при щелчке мышью - PullRequest
23 голосов
/ 19 апреля 2011

Я только что добавил MarkerClusterer на свою карту Google.Он прекрасно работает.

Мне просто интересно, есть ли способ изменить поведение при увеличении при нажатии на кластер.Я хотел бы изменить уровень масштабирования, если это возможно.

Есть ли способ достичь этого?

Спасибо

Ответы [ 5 ]

53 голосов
/ 22 сентября 2011

Произошло обновление исходного кода MarkerClusterer, позволяющее значительно упростить доступ к событию щелчка:

google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
    // your code here
});

, где 'markerCluster' является объектом MarkerCluster.Внутри функции вы также можете получить доступ к

cluster.getCenter();
cluster.getMarkers();
cluster.getSize();

. Я использую это для переключения на другой тип карты, так как я использую пользовательский набор плиток для более удобного просмотра при более низких уровнях масштабирования:

map.setCenter(cluster.getCenter()); // zoom to the cluster center
map.setMapTypeId(google.maps.MapTypeId.ROADMAP); // switch map type
map.setOptions(myMapOptions); // apply some other map options (optional)

С уважением, Джек

8 голосов
/ 13 июня 2015

Вы можете сделать это без изменения исходного кода, используя прослушиватель события clusterclick markerClusterer:

var mcOptions = {gridSize: 40, maxZoom: 16, zoomOnClick: false, minimumClusterSize: 2};
markerClusterer = new MarkerClusterer(map, markers, mcOptions);

google.maps.event.addListener(markerClusterer, 'clusterclick', function(cluster){
    map.setCenter(cluster.getCenter());
    map.setZoom(map.getZoom()+1);
});

т.е.Я установил zoomOnClick = false, чтобы лучше контролировать масштабирование карты, чтобы контролировать величину масштабирования и положение масштабирования при каждом нажатии.

7 голосов
/ 19 апреля 2011

Я изменил событие clusterclick, как предложено:

/**
* Triggers the clusterclick event and zoom's if the option is set.
*/
ClusterIcon.prototype.triggerClusterClick = function() {
var markerClusterer = this.cluster_.getMarkerClusterer();

// Trigger the clusterclick event.
google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_);

if (markerClusterer.isZoomOnClick()) {
// Zoom into the cluster.
// this.map_.fitBounds(this.cluster_.getBounds());

// modified zoom in function
this.map_.setZoom(markerClusterer.getMaxZoom()+1);

 }
};

Отлично работает! Большое спасибо

3 голосов
/ 19 апреля 2011

Похоже, API только позволит вам переключать функции масштабирования

http://google -maps-utility-library-v3.googlecode.com / SVN / багажник / markerclusterer / Docs / reference.html

Таким образом, вам нужно будет отредактировать источник, похоже, он находится в строке 1055

/**
 * Triggers the clusterclick event and zoom's if the option is set.
 */
ClusterIcon.prototype.triggerClusterClick = function() {
  var markerClusterer = this.cluster_.getMarkerClusterer();

  // Trigger the clusterclick event.
  google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_);

  if (markerClusterer.isZoomOnClick()) {
    // Zoom into the cluster.
    this.map_.fitBounds(this.cluster_.getBounds());
  }
};
1 голос
/ 14 мая 2017

Если кому-то нужно написать эту функцию в coffeescript, я объединю верхний ответ и помеченный ответ в один фрагмент кода.

mcOptions =
  maxZoom: 16

markerCluster = new MarkerClusterer map, markers, mcOptions
# listener if a cluster is clicked
google.maps.event.addListener markerCluster, "clusterclick", (cluster) ->
  if markerCluster.isZoomOnClick() # default is true
    #get bounds of cluster
    map.fitBounds cluster.getBounds()
    #zoom in to max zoom plus one. 
    map.setZoom markerCluster.getMaxZoom() + 1

Эта проверка кода при увеличении клика установлена. Если это увеличение до максимального увеличения плюс один, и центр в кластере. Очень простой код

...