OpenLayers: итерация по слоям

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

OpenLayers: итерация по слоям

Сообщение Denis Rykov » 10 ноя 2010, 13:27

Допустим, у нас есть 2 слоя lay1 и lay2. Как можно с помощью цикла for ... in пройтись по свойствам этих слоёв? Попробовал конструкцию вида for l in [lay1,lay2], но она совершает обход по индексам массива, а не по элементам. Остановился на варианте вида:

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

k={'one':'lay1', 'two':'lay2'}
for (l in k){
    alert(k[l].name);
} 
Можно ли как-то обойтись без создания хэша?
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers: итерация по слоям

Сообщение Mavka » 10 ноя 2010, 14:53

Вы хотите как в python?

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

for s in ['a', 'b', 'e']:
     print s
В js так не получится. Ваш вариант тоже не плох, но я бы заменил хэш на массив:

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

k = [lay1, lay2] 
P.S. Нашел интерпретатор js как раз на такой случай - Interpreter. А вот offline только за денежку :(
лангольеры под окном жрали время ом-ном-ном

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

Re: OpenLayers: итерация по слоям

Сообщение Denis Rykov » 10 ноя 2010, 16:11

Спасибо, посмотрю, что за интерпретатор.
Mavka писал(а):Вы хотите как в python?

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

for s in ['a', 'b', 'e']:
     print s
Угу, с питоном побольше опыта, привык к такому поведению.
Spatial is now, more than ever, just another column- The Geometry Column.

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

Re: OpenLayers: итерация по слоям

Сообщение Denis Rykov » 11 ноя 2010, 06:32

Кстати, какой из вариантов обхода массива предпочтительней или они равнозначны (lay в данном случае векторный слой)?

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

for (var i = 0; i<lay.features.length; i++) 
или

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

for (feat in lay.features) 
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers: итерация по слоям

Сообщение Mavka » 11 ноя 2010, 12:55

По-моему - без разницы, в тексте стандарта рекомендаций не нашел.

Что то подобное вашей задумке есть в JavaScript 1.7, кажется через оператор let() можно провернуть подобную штуку. Но 1.7 работает только в FireFox, а вариант 1.8 хоть и стал стандартом ECMAScript version 5, но еще не реализован полностью в других браузерах.
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers: итерация по слоям

Сообщение Mavka » 11 ноя 2010, 18:45

Есть, нашел! Вот так это делается:

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

a = ['a', 'b', 'c'];
a.forEach(function(a) {
      alert(a);
});  
Со слоями:

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

lay1 = {name: 'aaa', count: 1};
lay2 = {name: 'bbb', count: 2};

arr = [lay1, lay2];
arr.forEach(function(arr) {
      alert(arr.name + ' # ' + arr.count);
}); 
А еще хорошую консоль нашел, для FireFox - Execute JS.
лангольеры под окном жрали время ом-ном-ном

Ответить

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

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

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