Страница 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
И правда. Спасибо все теперь работает нормально.