2016-12-17 5 views
0

Я использую OpenLayers 3 (v3.20). То, что я хочу достичь, - это просто удалить все функции из определенного слоя. Я вижу, что есть clear метод и документация говорит, чтоисточник чистый BUG в OpenLayers 3

ясный (opt_fast)

удалить все компоненты из источника.

Однако, когда я применяю его к моему источнику слоя примерно так:

layer.getSource().clear(); 

Я вижу мерцание (функции удаляются), а затем я вижу запрос на сервер, так что функции перезагружается снова. Таким образом, либо документация неполна, либо есть ошибка.

Я также попытался удалить такие функции, как так:

features = source.getFeatures(); 
for (i = 0; i < features.length; i += 1) { 
    source.removeFeature(features[i]); 
} 

Но это работает очень странно. Если, например, у меня есть четыре функции, когда я цикл один раз, он удаляет только две функции, и когда я цикл дважды, одна дополнительная функция удаляется. В общем, я должен три раза (что действительно НЕ СУХОЙ), чтобы удалить все функции. Я действительно удивляюсь, почему это и как я могу это исправить. Благодаря!

+0

Когда вы смотрите через функции по индексу и удалить номер 1, а затем номер 2 становится новым номером 1. Таким образом, для каждого вы удаляете, вы пропускаете один, то есть только половина из них удаляются. Чтобы обойти это, переверните цикл и вместо этого выполните 'for (var i = features.length -1; i> = 0; i -)'. –

+0

@ Карл-Йохан Sjögren. Хороший совет! Спасибо, сэр! – Jacobian

+0

'layer.clear()' запускает слой карты для перезагрузки после ее очистки. Кстати, это использование функции векторного загрузчика, которая может обойти перезагрузку, если вы устанавливаете флаг при использовании '.clear()'. – GoinOff

ответ

0

Как отметил Карл-Йохан Шёгрен, удаление элемента массива при итерацию через него модифицирует сам массив, таким образом, вы используете обратный массив или использовать встроенную функцию из массива MDN reference:

features = source.getFeatures(); 
features.forEach(function (feature){ 
    source.removeFeature(feature); 
});