2012-03-27 5 views
0

Я нашел много примеров того, как добавлять/удалять Overlays на карту Openlayers с помощью LayerSwitcher. Моя цель - предоставить LayerSwitcher, который позволяет одновременно использовать только одного поставщика услуг карты (например, GoogleMaps и Openstreetmaps). Возможно ли это с классом LayerSwitcher?Openlayers switch map поставщик услуг

Я попробовал следующее, которое показывает переключатель, который я хочу иметь, но только первый слой можно визуализировать!

var osmLayer = new OpenLayers.Layer.OSM("Open Street Maps", 
             ["http://a.tile.openstreetmap.org/${z}/${x}/${y}.png", 
             "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png", 
             "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png" 
             ], 
             {visibility: true, isBaseLayer: true}); 
var wmsLayer = new OpenLayers.Layer.WMS("OpenLayers WMS", 
             "http://vmap0.tiles.osgeo.org/wms/vmap0", 
             {layers: 'basic'}, 
             {visibility: true, isBaseLayer: true}); 

this.map = new OpenLayers.Map({ 
         div: divname, 
         allOverlays: false, 
         theme: null, 
         controls: [ 
          new OpenLayers.Control.LayerSwitcher(), 
         ] 
}); 
this.map.addLayers([osmLayer, wmsLayer]); 
this.map.setCenter(
    new OpenLayers.LonLat(8.56, 50).transform(
      new OpenLayers.Projection("EPSG:4326"), 
      this.map.getProjectionObject() 
    ), 10 
); 

Если я выберу вторую позицию, на карте ничего не отображается, и, выбрав первый, снова отображается карта OSM.

Заранее благодарен!

+0

Я думаю, что это может иметь какое-то отношение к слою WMS, потому что когда я добавляю Карты Google следующим образом: новый OpenLayers.Layer.Google («Карты Google», {видимость: истина, isBaseLayer: true}), он работает ! – janr

ответ

0

Я думаю, что проблема в том, что вы пытаетесь использовать Metacartas WMS я EPSG: 900913 проекцию (тот, который использует OpenStreetMaps и Google)

Хотя это говорит в GetCapabilities, что она должна поддерживать 900913, это выглядит так, как не делает. Если вы попытаетесь использовать только слой WMS (в EPSG4326), вы увидите, что он работает отлично.

+0

Я немного перегружен этой проекционной логикой, но действительно ли нет возможности использовать оба типа проекции? Не могу ли я использовать событие _changelayer_, чтобы установить правильную проекцию? – janr

Смежные вопросы