infoWindow на MarkerClusterer в картах Google - PullRequest
1 голос
/ 21 мая 2010

Мне нужно открыть infoWindow вместо увеличения карты при нажатии на ClusterMarker. Я использую библиотеку Gmaps util MarkerClusterer для создания кластера маркеров. Я попытался изменить следующую строку в markerclusterer.js

ClusterMarker_.prototype = new GOverlay();

с

ClusterMarker_.prototype = new GMarker();

чтобы я мог получить функцию openInfoWindow() в кластер-маркере, но это не сработало. Есть какая-то ошибка. Если возможно, предложите решение, чтобы это можно было сделать с помощью MarkerClusterer. Или любая другая библиотека, которая сможет это сделать. Любая помощь будет оценена.

Ответы [ 2 ]

6 голосов
/ 02 декабря 2010

Для MarkerCluster v3 существует пользовательское событие с именем ' clusterclick ', которое возвращает объект markerCluster, затем вы можете получить его центр и назначить его в информационное окно, что-то вроде этого:

google.maps.event.addListener(mc, 'clusterclick', function (mCluster) {
     //infowindow must be declared before in your code
     infowindow.setContent("your info");
     var myLatlng = new google.maps.LatLng(mCluster.getCenter().ya, mCluster.getCenter().za);
     infowindow.setPosition(myLatlng);
     infowindow.open(map);
});

Также вы должны установить опцию zoomOnClick на false:

var mcoptions = { zoomOnClick: false, showText: true, averageCenter: true}
var mc = new MarkerClusterer(map, markersArray, mcoptions);
1 голос
/ 22 мая 2010

Возможно, вам лучше изменить событие click для маркера в markerclusterer.js, начиная со строки 672.

В настоящее время:

  GEvent.addDomListener(div, "click", function () {
    var pos = map.fromLatLngToDivPixel(latlng);
    var sw = new GPoint(pos.x - padding, pos.y + padding);
    sw = map.fromDivPixelToLatLng(sw);
    var ne = new GPoint(pos.x + padding, pos.y - padding);
    ne = map.fromDivPixelToLatLng(ne);
    var zoom = map.getBoundsZoomLevel(new GLatLngBounds(sw, ne), map.getSize());
    map.setCenter(latlng, zoom);
  });

Изменить на что-то вроде:

  GEvent.addDomListener(div, "click", function () {
    map.openInfoWindowHtml(latlng, "Put your infowindow content here");
  });

Очевидно, что в зависимости от того, насколько вы хотите абстрагироваться, вы можете сделать пару вещей:

  • Добавить параметры конфигурации в MarkerClusterer, чтобы указать, нужно ли увеличивать или увеличивать функциональность информационного окна
  • Определите настройку функции обратного вызова, в которой вы указываете, какую функцию MarkerClusterer будет вызывать при нажатии на кластер.
...