18

我剛剛在我的谷歌地圖上添加了一個MarkerClusterer。它工作得很好。markerClusterer點擊放大

我只是想知道是否有任何方式來調整集羣點擊時的放大行爲。如果可能,我想改變縮放級別。

有沒有辦法達到這個目的?

感謝

回答

6

我按照建議修改了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); 

} 
}; 

它很棒!非常感謝

+0

上述代碼與原始代碼有什麼區別? – Kabkee 2015-09-11 06:12:24

+0

@Kabkee不同的是,這實際上改變了放大和上面的代碼是一個骨架。 – Whitecat 2017-05-14 05:26:33

3

它出現的API只會讓你切換縮放功能性

http://google-maps-utility-library-v3.googlecode.com/svn/trunk/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()); 
    } 
}; 
45

已經有一個更新MarkerClusterer源代碼,允許單擊事件更容易訪問:

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

其中「markerCluster」 IST的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) 

問候 傑克

+2

這是否記錄在某處? – blacklwhite 2016-02-18 16:31:21

+0

它記錄在這裏: https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/docs/reference.html – 2017-04-04 21:53:44

5

你可以做到這一點,而不使用監聽器的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以更好地控制地圖縮放行爲,以控制每次點擊觸發的縮放量和縮放位置。

1

如果有人需要在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 

此代碼檢查是放大點擊設置。如果它放大到最大變焦加1,並居中在集羣上。非常簡單的代碼。