Опять про LayerSwitcher

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Serp
Участник
Сообщения: 94
Зарегистрирован: 05 июл 2010, 07:58
Репутация: 0

Опять про LayerSwitcher

Сообщение Serp » 18 дек 2013, 11:46

Всем добрый день!
Изучаем MapServer.
Создали карту, добавили штук 5 слоев (из шейпов). Проверили отрисовку на html-шаблонах (как в инструкции) - всё путём. Слои включаются/выключаются как надо.
Теперь решили прикрутить к нему OpenLayers и тут началось.
Сначала в LayerSwitcher-е все слои помещались в радио-баттоны и переключались по очереди. Потом догадались убрать у них статус базовых и они начали отображаться чек-боксами. Но они всё равно рисуются только попеременно. Пробовали назначить transparent: "true", хотя это как-то странно, особенно для линейных слоёв.
Тем не менее, одновременно виден только какой-то один слой, который перекрывает даже базовый.
Помогите, кто чем может...
Жизнь - это эксперимент, поставленный на себе.

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

Re: Опять про LayerSwitcher

Сообщение Denis Rykov » 18 дек 2013, 11:52

Слои опубликованы и подключаются в OpenLayers по WMS? Что странного в transparent? Так оно и работает.
Spatial is now, more than ever, just another column- The Geometry Column.

Serp
Участник
Сообщения: 94
Зарегистрирован: 05 июл 2010, 07:58
Репутация: 0

Re: Опять про LayerSwitcher

Сообщение Serp » 19 дек 2013, 05:34

А мы делаем OpenLayers.Layer.MapServer. Или это уже "устаревший" подход и надо делать WMS? Или вообще Vector Layer?
Просто мы думали, что OpenLayers отправляет MapServer-у запрос на новую карту при смене видимости слоев и возвращает одну (как при работе с html-шаблоном), а он, судя по всему, запрашивает каждый слой отдельно и перекрывает все нижние. Так что ли?
Жизнь - это эксперимент, поставленный на себе.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Опять про LayerSwitcher

Сообщение ericsson » 19 дек 2013, 05:42

Если вы изучаете 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

Сообщение Denis Rykov » 19 дек 2013, 06:04

Если вы используете класс MapServer, то вы завязываетесь на конкретный рендерер, поэтому я бы все-таки советовал использовать WMS. Да, каждый отмеченный в списке слой запрашивается отдельно - это вполне ожидаемое поведение и чтобы слои не перекрывали друг друга используйте в WMS-запросе параметр прозрачности, в OpenLayer он будет добавлен автоматически, если в настройках WMS-слоя указать transparent:true.
Spatial is now, more than ever, just another column- The Geometry Column.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Опять про LayerSwitcher

Сообщение ericsson » 19 дек 2013, 06:33

Вспомнилось - по-моему, у GeoExt есть какая-то конструкция, позволяющая из коробки без дописывания запрашивать разные слои WMS склеенными вместе.

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

Re: Опять про LayerSwitcher

Сообщение Denis Rykov » 19 дек 2013, 06:45

ericsson писал(а):Вспомнилось - по-моему, у GeoExt есть какая-то конструкция, позволяющая из коробки без дописывания запрашивать разные слои WMS склеенными вместе.
Может я что-то не так понял, но зачем GeoExt, когда это делается простым указанием имен слоев через запятую в свойстве layers, например, layers: "modis,global_mosaic". Но тогда мы теряем возможность управлять видимостью отдельных слоев из контрола управления слоями.
Spatial is now, more than ever, just another column- The Geometry Column.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Опять про LayerSwitcher

Сообщение ericsson » 19 дек 2013, 07:19

Про GeoExt просто вспомнилось, в том смысле, что не везде слои по одному грузятся все же.
Там вроде (сейчас что-то не могу найти это) была опция для запроса слоев отдельно или вместе.
Что дописать такое можно в любом фреймворке, который это сам по себе не умеет - это понятно.

Serp
Участник
Сообщения: 94
Зарегистрирован: 05 июл 2010, 07:58
Репутация: 0

Re: Опять про LayerSwitcher

Сообщение Serp » 19 дек 2013, 09:51

С прозрачностью заработало, хотя конечно это не совсем то, что перекрытие реальных векторных слоев.

Про указание имен слоев через запятую мы догадались. Только нам нужно, чтобы юзер, как в обычных ГИС-ах слои выбрал и карта перерисовалась. Думали,что OL будет сам этот запрос формировать, но фиг-то. Похоже это придется нам как-то делать. Может с помощью html-менеджера слоев, который здесь на форуме раньше звучал.

Ладно, всем спасибо за помощь.

А напоследок еще вопрос - с OpenLayers.Layer.Vector вообще не стоит заморачиваться? При его использовании MapServer вообще где-то сбоку остается? И, я так понимаю, проблемы резки на тайлы и т.п. придется решать самостоятельно?
Пардон за беспокойство - никогда раньше веб-гисами не занимались.
Жизнь - это эксперимент, поставленный на себе.

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

Re: Опять про LayerSwitcher

Сообщение Denis Rykov » 19 дек 2013, 10:41

Объясните что такое "перекрытие реальных векторных слоев" и чем вас не устроил вариант с прозрачностью?
Spatial is now, more than ever, just another column- The Geometry Column.

Serp
Участник
Сообщения: 94
Зарегистрирован: 05 июл 2010, 07:58
Репутация: 0

Re: Опять про LayerSwitcher

Сообщение Serp » 20 дек 2013, 04:35

Мы хотим создать замену ArcReader-у. Избавиться от его установки на каждую машину и т.д. В его проекте у нас может быть включено одновременно по 15-20 слоёв по выбору пользователей.
При работе по "устаревшей" схеме через html-шаблоны (я надеюсь, что все в курсе, кто читал "Начало работы с МС") все получается хорошо. Но, говорят, что не рационально - загружает сервер.
Если использовать прозрачность, допустим 0,5, то уже на 3-4 м слое видно разницу - всё, как сквозь кальку. Этот способ подходит только для отображения 1-2 слоев поверх базового. Мы его тоже будем использовать. Только сначала получим от МС карту со сгруппированными слоями.

А векторный слой, уже сам себе отвечаю, больше подходит, судя по всему, для рисования поверх карты. Тоже пригодится.
Жизнь - это эксперимент, поставленный на себе.

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

Re: Опять про LayerSwitcher

Сообщение Denis Rykov » 20 дек 2013, 05:06

Стоп. Вы наверное что-то не так делаете - прозрачность в случае WMS - это не процент прозрачности слоя, а признак того, что слой имеет прозрачный фон. Вот посмотрите нашу систему по Таймырскому заповеднику - там все слои (за исключением спутниковой съемки) - WMS и ничто никого не перекрывает.
Spatial is now, more than ever, just another column- The Geometry Column.

Serp
Участник
Сообщения: 94
Зарегистрирован: 05 июл 2010, 07:58
Репутация: 0

Re: Опять про LayerSwitcher

Сообщение Serp » 21 дек 2013, 15:12

Понятно. Спасибо за интересную ссылку. В общем, рецепты собрали, будем сейчас комбинировать. Я думаю, совместим прозрачность с запросом группы слоев.
Жизнь - это эксперимент, поставленный на себе.

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: Опять про LayerSwitcher

Сообщение Sergey Astakhov » 23 дек 2013, 20:12

Denis Rykov писал(а):это делается простым указанием имен слоев через запятую в свойстве layers, например, layers: "modis,global_mosaic". Но тогда мы теряем возможность управлять видимостью отдельных слоев из контрола управления слоями.
Это тоже можно сделать, просто придётся немного попрограммировать на JavaScript. Типа такого:

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

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 гостя