Клуб API Карт

API 2.x - Добавление массива геообъектов в кластерер

koval-andrey2007
18 июля 2012, 16:39

Доброго времени суток!

Необходимо создать карту с больши количеством точек. Для этого используется Кластерер.

Чтобы добавить Кластерер на карту, используется стандартный метод add

cluster.add(myPlacemarks);

 

Но самое длительное время обработки, как я понимаю, занимает процесс создания массива myPlacemarks.

 

Я его создаю способом, описанным в Вашем примере:

for (var i = 0; i < countOfMarkers; i++) { placemark = new ymaps.Placemark(geometry);
myPlacemarks[i] = placemark;
}

Т.к.
countOfMarkers около 1000, работает это долго в IE.
Можно ли создать массив объектов
myPlacemarks по другому, более быстрым способом?
 
7 комментариев
Подписаться на комментарии к посту

От создания объектов никуда не деться - кластеризатору надо с чем-то работать.

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

То есть вы можете реализовать собственные объекты-метки, которые будут реализовывать интерфейс IGeoObject, будут уметь мало, но строиться быстро. Но это, к сожалению, задачка нетривиальная.

koval-andrey2007
18 июля 2012, 17:23

Где можно посмотреть эти "легкие метки"? или это не входит в стандартный функционал?

Если придется реализовать собственные объекты-метки, то могли бы Вы указать пример, как делать?

И последнее, если все-таки не удастся избежать перехода к хотспотам, где можно посмотреть рабочий пример реализации хотспотов на Api 2.0? В документации я нашел примеры только для Api 1.x: http://api.yandex.ru/maps/doc/jsapi/1.x/mod/tasks/how-to-use-hotspots-overlays.xml

"Легкими метками" являются объекты ymaps.Cluster.

Поскольку в режиме debug открывается код, можно глянуть, как эти объекты реализованы.

 

Приведенный пример не совсем корректный - там на карту накладывается единичный оверлей. А вам, как я понимаю, нужны хотспотные слои.

С рабочим примером новых хотспотов пока туго - посмотреть на него негде. Новые хотспоты используют Яндекс.карты для показа пробок, но там ни код не посмотреть, и формат у них свой для данных...

Новый формат подробно описан в документации к hotspot.ObjectSource

Можно почитать обсуждение в клубе http://clubs.ya.ru/mapsapi/replies.xml?item_no=24208.

Пример обещаюсь сделать.

koval-andrey2007
18 июля 2012, 17:25

Я вообще не очень уловил, где преимущество в скорости при использовании кластеров, если объекты для вывода создаются так же по одному, а, как я понял, это долго.

Самое долгое - это отрисовка объектов на карте. Без кластеризатора на карте рисуется 1000 объектов - это очень долго и кладет ие. С кластеризатором рисуется значительно меньше объектов - их количество зависит от настроек + метки-кластеры рисуются быстрее, чем обычные метки.

Попробуйте облегчить ие жизнь и не сразу выводить все 500 объектов, а кусками.

setTimeout в помощь.

Либо же читайте исходники, как вам советовала mari-na-bzzz, и создавайте свой очень легкий объект без всяких оберток - съэкономите секунду другую. Еще учитывайте, что при mode=debug время работы, особенно в ие, может подскакивать до 20-30 раз при больших объемах. А в среднем, по ощущениям, оно вырастает в 5-8 раз в нормальных браузерах.

koval-andrey2007
24 июля 2012, 12:04

я понял, попробую кусками.

По поводу очень легких геообъектов, я как понимаю, речь идет об объекте GoeObject? Несмотря на подробную документацию, хотелось бу где-нибудь подсмотреть пример создания такого "легкого" геообъекта. Где бы это можно было осуществить?