Страница 1 из 1

OpenLayers. Кластеризация при динамическом добавлени feature

Добавлено: 25 апр 2014, 09:41
morli
Как заставить работать кластеризацию, если добавлять feature не массивом сразу, а динамически
Если добавлять динамически, то только самый первый объект отображается на карте

Код: Выделить всё

  this.layer = new OpenLayers.Layer.Vector.Click('myLayer',
                         {strategies: [new OpenLayers.Strategy.Cluster({distance: 30, threshold: 2})],
                         });

 периодически вызывается: this.layer.addFeatures([myObject]);
 кластеризация не работает
сейчас приходиться "мудрить"

Код: Выделить всё

  var fe = [];
  for (var id in myObjects) {
    if (!myObjects.hasOwnProperty(id)) continue;  
    fe.push(myObjects[id]);
    }
 this.layer.removeAllFeatures();
 this.layerCars.addFeatures(fe);

 ЗЫ список myObjects используется и в других местах
а есть ли какие-нибудь штатные средства для "перерасчета" кластеризации поле добавления объекта?

Re: OpenLayers. Кластеризация при динамическом добавлени fea

Добавлено: 26 апр 2014, 13:08
Denis Rykov
Вроде всё правильно делаете, так устроена кластеризация в OpenLayers. Можно сделать так (проверено на этом примере (можно открыть консоль, ввести туда этот код и посмотреть, что получится)):

Код: Выделить всё

layer = map.layers[1];

cl_strategy = layer.strategies[1];
oldfeatures = cl_strategy.features;

// Сохраняем объекты слоя в отдельный массив
newfeatures = [];
for (var i=0; i<oldfeatures.length; i+=1) {
    newfeatures.push(oldfeatures[i]);
}

// Добавляем в этот массив новые объекты
newfeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(15028131.255, -2875744.6239519357));
newfeatures.push(newfeature);

// Обновляем слой
layer.removeFeatures(layer.features);
layer.addFeatures(newfeatures);
Если посмотрите код этого примера, то увидите, что перекластеризация осуществляется аналогичным образом: сначала объекты удаляются из слоя, затем добавляются снова с новыми параметрами стратегии.