Я преобразовал приложение карты OpenLayers 2 в OpenLayers 3. Карта состоит из двух групповых слоев (базовых карт и надстроек), которые определены в коде Javascript. Однако, когда страница загружается (или автоматически обновляется), она считывает из файла XML и динамически загружает слои объектов в карту.OpenLayers 3 removeLayer failure?
Эта часть все хорошо работает. У меня проблема с программой, которая, как часть функции автоматического обновления страницы, должна удалить все динамически добавленные слои.
Мой исходный код:
function erase_and_reload(){
\t \t console.log("erase_and_reload has fired!");
\t \t map.getLayers().forEach(function(layer){
\t \t \t console.log("Existing layer that needs to be removed ?:");
\t \t \t console.log(layer);
\t \t \t
\t \t \t var name = layer.get('name');
\t \t \t var title = layer.get('title');
\t \t \t console.log("layer name = " + name + " layer title = " + title);
\t \t \t if (name){
\t \t \t \t console.log("Found layer named = " + name);
\t \t \t \t console.log("Removing layer named: " + name);
\t \t \t \t map.removeLayer(layer);
\t \t \t }
\t \t \t
\t \t \t
\t \t });
// reload
\t read_WW_xml();
}
(. Да, у меня есть журнал console.log записей в здесь, чтобы попытаться понять вещи)
Так , если я запустил это как есть ... запись в журнале «Существующий слой, который нужно удалить?» получает 10 раз, указывая мне, что 10 слоев. Когда я смотрю на объекты слоя, я вижу базовые карты, Overlays и другие. Но некоторые другие слои, которые действительно имеют свойства «имени», полностью отсутствуют.
Но если я запустил это с линией «map.removeLayer (layer)», прокомментировал, теперь, когда строка «Существующий слой» получается 17 раз! Появилось еще семь объектов слоя!
(FYI: фраза «название» все еще там, потому что сначала я думал, что проблема имеет какое-то отношение к свойству «name», поэтому я временно попробовал сопоставить свойство «title». «если заголовок не« Базовые карты »или« Наложения », а затем removeLayer, но это ведет себя точно так же.)
Даже если .removeLayer не удаляет слой, я думаю, я не уверен почему все это так или иначе прерывании цикл 7 итераций ... до того момента, когда она даже не писать первые два console.logs ??
Спасибо!
- = Dave = -
Вы попробуйте использовать 'map.getOverlays() Clear();' и 'map.getLayers() четкие();'.? – Sefran2
Похоже, если я делаю «layer.getSource(). Clear();» .... но обходит слои с заголовком «Базовые карты» и «Наложения» (что, следовательно, обходит их вложенные слои) ... что, по-видимому, эффективно стирает функции из каждого уровня для перерисовки. НО, независимо от того, нужен ли данный слой с динамическим питанием, когда обновление следующей страницы может измениться. Итак, если я запустил эту вещь в течение нескольких дней, может возникнуть наращивание ненужных слоев. Я хочу, чтобы removeLayer работал! – DaveyBoy