Google maps v3: кластеризация с помощью пользовательских маркеров

javascript google-maps google-maps-api-3

3815 просмотра

2 ответа

Я пытаюсь использовать MarkerClusterer для кластеризации маркеров на моей карте. Проблема в том, что я не использую маркеры по умолчанию ( google.maps.Marker ), а вместо этого пользовательский класс, который ссылается на google.maps.OverlayView . К сожалению, похоже, что библиотека была разработана с использованием базовых маркеров, на самом деле я получаю ошибки, потому что мой класс не реализует методы, определенные в google.maps.Marker . Можно ли использовать MarkerClusterer , сохраняя мои собственные маркеры?

РЕДАКТИРОВАТЬ: это было намного проще, чем я ожидал, я решил, реализовав 2 метода в моем собственном классе:

setVisible () и getPosition ()

для того, чтобы помочь другим, следующий мой интерфейс (без полной реализации):

BFPushpin = function(config) 
{
    this.setMap(config.map);
    this.set("position", config.position);
    // other settings...
};

// my class extends google.maps.OverlayView
BFPushpin.prototype = new google.maps.OverlayView();

BFPushpin.prototype.getBounds = function() 
{
    return new google.maps.LatLngBounds(this.position, this.position); 
};

BFPushpin.prototype.getPoint = function() 
{
    var bounds = this.getBounds();
    var projection = this.getProjection();
    var sw = projection.fromLatLngToDivPixel(bounds.getSouthWest());  
        var ne = projection.fromLatLngToDivPixel(bounds.getNorthEast()); 

    return new google.maps.Point(sw.x, ne.y);
};

BFPushpin.prototype.getSuperContainer = function()
{
    var panes = this.getPanes();
    return jQuery(panes ? panes.overlayImage : "");
};

BFPushpin.prototype.getContainer = function()
{
    // return inner container
};

BFPushpin.prototype._generatePopupContent = function()
{
    // return markup for the popupwindow
};

BFPushpin.prototype._addListeners = function()
{
    // add handlers for the pushpin
};

BFPushpin.prototype.onAdd = function()
{
    // customize content here
};

BFPushpin.prototype.onRemove = function()
{
    // remove pin container here
};

BFPushpin.prototype.draw = function()
{
    // set display style here
};

BFPushpin.prototype.setVisible = function(visible)
{
    // set display block or hidden
};

BFPushpin.prototype.getPosition = function()
{
    return this.position;
};
Автор: daveoncode Источник Размещён: 09.07.2019 06:06

Ответы (2)


2 плюса

Решение

Или просто определите функции, которые MarkerClusterer ожидает от маркера. setMap и getPosition () и некоторые другие.

Автор: skarE Размещён: 29.11.2011 12:14

1 плюс

Вы, вероятно, должны определить свой новый класс маркера таким образом, чтобы он также наследовал google.maps.Marker(то есть, чтобы он реализовывал свой интерфейс). Логично, что MarkerClusterer использует этот интерфейс - он должен предполагать, что маркеры являются маркерами для работы с ними :-)

Автор: TMS Размещён: 28.11.2011 07:35
Вопросы из категории :
32x32