Страница 1 из 1
OpenLayers: создание большого количества слоёв
Добавлено: 11 окт 2010, 07:54
Denis Rykov
Можно ли как-то автоматизировать создание большого количества однотипных слоёв, отличающихся только источником данных? То есть на входе имеем некоторый хэш с названиями слоёв и путями, например:
Код: Выделить всё
layersList = {'Слой1':[layer1,"data/layer1"],'Слой2':[layer2,"data/layer2"]}
а затем в цикле пробегаем по ним и создаём слои.
Re: OpenLayers: создание большого количества слоёв
Добавлено: 11 окт 2010, 10:38
Mavka
В целом, задача простая, но поставлена так каверзно, что ей место на олимпиаде по программированию. Это ж надо так талантливо замешать массивы и хэши.
Код не тестировал:
Код: Выделить всё
for (i in layersList) {
layersList[i][0] = new OpenLayers.WMS(
layersList[i], // 'Слой1'
url_server,
{layers: layersList[i][1]}, // 'layer1'
{isBaseLayer: false}
);
}
Re: OpenLayers: создание большого количества слоёв
Добавлено: 11 окт 2010, 10:59
Denis Rykov
Я сразу так попробовал:
Код: Выделить всё
var layer1;
layersList = {'Слой1':[layer1,"data/layer1"]};
for (i in layersList) {
layersList[i][0] = new OpenLayers.WMS(
"",
url_server,
{layers: layersList[i][1]},
{isBaseLayer: false}
);
}
Но почему-то после этого слои недоступны через layer1, а только через layersList['Слой1'][0].
Re: OpenLayers: создание большого количества слоёв
Добавлено: 11 окт 2010, 11:16
Mavka
Вот эта команда передает в массив значение layer1 (а не ссылку на переменную):
Код: Выделить всё
layersList = {'Слой1': [layer1,"data/layer1"]};
т.е. в итоге вы получите
Код: Выделить всё
layersList = {'Слой1': [null,"data/layer1"]};
Можете потом присвоить и пользоваться:
На практике, обычно, создают массив слоев и работают с ним:
Код: Выделить всё
var layers = [
new OpenLayers.WMS('Слой1'
...
),
new OpenLayers.WMS('Слой2'
...
),
...
]
Re: OpenLayers: создание большого количества слоёв
Добавлено: 11 окт 2010, 12:09
Denis Rykov
Mavka, спасибо, так работает!