Fluster 2, как показать все маркеры на определенном уровне масштабирования

Я использую Fluster 2 для кластеризации маркеров и обнаружил, что метод кластеризации Fluster слишком агрессивен. Так что даже когда я увеличиваю масштаб до уровня города, у меня все равно получается гораздо больше кластеров, чем мне действительно нужно. Кто-нибудь знает, как изменить fluster .js, чтобы он отображал все маркеры, как только вы дойдете до уровня масштабирования 5?

Здесь слишком много кода, относящегося к Fluster, поэтому этот вопрос больше для людей, которые уже используют Fluster для своих потребностей в кластеризации маркеров.

Спасибо,


person Andrew Woodard    schedule 19.07.2012    source источник


Ответы (2)


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

var fluster = new Fluster2(map);
// Set styles for the clustered icons
fluster.styles = {
  0: {
    image: "http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/images/m1.png",
    textColor: "#FFFFFF",
    width: 53,
    height: 52
  },
  10: {
    image: "http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/images/m2.png",
    textColor: "#FFFFFF",
    width: 56,
    height: 55
  },
  15: {
    image: "http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/images/m3.png",
    textColor: "#FFFFFF",
    width: 66,
    height: 65
  }
};
// Initialize Fluster
// This will set event handlers on the map and calculate clusters the first time.
fluster.initialize();

// Event listener for switching to Street View/Road Map to show/hide the
// close button, respectively
google.maps.event.addListener(panorama,"visible_changed",toggleVisible);

// Add a listener to the zoom change event so we can change the grid size
// of the cluster script. Should be dynamic!
google.maps.event.addListener(map, "zoom_changed", function() {

  var zoomLevel = map.getZoom();

  switch(true){
    case zoomLevel > 13:
      fluster.gridSize = 0;
      break;
    case zoomLevel > 12:
      fluster.gridSize = 10;
      break;
    case zoomLevel > 7:
      fluster.gridSize = 20;
      break;
    case zoomLevel > 5:
      fluster.gridSize = 40;
      break;
    default:
      fluster.gridSize = 60;
      break;
  }

});
person zizoujab    schedule 25.08.2012

Хороший ответ, Зид.

Кстати, если у вас есть несколько маркеров с одинаковой позицией, кластеризация все равно будет происходить, даже если gridSize равен 0. Чтобы обойти это, установите для сетки значение -1.

    google.maps.event.addListener(map, "zoom_changed", function() {

  var zoomLevel = map.getZoom();

  switch(true){
    case zoomLevel > 13:
      fluster.gridSize = -1;
          break;
    case zoomLevel > 12:
      fluster.gridSize = 10;
      break;
    case zoomLevel > 7:
      fluster.gridSize = 20;
      break;
    case zoomLevel > 5:
      fluster.gridSize = 40;
      break;
    default:
      fluster.gridSize = 60;
      break;
  }

});
person horia    schedule 15.01.2013