Клуб API Карт

Как ускорить прорисовку большого количества объектов на карте, не используя кластеризатор?

MaximusK
19 августа 2014, 16:05

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

 

Ситуация следующая: есть файл *.xml с координатами (Latitude, Longitude) объектов, наносимых на карту. Используя этот файл, формируется коллекция, а затем через foreach, из данной коллекции вытягиваются координаты и объекты наносятся на карту. Проблема в том, что количество объектов составляет 20 000 штук, а кластеризатор не желателен (группировать точки нельзя). Foreach выполняется порядка 7000 мс, а затем наступает долгая прорисовка точек на карте.

Вопрос: Можно ли каким-то образом ускорить процесс (после того как выполнился foreach)? Если да, то как?

Буду благодарен за любую помощь.

 

Выглядит это так:

 

var myMap = null;
                function init() {
                    myMap = new ymaps.Map('map', {                       
                        center : [ 55.753615, 37.619942 ],                   
                        zoom : 11
                    });
       
                    <c:forEach var="each" items="${addressesList}">
                    myMap.geoObjects.add(new ymaps.Circle([[ '${each.getLatitude()}', '${each.getLongitude()}' ], 33 ],
                            {}, {  

                                    fillColor : "${each.getColor()}",
                                    strokeColor : "${each.getColor()}",
                                    strokeWidth : 0
                            }));
                    </c:forEach>
                }
                ymaps.ready(init);       

2 комментария

1. Если на карте нужно одновременно отобразить 20 000 точек, то вам вообще ничего не поможет, кроме как технология активных областей

2. Если точки равномерно распределены по карте и в конкретный момент времени видно порядка 500-1000 точек, то можно попробовать добавлять их на карту через ObjectManager, он создает метки только когда они видны на карте и засчет этого умеет показывать много меток одновременно

Спасибо за быстрый ответ! :-D
Попробую сделать, используя первый предложенный способ.