Перемещенный маркер исчезает при использовании Marker Clusterer

У меня есть приложение с большим количеством маркеров (отсюда и желание использовать Marker Clusterer), но я хочу разрешить пользователю перемещать маркер. К сожалению, маркер исчезает после его перемещения и уменьшения/увеличения масштаба. Именно эти шаги воспроизводят проблему:

  1. Создайте все маркеры/добавьте их в объект кластеризатора маркеров.
  2. Увеличьте масштаб, чтобы увидеть отдельный маркер.
  3. Переместите маркер в новое место.
  4. Уменьшайте масштаб до тех пор, пока не начнется кластеризация (и сгруппирует перемещенный маркер хотя бы с одним другим маркером).
  5. Увеличьте масштаб, чтобы увидеть маркер, который был перемещен.

Я ожидал, что маркер все еще будет там после увеличения масштаба, но это не так. После шага 3 маркер остается видимым — он исчезает только после уменьшения масштаба, а затем обратно. Кластеризация по-прежнему считает маркер правильно (он появляется в общем количестве кластера при уменьшении масштаба), но маркер больше никогда не появляется.

Я пытался использовать последние версии MarkerClusterer и MarkerClustererPlus, и я имею дело с v3 API карт. Кроме того, у меня есть прослушиватель событий, который вызывает repaint в кластере после появления маркера dragend (думая, что repaint приведет к правильному размещению маркера).

[Изменить] Минимальный пример (основанный на примере Marker Clusterer), демонстрирующий проблему, можно найти здесь. Единственное, что изменилось по сравнению с этим примером — это строки, включающие библиотеки javascript (сделанные абсолютными ссылками) и добавляющие draggable: true к параметрам маркера. Выполнение вышеуказанных 5 шагов должно воспроизвести проблему.


person haz    schedule 02.04.2012    source источник
comment
У меня есть две глупые идеи. Сначала попробуйте google.maps.event.trigger(map, 'resize'). Вторая идея может сработать, если вы сохраните ссылку на все маркеры: в прослушивателе для zoomChanged для всех маркеров сделайте его setVisible(true). Однако, если большое число действительно велико, это нецелесообразно.   -  person Heitor Chang    schedule 02.04.2012
comment
Когда вы предлагаете спустить курок? В прослушивателе событий dragend?   -  person haz    schedule 02.04.2012
comment
Я не уверен, что сработает, потому что я не воспроизвел вашу страницу и дефект здесь. Если маркер всегда был виден после завершения перетаскивания, я говорю, что бессмысленно добавлять какой-либо слушатель в dragend. Я думаю, что поскольку исчезновение связано с уменьшением и увеличением масштаба, попробуйте добавить эту строку: google.maps.event.addListener(map, 'zoomChanged', function() { trigger resize / setVisible });   -  person Heitor Chang    schedule 02.04.2012
comment
Триггер изменения размера, похоже, не работает, и тот факт, что маркер остается видимым после перетаскивания, заставляет меня думать, что видимость не является проблемой. Я думаю, что это больше связано с картой, связанной с маркером (насколько я могу судить, именно так MarkerClusterer скрывает/показывает вещи). Я добавил пример к вопросу.   -  person haz    schedule 02.04.2012
comment
Есть и другие случаи, когда поведение является неожиданным. Например, дважды уменьшите масштаб, и в Северной и Южной Америке ничего не появится. В Северной Америке их более десяти. Я не очень доверяю кластеризатору. Я отказываюсь от вашего вопроса, извините :(   -  person Heitor Chang    schedule 03.04.2012
comment
Да, это еще одна несколько раздражающая ошибка (вероятно, не связанная с проблемой перетаскивания). К счастью, это не проблема в моем приложении. Спасибо, что попробовали.   -  person haz    schedule 03.04.2012


Ответы (1)


Это ошибка, о которой было сообщено команде Google Maps API (ошибка № 167). См. здесь

Он запускается в любое время с помощью setMap(map), за которым следует любое движение маркера (включая анимацию), за которым следует setMap(null). В этот момент маркер не может быть показан снова.

person chuck w    schedule 22.04.2012
comment
См. мой предыдущий пост о подобном поведении (stackoverflow.com/questions/9981763/ - person chuck w; 22.04.2012
comment
Да, я автор 167. Надеюсь, скоро все наладится. - person haz; 22.04.2012
comment
Команда Google Maps API уже исправила ошибку. Вот отчет. - person chuck w; 24.04.2012