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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

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

Сообщение GIS-dev » 27 авг 2009, 11:38

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

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение Mavka » 27 авг 2009, 11:48

Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?
лангольеры под окном жрали время ом-ном-ном

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

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

Сообщение GIS-dev » 27 авг 2009, 11:56

Mavka писал(а):Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?
Да, именно так.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение Mavka » 27 авг 2009, 12:51

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

То?
лангольеры под окном жрали время ом-ном-ном

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

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

Сообщение GIS-dev » 01 сен 2009, 08:35

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

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

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение Mavka » 01 сен 2009, 08:44

А не проще уничтожить LayerSwitcher и создать его заново? Если при переключении базового слоя на контроллер не пришло событие, то явно нарушена его связь с картой.
лангольеры под окном жрали время ом-ном-ном

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

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

Сообщение GIS-dev » 02 сен 2009, 07:25

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

Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя