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

Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 11:20
Naphtizin
Здравствуйте. У меня появилась необходимость в OpenLayers вынести LayerSwitcher за пределы карты. То есть убрать его с карты и создать функционал переключения слоев вручную. Вот здесь читал о подобном, но как реализовать так и не понял. Подскажите как сделать задуманное.

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 11:37
Mavka

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 11:53
Naphtizin
Этот вариант как я понял предполагает просто вынос стандартного LayerSwitcher за пределы карты. А можно ли сделать свой LayerSwitcher, то есть сделать свои радиобатоны и чекбоксы?

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 12:43
Mavka
Готовый LayerSwitcher не подходит, вручную переключать слои тоже. Непонимаю...

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 14:27
Naphtizin
Вот именно, что надо вручную. Как я понял нужна функция setBaseLayer(). Пробую выполнить что-то типа такого:

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

function layerswitch() {
                        map.setBaseLayer(demolayer2)
};
не выходит.

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 14:37
Mavka
И чаво говорит? Не хочу не буду?

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 15:05
Naphtizin
Молчит.

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 15:25
Mavka
И в firebugs? У меня очень хорошо переключает

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 16:42
Naphtizin
Не, не переключает.Привожу код:

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

      <script>

        var map;

        function init() {
           map = new OpenLayers.Map('map');
           map.addControl(new OpenLayers.Control.LayerSwitcher());

        var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );

            var ghyb = new OpenLayers.Layer.Google(
                "Google Hybrid",
                {type: G_HYBRID_MAP, numZoomLevels: 20}
            );

        map.addLayers([wms, ghyb]);
        map.zoomToMaxExtent();
        };

        function layerswitch() {
                                map.setBaseLayer(ghyb)
        };

      </script>
Функцию вызываю кнопкой:

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

<input type="button" value="Слой 2" onClick="layerswitch()">
Если не трудно ткните пальцем где накосячил.

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 16:48
Mavka
Сделать ghyb глобальной

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

var map, ghyb; 
а здесь без var:

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

ghyb = new OpenLayers.Layer.Google( 

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 16:55
Naphtizin
Спасибо большое, вот уж не думал, что проблема в этом может быть. Вот что значит нехватка знаний javascript'а.

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 19:27
Naphtizin
C переключением слоев вроде разобрался, сделал два радиобатона, всё переключается отлично.

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

<input type="radio" value="1" checked="checked" onchange="layerswitch1()">Карта<br />
<input type="radio" value="2" onchange="layerswitch2()">Снимок<br />
А вот как быть с оверлеями? Они ведь должны накладываться на активный слой, а не влючаться вместо него. Может для оверлеев нужна какаято другая функция?

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 19:38
dobeer
wms.setVisibility(true); //показать
wms.setVisibility(false); //скрыть
Если я правильно понял о чем вы...

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 20:04
Naphtizin
А как это применить относительно конкретного слоя?

Re: Как сделать LayerSwitcher своими руками?

Добавлено: 12 авг 2010, 20:31
dobeer
wms - имя вашего дополнительного слоя
...например:

<input type="radio" value="1" checked="checked" onchange="ghyb.setVisibility(false);">Отключить<br />
<input type="radio" value="2" checked="checked" onchange="ghyb.setVisibility(true);">Включить<br />