У меня есть карта с пользовательскими маркерами HTML и MarkerClusterer, кластер работает отлично, но я хочу отфильтровать маркеры по радиусу до местоположения, я могу получить маркеры внутри заданного радиуса , однако я не могу скрыть маркеры за пределами данного радиуса и показать только маркеры внутри этого радиуса от MarkerClusterer.Пользовательский HTML-маркер Google Maps и MarkerClustererPlus
я определяю свой собственный маркер, как это:
function CustomMarker(latlng, map, args)
{
this.latlng = latlng;
this.args = args;
this.setMap(map);
this.map = map;
}
CustomMarker.prototype = new google.maps.OverlayView();
CustomMarker.prototype.draw = function()
{
var self = this;
if (!this.div)
{
var div = document.createElement('div');
div.className = 'marker';
div.style.position = 'absolute';
div.style.cursor = 'pointer';
var span = document.createElement('span');
span.innerHTML = 'X';
div.appendChild(span);
var panes = this.getPanes();
panes.overlayImage.appendChild(div);
this.div = div;
}
var point = this.getProjection().fromLatLngToDivPixel(this.latlng);
if (point)
{
this.div.style.left = (point.x - 20) + 'px';
this.div.style.top = (point.y - 20) + 'px';
}
google.maps.event.addDomListener(this.div, "click", function (event)
{
google.maps.event.trigger(self, "click");
});
};
CustomMarker.prototype.remove = function()
{
if (this.div)
{
this.div.parentNode.removeChild(this.div);
this.div = null;
}
};
CustomMarker.prototype.getPosition = function()
{
return this.latlng;
};
CustomMarker.prototype.getDraggable = function()
{
return false;
};
CustomMarker.prototype.setVisible = function (visible)
{
if (this.div)
{
if (visible)
{
this.div.style.display = 'table';
this.visible = true;
}
else
{
this.div.style.display = 'none';
this.visible = false;
}
}
};
CustomMarker.prototype.getVisible = function()
{
return this.visible;
};
Я использую MarkerClustererPlus и используя setIgnoreHidden(true)
скроет все маркеры, включая маркер, который должен быть виден.
Я заметил, что marker.getVisible()
, который используется MC + при использовании setIgnoreHidden(true)
, возвращает false для маркеров вне данного радиуса, как и ожидалось, но не определено для маркеров внутри кластера.
Я думаю, что это происходит потому, что когда создается кластер, элементы внутри него удаляются, а не просто скрываются, поэтому устанавливают их на нуль.
CustomMarker.prototype.remove = function()
{
if (this.div)
{
this.div.parentNode.removeChild(this.div);
this.div = null;
}
};
См. Пример JS Fiddle.
https://jsfiddle.net/enriqg9/az21h1b5/
Спасибо! Ваше решение действительно работает. – enriqg9