Google Map Marker Clusterer"如果不扩展"函数

时间:2017-01-24 16:20:34

标签: javascript google-maps google-maps-api-3 markerclusterer

我有一个带有标记聚类的Google地图。我在这里有一个演示:

https://codepen.io/EightArmsHQ/pen/LxLwZZ?editors=0010

我想在群集点击事件上创建一个函数,该事件会在您单击的群集未展开时触发。

走过:

  1. 点击伦敦旁边的4,地图展开以显示这些标记
  2. 点击3,地图展开以显示下一个标记
  3. 您点击了2,地图仍会显示2 - 会触发一个功能。
  4. 我可以这样做:

    var oldSize = false;
    
    google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
    
      var newSize = cluster.getSize();
      var extra = '';
      if(newSize == oldSize){
        alert('this is the same size as it was previously!');
      }
      oldSize = newSize;
    
    });
    

    但这不是我想要的,正如所发生的那样......

    1. 点击伦敦旁边的4,地图展开以显示这些标记
    2. 点击3,地图展开以显示下一个标记
    3. 您点击2,地图仍会显示2
    4. 您点击2,地图仍会显示2,现在警报会显示
    5. 任何人都可以帮我提前一步触发功能吗?

      更多信息:

      我有一张您可以在某些博物馆或其他地理位置访问的项目地图。当您单击每个标记时,我将信息加载到页面中。然而,有些物品在同一个博物馆里。我遇到的问题是当lat和lng对于多个标记完全相同时,群集永远停留在那里。

      这很好,但在这种情况下,我想在同一位置加载所有标记的信息。因此,当您单击未展开的群集时,我尝试创建此功能。问题是,我第二次点击一个没有扩展的集群时发现这很简单,但不是第一次...

      当你缩小很长时间时,如果你点击一个群集,我不想加载所有群集的所有信息,这使事情变得更加复杂。我不想在您无法放大时触发此功能。

1 个答案:

答案 0 :(得分:0)

Your code is wrong because:

  1. You click the 4 next to London, the map expands to show those markers (4 != false)
  2. You click the 3 and the map expands to show the next markers (3 != 4)
  3. You click the 2 and the map still shows 2 (2 != 3)
  4. You click the 2 and the map still shows 2 and now the alert fires (2 == 2)

You can try to check if all the positions in the cluster markers are equals:

google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
  var clusterMarkers = cluster.getMarkers();
  var lastPosition;
  if(clusterMarkers.every((currentMarker) => {
    if(!lastPosition || lastPosition.equals(currentMarker.position)) {
        lastPosition = currentMarker.position;
        return true;
    } else {
        return false;
    }
  })) {
    // Do something
  }
});