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

Показать два слоя в openlayers

Добавлено: 30 апр 2012, 13:20
kliver
Здравствуйте, столкнулся с такой проблемой, нужно отобразить два слоя с разными проекциями. Есть слой с проекцией EPSG:70076 и слой OSM.
Пытаюсь делать как в примере на сайте openlayers

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

var options = { projection: new OpenLayers.Projection("EPSG:70076"), displayProjection: new OpenLayers.Projection("EPSG:900913") }; 
map = new OpenLayers.Map('map', options);
Но слой ОСМ отображается некоректно.
Изображение

Подозреваю что нужно как то перепроектировать слои по отдельности, но как?

Re: Показать два слоя в openlayers

Добавлено: 30 апр 2012, 13:54
Denis Rykov
Так как OSM в 900913, то ваш WMS-сервер должен отдавать слой в такой же проекции.

Re: Показать два слоя в openlayers

Добавлено: 30 апр 2012, 13:57
kliver
Тоесть Declared SRS должна быть 900913?
Но тогда это не повредит слой?

Это конечно глупые вопросы, я просто пытаюсь сообразить зачем мне тогда давали параметры для 70066. Ну ладно это просто мысли вслух.

А пример кода можете привести?

Я исправил настройки wms слоя но все равно OSM не отображается. Может быть такое, что ему не хватает зума? Или я опять ошибся?
Для полной ясности привожу код.

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

var lon = 150;
		var params;
        var lat = 50;
        var zoom = 6;
        var map, layer;
		var extend = new OpenLayers.Bounds(1622287.25, 383562.90625, 1623662.375, 384223.21875);
		var options = { 
						maxResolution: 5.37158203125,
						allOverlays: true,
						maxExtent: extend,
						projection:"EPSG:900913",
						//displayProjection:  new OpenLayers.Projection('EPSG:900913'),
						units:'m'}
        function init(){
            map = new OpenLayers.Map( 'map', options);
            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://localhost:8080/geoserver/wms", {layers: 'cite:filedata'});
			osm = new OpenLayers.Layer.OSM( "Simple OSM Map");
           map.addLayer(layer);
			map.addLayer(osm);
			map.zoomToExtent(extend);
            <!--map.setCenter(extend.getCenterLonLat(), map.getZoomForExtent(extend));-->
            map.addControl( new OpenLayers.Control.LayerSwitcher() );

Re: Показать два слоя в openlayers

Добавлено: 30 апр 2012, 17:35
Denis Rykov
Опишите объект map следующим образом:

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

map = new OpenLayers.Map('map', {
        units: 'm',
        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
        maxResolution: 156543.0399,
        numZoomLevels: 19
});

Re: Показать два слоя в openlayers

Добавлено: 30 апр 2012, 19:37
kliver
Я добавил строки

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

        maxResolution: 156543.0399,
        numZoomLevels: 19
Теперь ОСМ отображается, но возникла другая проблема слой ВМС показывается некорректно.
Изображение
Как видите он окружен белым квадратом. Если же поставить боудингбокс который предложили вы то этот белый квадрат становится размером с половину карты. К тому же ВМС слой становится невозможно найти, потому как обьекты малы.
Почему появляется этот квадрат? Ведь как я понимаю слой это результат рендеринга векторных данных?

Re: Показать два слоя в openlayers

Добавлено: 30 апр 2012, 19:46
kliver
Странное дело я убрал добавленный код, перезапустил геосервер, но ОСМ все равно отображается. В чем тогда проблема то была...

Re: Показать два слоя в openlayers

Добавлено: 01 май 2012, 06:40
Denis Rykov
Чтобы не было белого фона, слой должен приходить прозрачным (в свойствах WMS слоя в OL нужно указать transparent: true, пример).

Re: Показать два слоя в openlayers

Добавлено: 01 май 2012, 19:06
kliver
Я добавил прозрачность, но слой все равно непрозрачен.

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

layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://localhost:8080/geoserver/wms", {layers: 'cite:filedata'},{transparent: true},{isBaseLayer: false} );

Re: Показать два слоя в openlayers

Добавлено: 02 май 2012, 05:33
Denis Rykov
Вы документацию открывали? У WMS - 4 группы параметров, transparent указывается в третьей, а у вас?

Re: Показать два слоя в openlayers

Добавлено: 06 май 2012, 15:41
kliver
И правда. Спасибо все теперь работает нормально.