Google Maps MarkerClusterer не отображает правильное количество маркеров

Я создал карту, использующую библиотеку MarkerClusterer. Вроде работает, но есть пара вопросов.

Во-первых, кажется, что количество маркеров, представляемых кластером, иногда немного отличается - т. е. иногда кластер говорит, что у него 24 маркера, но когда вы щелкаете по нему, в окне отображается 40 маркеров.

Во-вторых, как только вы уменьшите масштаб на несколько уровней, числа станут сумасшедшими — у нас есть только 4k+ маркеров, а я получаю кластеры с 12k+ числами на них.

Я понятия не имею, как двигаться дальше. Хотелось бы помощи. Спасибо!


person Mark Landry    schedule 22.07.2012    source источник
comment
Можете ли вы добавить MCVE? (stackoverflow.com/help/mcve) Это очень помогло бы нам ответить на ваш вопрос.   -  person Flame_Phoenix    schedule 09.09.2016


Ответы (1)


У вас есть прослушиватель событий, который вызывает showMarkers, когда карта простаивает. Эта функция добавляет все маркеры в кластеризатор каждый раз, когда срабатывает событие бездействия (таким образом, вы получаете несколько копий каждого маркера). Вероятно, вам нужен addListenerOnce вместо addListener.

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

person geocodezip    schedule 22.07.2012
comment
На самом деле addListenerOnce работает, но если вы увеличиваете масштаб, маркеры в новых границах не добавляются - - person Mark Landry; 24.07.2012
comment
все еще в тупике ... я попытался очистить кластеризатор, а затем повторно добавить маркеры, но не могу заставить его работать ... - person Mark Landry; 24.07.2012
comment
Ваша ссылка в вашем вопросе больше не работает (я получаю 404). Одна мысль, не глядя на код, измените свой код, чтобы он загружал все маркеры, а не только те, которые видны, и используйте addListenerOnce. Другим вариантом было бы заставить работать очистку кластеризатора, но вы должны быть осторожны с этим, поскольку вы не хотите, чтобы несколько запросов были активны одновременно, и вы не можете помочь вам с этим, не видя ваш или существующий код. - person geocodezip; 24.07.2012
comment
извините - возиться с несколькими - вот ссылка: ссылка - это работает хорошо, если я загружу все маркеры, но у нас их много и будет больше - было бы здорово заставить это работать, загружая только маркеры в окне просмотра... - person Mark Landry; 24.07.2012
comment
Мне удалось очистить массив маркеров до его перезагрузки, что, кажется, дает правильные числа, но я не понял, как очистить кластеры, а затем перезагрузить. - person Mark Landry; 24.07.2012
comment
MarkerClustererPlus имеет метод clearMarkers(), вы используете его? Обратите внимание, что ваша карта не работает (отображает серый прямоугольник, а не карту), если я не разрешаю ей доступ к моему местоположению. - person geocodezip; 25.07.2012
comment
Я пробовал clearMarkers() сразу после очистки массива маркеров, но, похоже, это не имеет значения. Спасибо за внимание к проблеме местоположения. Очень ценю ваш вклад. - person Mark Landry; 27.07.2012
comment
Сбой геолокации по-прежнему приводит к серому окну, javascript чувствителен к регистру, Denver и denver различаются (Uncaught ReferenceError: denver не определен). После этого я получаю еще одну ошибку javascript: Uncaught TypeError: Cannot call method 'getNorthEast' of undefined, вероятно, потому, что карта не инициализирована. Я не вижу четких маркеров на вашей живой карте. Я вижу, что вы создаете новый MarkerClusterer каждый раз, когда загружаете маркеры, я бы предложил просто создать его один раз (в вашей функции инициализации), затем очистить его и перезагрузить в вашей функции showMarkers. - person geocodezip; 27.07.2012
comment
Все еще не работает, если я запрещаю геолокацию. Это сработает, если я отправлю Денвер, Ко в Центре в другом адресном поле и отправлю его. - person geocodezip; 28.07.2012