Сохранение контекста OpenLayers.Control.LayerSwitcher
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Сохранение контекста OpenLayers.Control.LayerSwitcher
Информация отображается на странице средствами OpenLayers, при этом карта является частью формы, т.е. обновляется задании в форме параметров и нажатии кнопки "Отправить". При этом должны сохраняться настройки самих OpenLayers - масштаб, позиция и т.п.
В результате удалось сохранить все что нужно, за исключением значения LayerSwitcher (просто не нашел такого метода/свойства). Т.е. при обновлении карты, на ней всегда оказывается выбранным первый слой (по-умолчанию). Если пользователь теперь выберет вручную тот слой, который был им выбран до отправки формы, то все работает нормально. Но если выполнять манипуляции без предварительного выбора, то слои не отображаются корректно (не масштабируются, не перемещаются). Нужен какой-то механизм, позволяющий средствами JavaScript считать значение текущего активного слоя, и соответственно, задать его принудительно в LayerSwitcher впоследствии. Типа "ActiveLeyer = LayerSwitcher.ActiveLayer;" и "LayerSwitcher.SetActiveLayer(ActiveLeyer);" (таких свойств в описании я не нашел). Есть ли такая адекватная возможность, или надо заниматься реверс-инженерингом, вытаскивая из исходников OpenLayers нужные переменные?
В результате удалось сохранить все что нужно, за исключением значения LayerSwitcher (просто не нашел такого метода/свойства). Т.е. при обновлении карты, на ней всегда оказывается выбранным первый слой (по-умолчанию). Если пользователь теперь выберет вручную тот слой, который был им выбран до отправки формы, то все работает нормально. Но если выполнять манипуляции без предварительного выбора, то слои не отображаются корректно (не масштабируются, не перемещаются). Нужен какой-то механизм, позволяющий средствами JavaScript считать значение текущего активного слоя, и соответственно, задать его принудительно в LayerSwitcher впоследствии. Типа "ActiveLeyer = LayerSwitcher.ActiveLayer;" и "LayerSwitcher.SetActiveLayer(ActiveLeyer);" (таких свойств в описании я не нашел). Есть ли такая адекватная возможность, или надо заниматься реверс-инженерингом, вытаскивая из исходников OpenLayers нужные переменные?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Сохранение контекста OpenLayers.Control.LayerSwitcher
Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Re: Сохранение контекста OpenLayers.Control.LayerSwitcher
Да, именно так.Mavka писал(а):Что такое "активный слой"? У вас несколько BaseLayer и вы их переключаете?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Сохранение контекста OpenLayers.Control.LayerSwitcher
В свойствах самой карты:
map.baseLayer - текущий базовый слой
map.setBaseLayer(my_second_baselayer) - програмно поменять базовый слой
То?
map.baseLayer - текущий базовый слой
map.setBaseLayer(my_second_baselayer) - програмно поменять базовый слой
То?
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Re: Сохранение контекста OpenLayers.Control.LayerSwitcher
Спасибо за подсказку! Действительно, это почти то, что нужно, теперь все синхронизировано за исключением самого LayerSwitcherMavka писал(а):В свойствах самой карты:
map.baseLayer - текущий базовый слой
map.setBaseLayer(my_second_baselayer) - програмно поменять базовый слой
То?

Комбинация "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
А не проще уничтожить LayerSwitcher и создать его заново? Если при переключении базового слоя на контроллер не пришло событие, то явно нарушена его связь с картой.
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Re: Сохранение контекста OpenLayers.Control.LayerSwitcher
Проблема решена. Тут я сам проявил невнимательность - надо было выполнять "map.addControl(LayerSWITCHER = new OpenLayers.Control.LayerSwitcher() );" по тексту скрипта после загрузки в карту всех ранее сохраненных установок.Mavka писал(а):А не проще уничтожить LayerSwitcher и создать его заново? Если при переключении базового слоя на контроллер не пришло событие, то явно нарушена его связь с картой.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя