Опять про LayerSwitcher
-
- Участник
- Сообщения: 94
- Зарегистрирован: 05 июл 2010, 07:58
- Репутация: 0
Опять про LayerSwitcher
Всем добрый день!
Изучаем MapServer.
Создали карту, добавили штук 5 слоев (из шейпов). Проверили отрисовку на html-шаблонах (как в инструкции) - всё путём. Слои включаются/выключаются как надо.
Теперь решили прикрутить к нему OpenLayers и тут началось.
Сначала в LayerSwitcher-е все слои помещались в радио-баттоны и переключались по очереди. Потом догадались убрать у них статус базовых и они начали отображаться чек-боксами. Но они всё равно рисуются только попеременно. Пробовали назначить transparent: "true", хотя это как-то странно, особенно для линейных слоёв.
Тем не менее, одновременно виден только какой-то один слой, который перекрывает даже базовый.
Помогите, кто чем может...
Изучаем MapServer.
Создали карту, добавили штук 5 слоев (из шейпов). Проверили отрисовку на html-шаблонах (как в инструкции) - всё путём. Слои включаются/выключаются как надо.
Теперь решили прикрутить к нему OpenLayers и тут началось.
Сначала в LayerSwitcher-е все слои помещались в радио-баттоны и переключались по очереди. Потом догадались убрать у них статус базовых и они начали отображаться чек-боксами. Но они всё равно рисуются только попеременно. Пробовали назначить transparent: "true", хотя это как-то странно, особенно для линейных слоёв.
Тем не менее, одновременно виден только какой-то один слой, который перекрывает даже базовый.
Помогите, кто чем может...
Жизнь - это эксперимент, поставленный на себе.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Опять про LayerSwitcher
Слои опубликованы и подключаются в OpenLayers по WMS? Что странного в transparent? Так оно и работает.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 94
- Зарегистрирован: 05 июл 2010, 07:58
- Репутация: 0
Re: Опять про LayerSwitcher
А мы делаем OpenLayers.Layer.MapServer. Или это уже "устаревший" подход и надо делать WMS? Или вообще Vector Layer?
Просто мы думали, что OpenLayers отправляет MapServer-у запрос на новую карту при смене видимости слоев и возвращает одну (как при работе с html-шаблоном), а он, судя по всему, запрашивает каждый слой отдельно и перекрывает все нижние. Так что ли?
Просто мы думали, что OpenLayers отправляет MapServer-у запрос на новую карту при смене видимости слоев и возвращает одну (как при работе с html-шаблоном), а он, судя по всему, запрашивает каждый слой отдельно и перекрывает все нижние. Так что ли?
Жизнь - это эксперимент, поставленный на себе.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Опять про LayerSwitcher
Если вы изучаете OpenLayers (а не MapServer, как написано в первом сообщении, т.к. OL не является частью MS, а только является распространенным клиентом к нему), то смею предложить вам вооружиться Firefox+Firebug или любой другой связкой browser+debugger чтобы наглядно увидеть, как происходит общение клиента с сервером в виде HTTP-запросов, а также как устроен front-end (код, выводящий слои и т.п.) самого OpenLayers во время работы. Уверяю, это очень добавляет понимания и избавляет от восприятия любого HTML+JS фреймворка, как этакого "черного ящика", которому на вход скармливают параметры, а он делает с ними неизвестно что.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Опять про LayerSwitcher
Если вы используете класс MapServer, то вы завязываетесь на конкретный рендерер, поэтому я бы все-таки советовал использовать WMS. Да, каждый отмеченный в списке слой запрашивается отдельно - это вполне ожидаемое поведение и чтобы слои не перекрывали друг друга используйте в WMS-запросе параметр прозрачности, в OpenLayer он будет добавлен автоматически, если в настройках WMS-слоя указать transparent:true.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Опять про LayerSwitcher
Вспомнилось - по-моему, у GeoExt есть какая-то конструкция, позволяющая из коробки без дописывания запрашивать разные слои WMS склеенными вместе.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Опять про LayerSwitcher
Может я что-то не так понял, но зачем GeoExt, когда это делается простым указанием имен слоев через запятую в свойстве layers, например, layers: "modis,global_mosaic". Но тогда мы теряем возможность управлять видимостью отдельных слоев из контрола управления слоями.ericsson писал(а):Вспомнилось - по-моему, у GeoExt есть какая-то конструкция, позволяющая из коробки без дописывания запрашивать разные слои WMS склеенными вместе.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Опять про LayerSwitcher
Про GeoExt просто вспомнилось, в том смысле, что не везде слои по одному грузятся все же.
Там вроде (сейчас что-то не могу найти это) была опция для запроса слоев отдельно или вместе.
Что дописать такое можно в любом фреймворке, который это сам по себе не умеет - это понятно.
Там вроде (сейчас что-то не могу найти это) была опция для запроса слоев отдельно или вместе.
Что дописать такое можно в любом фреймворке, который это сам по себе не умеет - это понятно.
-
- Участник
- Сообщения: 94
- Зарегистрирован: 05 июл 2010, 07:58
- Репутация: 0
Re: Опять про LayerSwitcher
С прозрачностью заработало, хотя конечно это не совсем то, что перекрытие реальных векторных слоев.
Про указание имен слоев через запятую мы догадались. Только нам нужно, чтобы юзер, как в обычных ГИС-ах слои выбрал и карта перерисовалась. Думали,что OL будет сам этот запрос формировать, но фиг-то. Похоже это придется нам как-то делать. Может с помощью html-менеджера слоев, который здесь на форуме раньше звучал.
Ладно, всем спасибо за помощь.
А напоследок еще вопрос - с OpenLayers.Layer.Vector вообще не стоит заморачиваться? При его использовании MapServer вообще где-то сбоку остается? И, я так понимаю, проблемы резки на тайлы и т.п. придется решать самостоятельно?
Пардон за беспокойство - никогда раньше веб-гисами не занимались.
Про указание имен слоев через запятую мы догадались. Только нам нужно, чтобы юзер, как в обычных ГИС-ах слои выбрал и карта перерисовалась. Думали,что OL будет сам этот запрос формировать, но фиг-то. Похоже это придется нам как-то делать. Может с помощью html-менеджера слоев, который здесь на форуме раньше звучал.
Ладно, всем спасибо за помощь.
А напоследок еще вопрос - с OpenLayers.Layer.Vector вообще не стоит заморачиваться? При его использовании MapServer вообще где-то сбоку остается? И, я так понимаю, проблемы резки на тайлы и т.п. придется решать самостоятельно?
Пардон за беспокойство - никогда раньше веб-гисами не занимались.
Жизнь - это эксперимент, поставленный на себе.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Опять про LayerSwitcher
Объясните что такое "перекрытие реальных векторных слоев" и чем вас не устроил вариант с прозрачностью?
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 94
- Зарегистрирован: 05 июл 2010, 07:58
- Репутация: 0
Re: Опять про LayerSwitcher
Мы хотим создать замену ArcReader-у. Избавиться от его установки на каждую машину и т.д. В его проекте у нас может быть включено одновременно по 15-20 слоёв по выбору пользователей.
При работе по "устаревшей" схеме через html-шаблоны (я надеюсь, что все в курсе, кто читал "Начало работы с МС") все получается хорошо. Но, говорят, что не рационально - загружает сервер.
Если использовать прозрачность, допустим 0,5, то уже на 3-4 м слое видно разницу - всё, как сквозь кальку. Этот способ подходит только для отображения 1-2 слоев поверх базового. Мы его тоже будем использовать. Только сначала получим от МС карту со сгруппированными слоями.
А векторный слой, уже сам себе отвечаю, больше подходит, судя по всему, для рисования поверх карты. Тоже пригодится.
При работе по "устаревшей" схеме через html-шаблоны (я надеюсь, что все в курсе, кто читал "Начало работы с МС") все получается хорошо. Но, говорят, что не рационально - загружает сервер.
Если использовать прозрачность, допустим 0,5, то уже на 3-4 м слое видно разницу - всё, как сквозь кальку. Этот способ подходит только для отображения 1-2 слоев поверх базового. Мы его тоже будем использовать. Только сначала получим от МС карту со сгруппированными слоями.
А векторный слой, уже сам себе отвечаю, больше подходит, судя по всему, для рисования поверх карты. Тоже пригодится.
Жизнь - это эксперимент, поставленный на себе.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Опять про LayerSwitcher
Стоп. Вы наверное что-то не так делаете - прозрачность в случае WMS - это не процент прозрачности слоя, а признак того, что слой имеет прозрачный фон. Вот посмотрите нашу систему по Таймырскому заповеднику - там все слои (за исключением спутниковой съемки) - WMS и ничто никого не перекрывает.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 94
- Зарегистрирован: 05 июл 2010, 07:58
- Репутация: 0
Re: Опять про LayerSwitcher
Понятно. Спасибо за интересную ссылку. В общем, рецепты собрали, будем сейчас комбинировать. Я думаю, совместим прозрачность с запросом группы слоев.
Жизнь - это эксперимент, поставленный на себе.
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: Опять про LayerSwitcher
Это тоже можно сделать, просто придётся немного попрограммировать на JavaScript. Типа такого:Denis Rykov писал(а):это делается простым указанием имен слоев через запятую в свойстве layers, например, layers: "modis,global_mosaic". Но тогда мы теряем возможность управлять видимостью отдельных слоев из контрола управления слоями.
Код: Выделить всё
var wmsLayer = new OpenLayers.Layer.WMS("WMS", url,
{
transparent: true,
format: "image/png"
},
{
displayInLayerSwitcher: false,
visibility: false
});
mapControl.addLayer(wmsLayer);
var allLayers = [];
function applyLayerVisibility()
{
var layers = [];
for( var i = 0; i < allLayers.length; i++ )
{
var layer = allLayers[i];
if( vehicleLayer.getVisibility() )
layers.push(layer.layer_id);
}
if( layers.length > 0 )
{
wmsLayer.mergeNewParams(
{
layers: layers.join()
});
wmsLayer.setVisibility(true);
}
else
{
wmsLayer.setVisibility(false);
}
}
var layer1 = new OpenLayers.Layer("Layer 1",
{
layer_id: "layer1",
eventListeners: {
"visibilitychanged": applyLayerVisibility
};
});
mapControl.addLayer(layer1);
allLayers.push(layer1);
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя