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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
morli
Интересующийся
Сообщения: 15
Зарегистрирован: 08 окт 2013, 16:35
Репутация: 0

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

Сообщение morli » 25 апр 2014, 09:41

Как заставить работать кластеризацию, если добавлять 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 используется и в других местах
а есть ли какие-нибудь штатные средства для "перерасчета" кластеризации поле добавления объекта?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 26 апр 2014, 13:08

Вроде всё правильно делаете, так устроена кластеризация в 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);
Если посмотрите код этого примера, то увидите, что перекластеризация осуществляется аналогичным образом: сначала объекты удаляются из слоя, затем добавляются снова с новыми параметрами стратегии.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя