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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

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

Сообщение 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);
Но слой ОСМ отображается некоректно.
Изображение

Подозреваю что нужно как то перепроектировать слои по отдельности, но как?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov »

Так как OSM в 900913, то ваш WMS-сервер должен отдавать слой в такой же проекции.
Spatial is now, more than ever, just another column- The Geometry Column.
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

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

Сообщение 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() );
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение 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
});
Spatial is now, more than ever, just another column- The Geometry Column.
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

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

Сообщение kliver »

Я добавил строки

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

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

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

Сообщение kliver »

Странное дело я убрал добавленный код, перезапустил геосервер, но ОСМ все равно отображается. В чем тогда проблема то была...
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov »

Чтобы не было белого фона, слой должен приходить прозрачным (в свойствах WMS слоя в OL нужно указать transparent: true, пример).
Spatial is now, more than ever, just another column- The Geometry Column.
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

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

Сообщение kliver »

Я добавил прозрачность, но слой все равно непрозрачен.

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

layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://localhost:8080/geoserver/wms", {layers: 'cite:filedata'},{transparent: true},{isBaseLayer: false} );
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov »

Вы документацию открывали? У WMS - 4 группы параметров, transparent указывается в третьей, а у вас?
Spatial is now, more than ever, just another column- The Geometry Column.
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

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

Сообщение kliver »

И правда. Спасибо все теперь работает нормально.
Ответить

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

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

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