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

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

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

Сообщение Denis Rykov »

Можно ли как-то автоматизировать создание большого количества однотипных слоёв, отличающихся только источником данных? То есть на входе имеем некоторый хэш с названиями слоёв и путями, например:

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

layersList = {'Слой1':[layer1,"data/layer1"],'Слой2':[layer2,"data/layer2"]}
а затем в цикле пробегаем по ним и создаём слои.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение Mavka »

В целом, задача простая, но поставлена так каверзно, что ей место на олимпиаде по программированию. Это ж надо так талантливо замешать массивы и хэши.

Код не тестировал:

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

for (i in layersList) {
    layersList[i][0] = new OpenLayers.WMS(
        layersList[i],                // 'Слой1'
        url_server,
        {layers: layersList[i][1]},   // 'layer1'
        {isBaseLayer: false}
    );
} 
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение 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].
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение 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'
        ...
    ),
    ...
] 
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov »

Mavka, спасибо, так работает!
Spatial is now, more than ever, just another column- The Geometry Column.
Ответить

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

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

Сейчас этот форум просматривают: Semrush [Bot] и 2 гостя