Страница 1 из 1

Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 27 авг 2009, 11:38
GIS-dev
Информация отображается на странице средствами OpenLayers, при этом карта является частью формы, т.е. обновляется задании в форме параметров и нажатии кнопки "Отправить". При этом должны сохраняться настройки самих OpenLayers - масштаб, позиция и т.п.
В результате удалось сохранить все что нужно, за исключением значения LayerSwitcher (просто не нашел такого метода/свойства). Т.е. при обновлении карты, на ней всегда оказывается выбранным первый слой (по-умолчанию). Если пользователь теперь выберет вручную тот слой, который был им выбран до отправки формы, то все работает нормально. Но если выполнять манипуляции без предварительного выбора, то слои не отображаются корректно (не масштабируются, не перемещаются). Нужен какой-то механизм, позволяющий средствами JavaScript считать значение текущего активного слоя, и соответственно, задать его принудительно в LayerSwitcher впоследствии. Типа "ActiveLeyer = LayerSwitcher.ActiveLayer;" и "LayerSwitcher.SetActiveLayer(ActiveLeyer);" (таких свойств в описании я не нашел). Есть ли такая адекватная возможность, или надо заниматься реверс-инженерингом, вытаскивая из исходников OpenLayers нужные переменные?

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 27 авг 2009, 11:48
Mavka
Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 27 авг 2009, 11:56
GIS-dev
Mavka писал(а):Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?
Да, именно так.

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 27 авг 2009, 12:51
Mavka
В свойствах самой карты:
map.baseLayer - текущий базовый слой
map.setBaseLayer(my_second_baselayer) - програмно поменять базовый слой

То?

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 01 сен 2009, 08:35
GIS-dev
Mavka писал(а):В свойствах самой карты:
map.baseLayer - текущий базовый слой
map.setBaseLayer(my_second_baselayer) - програмно поменять базовый слой

То?
Спасибо за подсказку! Действительно, это почти то, что нужно, теперь все синхронизировано за исключением самого LayerSwitcher :?
Комбинация "TEXTFIELD = map.baseLayer.id;" / "map.setBaseLayer(map.getLayer(TEXTFEILD));" работает, выбранный слой обрабатывается корректно, но если развернуть панельку LayerSwitcher после обновления страницы, то там всегда указан первый слой (хотя карта отображает другой). То есть похоже, нет связи между объектом map и объектом LayerSwitcher, функция setBaseLayer() видимо не взаимодействует с ним и он "не знает" что в объекте "map" выбран другой слой. Можно ли как-нибудь его забить и в LayerSwitcher?

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 01 сен 2009, 08:44
Mavka
А не проще уничтожить LayerSwitcher и создать его заново? Если при переключении базового слоя на контроллер не пришло событие, то явно нарушена его связь с картой.

Re: Сохранение контекста OpenLayers.Control.LayerSwitcher

Добавлено: 02 сен 2009, 07:25
GIS-dev
Mavka писал(а):А не проще уничтожить LayerSwitcher и создать его заново? Если при переключении базового слоя на контроллер не пришло событие, то явно нарушена его связь с картой.
Проблема решена. Тут я сам проявил невнимательность - надо было выполнять "map.addControl(LayerSWITCHER = new OpenLayers.Control.LayerSwitcher() );" по тексту скрипта после загрузки в карту всех ранее сохраненных установок.