Клуб API Карт

Правильная ли конструкция с точки зрения производительности?

p13mm
14 января 2015, 22:34

Данные на карту выводятся через ObjectManager по требованию


Необходимо отобразить все метки на карте так, чтобы они были видны, для чего используется следующий код:

$.ajax({
            url: '/points.php',
            dataType: 'json'
        })
        .done(function (data) {
            // Если всё ок - добавим метки на карту
            objectManager.add(data);
   
            // Теперь надо бы найти максимальные и минимальные координаты точек
            // Для этого определим изначальные "координаты"
            var maxLat = 0,
                maxLon = 0,
                minLat = 100,
                minLon = 100;
            // пройдёмся в цикле по всем координатам
            objectManager.objects.each(function (object) {
                var lat = object.geometry.coordinates[0],
                    lon = object.geometry.coordinates[1];
                // Определим максимальные и минимальные результаты
                maxLat = (lat <= maxLat) ? maxLat : lat;
                maxLon = (lon <= maxLon) ? maxLon : lon;
                minLat = (lat >= minLat) ? minLat : lat;
                minLon = (lon >= minLon) ? minLon : lon;
            }, myMap);
   
            // Установим границы карты в соответсвии с полученными данными
            myMap.setBounds([[minLat, minLon], [maxLat, maxLon]]);
        })
        .fail(function () {
            console.log("error");
        });

 

Вопрос:
Правильная ли это конструкция с точки зрения производительности, или возможно как то проще это реализовать?

7 комментариев
Подписаться на комментарии к посту

Лучше выставлять setBounds до добавления точек - будет меньше лишних отрисовок.

В одном и будущих релизов появится метод getBounds у ObjectManager

Спасибо за ответ!

Будем с нетерпение ждать getBounds у ObjectManager :-)

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

В принципе при асинхронной отрисовке меток (как оно и есть по дефолту), лишние действия не должны быть вообще видны на приборах

Вот собственно весь код: http://demomap.pafnuty.name/ajaxmapcat.html

точек конечно очень мало, но не думаю, что их количество не сильно лияет на objectManager

Посмотрела на пример, в принципе все понятно, верхний комментарий в силе

можно же возвращать промис

А что это изменит, по факту у тебя все равно then промиса отработает уже после того, как объекты добавятся на карту