Страница 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"]}; 
Можете потом присвоить и пользоваться:

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

layer1 = layersList['Слой1'][0] 
На практике, обычно, создают массив слоев и работают с ним:

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

var layers = [
    new OpenLayers.WMS('Слой1'
        ...
    ),
    new OpenLayers.WMS('Слой2'
        ...
    ),
    ...
] 

Re: OpenLayers: создание большого количества слоёв

Добавлено: 11 окт 2010, 12:09
Denis Rykov
Mavka, спасибо, так работает!