Pull to refresh

Comments 26

Группировка маркеров делается не только для удобства восприятия, но и для показа большого количества маркеров. Тут уже на 100 маркерах фф на каждый зум думает по 5 секунд, ие вываливает алярм: «Сценарий на этой странице замедляет работу IE...», а мега-быстрый хром через раз показывает несгруппированные маркеры: b23.ru/erfx И это при 100 маркерах.
Идею делаете правильную, но как это используете на продакшне не понимаю.
В закладки и слежу за развитием.
Привет, b23.ru/erfx — вариант threshold-зума, >=12 (группировка снимается, этот параметр разъяснён).

Более 100 маркеров отображать на карте не требовалось, это решение конкретной задачи конкретным инструментом. На продакшене карта — своего рода элемент управления, отображается список из 10 объектов и, соответственно, 10 маркеров на карте. При навигации по карте перестраивается список => перестраиваются маркеры на карте. Конечно, при 1000 маркерах страницу будет страшно загружать.
Есть у нас вариантик группировки маркеров
Работает немного по другим принципам и малек хитрее.
И быстрее.
При этом отображаемые группы никогда, ни при каких сдвигах за пределы экрана «и еще чуть чуть» не меняются.
Но при этом умеют динамически перестраиваться при зуме и\или выключении\выключении слоев( те при изменении набора обьектов)

Наверное уже на этой недели раскажем как это делается
Если мне глаза мои не изменяют у вас реализация на основе карт яндекса, а у нас тут о гугле речь. Но плюс я вам таки поставил потому как реализация хорошая.
Не поверите — то тама в углу есть кнопочка «google» — которая как раз на V3 :)
судя по жирному ответу на передвижение по карте (превышает лимит фаербага), да и по ключам а-ля ID_PH_PFILE они для группировки задействуют серверную сторону (работает быстро и кошерно, просто летает). Могу ошибаться, но это немного не интерфейс для добавления и группировки маркеров непосредственно на карту.
ответ сервера работает через тайлы
на серверной стороне никакой кластеризации нету, разве только параметер CNT у записи, который по указаной мною ссылке — обычно гдето около трех(«CNT»:3.3090909090909), что говорит что реально в данном тайле данных в три раза больше чем отображено, те можно и нужно их уточнить при зуме, и изначально схлопнуть маркеры в группы
ID_PH_FILE — номер фотки, который надо стереть наверное.

Могу ошибаться, но это немного не интерфейс для добавления и группировки маркеров непосредственно на карту.
ядром системы является кластермаркер который и командует всем отображением
А вы можете поделиться своей реализацией?
Если честно то она очень напоминает вот это Leaflet.markercluster
Именно в данный момент, 4 года спустя, там леафлет. Точнее достаточно эээ прямолинейное использование базовых возможностей леафлета.
«старый добрый» весовой grid-based кластеринг можно найти на tilitesto, esosedi и camteria
Делиться реализацией смысла нет, так как оно тащит за собой все остальные кишки. Могу просто сказать что кластеризатор на YandexMaps API работает практически также.

А так все просто — мир делиться на квады. В пределах одного квада производиться расчет пересечения обектов, после чего они по весовой(куда ближе сдвинуться) функции «схлопываются» в кластера. После чего операция повторяется для сетки смещенной ровно наполовину — таким образом нивелируются ошибки на стыках квадов.

Одно плохо — описанное правильно работало на гдедоме, а потом я как-то не особо заморачивался правильностью настроек.
спасибо за ответ.
Проглядывая статью, умудрился прочитать как «хабростатью» как «хабрость». Храбрость — хабрость. Много думал. :)
Готовый слоган, прям:

А ты Хабрахрабр? :)
«На хабре храбро отхарбрил хабрачеловека». ;) Варианты принимаются.
На хабре храбро отхабрил хабрахабрера
Уже несколько месяцев существует официальный гугловский marker cluster для API V3, хорошо сделан и работает достаточно шустро. Так что с велосипедом вы немного опоздали. :)
Как работает marker cluster в API V3 можно увидеть у меня на www.blog-map.ru
он не поддерживает динамической подгрузки данных\изменение обьектов
Какая может быть динамическая погрузка если решение на чистом js? Так же как и автора топика.
У меня он вполне успешно затормозил FF до черепашьего состояния…
У меня он достаточно хорошо работает в ff даже при количестве маркеров больше 1000, в остальных браузерах еще быстрее (кроме ie)
не путайте markermanager и markerkluster это же как носорога с пуговицей сравнивать по органолептическим критериям.
Группировка по квадратно-гнездовым ячейкам плоха тем, что при большой плотности объектов на карте эта квадратность становится явно видимой.

Проблема всех клатеризаторов в том, что они может и работают работают на тысячах маркеров, но на десятках и сотнях тысяч толку от них никакого. На действительно больших объёмах кластеризовать надо исключительно на сервере, с кэшированием и всем прочим. И выводить не в виде маркеров, а в виде слоя-оверлея, на котором маркеры нарисованы…
Отвечу на пункт два:
В отличие от терминалов клиентов — сервер не резиновый, так как он один, или, по крайней мере «его» меньше чем клиентов. Правда сотню тысяч вы на клиент не передадите.
Лично мы решили эту проблему просто — при передача блока из 100 обьектов, если их там 100000 — передается также информация «что их там на самом деле больше», что приводить в схлопыванию в группу даже одиночных маркеров.

А вот как заресолвить пункт номер один — даже не знаю как вы не додумались…
Да, квадратно гнездовая ячейка ничего не знает о маркерах своих соседей, и как результат на выходе можем получить не красивость.
Решение просто — надо применить тотже алгоритм, с немного другой сеткой и сдвинутой на половину своего размера — она как раз сгрупирует скопления на границах.
много ошибок моя писать, сторона темная силы меня подери
Автору спасибо за статью, тоже думал в этом направлении. Но как оказалось все гениальное просто — вместо рисования сеток лучше использовать округление координат точек.
Sign up to leave a comment.

Articles