Клуб API Карт

Обновить метку, балун, данные

menshakov.artem
18 ноября 2014, 12:46

Ребята, может подскажете, такая ситуация:

на карте рисую метки(объекты), их может быть очень много, поэтому стал такой вопрос, как обновить определённую метку, не перерисовывая все... вот функция, отвечающая за это

 

 var myCollection = new ymaps.GeoObjectCollection();
function refresh() {
    myCollection.removeAll();
    for (var i = 0; i < localStorage.length; i++) {
        if ($.isNumeric(localStorage.key(i))) {
            var all = JSON.parse(localStorage.getItem(localStorage.key(i)));
            //console.log(all);
            var la = all.lat.toString().split(',');
            //console.log(all.lat);
            var status = all.status[0];
            switch (status) {
                case 'ossNone':
                    status = 'twirl#greyIcon';
                    break;
                case 'ossLinkError':
                    status = 'twirl#darkorangeIcon';
                    break;
                case 'ossNoCarier':
                    status = 'twirl#darkorangeIcon';
                    break;
                case 'ossBusy':
                    status = 'twirl#darkorangeIcon';
                    break;
                case 'ossSuccessful':
                    status = 'twirl#greenIcon';
                    break;
                case 'ossTimeout':
                    status = 'twirl#violetIcon';
                    break;
                case 'ossInProgress':
                    status = 'twirl#lightblueIcon';
                    break;
                case 'ossErrorData':
                    status = 'twirl#redIcon';
                    break;
            }
            var myPlacemark = new ymaps.Placemark([la[0], la[1]], {
                // Свойства
                //hintContent: json.markers[i].hinttext,
                balloonContentHeader: all.name[0]
                    //balloonContentBody: json.markers[i].balloontext
            }, {
                // Опции
                preset: status
            });
            myCollection.add(myPlacemark);
        }
    }
    myMap.geoObjects.add(myCollection);
}
setInterval(refresh, 60000)

 

вот собственно, вызываем его каждую минутку, и заместо myCollection.removeAll(); может есть решение попроще? закинуть к примеру только айди меток, которые нужно обновить?

Спасибо за внимание.

8 комментариев

а зачем это делать через setInterval?

а как ещё можно? другого выхода не нашёл... данные же нужно обновлять.

А что за проект у вас?

есть объекты на карте, у них может кто-то изменить статус, чтобы не перезагружать карту каждый раз, я асинхронно каждую минуту собираю статусы в localstorage, и потом обновляю на карте... так насчёт setinterval какие идеи?

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

Можно увидеть ссылку на ваш проект?

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

Вы можете использовать метод geoQuery.search для поиска нужных меток и обновления их.

 

Насчет setInterval, вы можете использовать HTML5 SSE, или, если важна поддержка в ИЕ, WebSocket-ы 

Спасибо огромное, буду разбираться! Скрины надо?:)