使用OSM显示WMS

时间:2013-02-11 15:44:55

标签: openlayers openstreetmap wms

首先,抱歉我的英语,但不是我的母语。 我想问你是否知道为什么我的地图不起作用。我有两个带有geoserver的WMS和OSM与OpenLayers一起工作。三个地图正在显示,问题是当OSM处于“开启”状态时,其他2个位于后面并且未显示。这是我的代码。

function init(){ 

        var map = new OpenLayers.Map({
            div: "map",
            projection: new OpenLayers.Projection("EPSG:900913"),
            allOverlays: true,

        });
        //Geoserver WMS
        var towns = new OpenLayers.Layer.WMS( "Towns",
                "http://XXXX/geoserver/isle/wms", {layers: 'isleofwight:Towns', transparent: true}, {visibility: false},{isBaseLayer: false});
        map.addLayer(towns);

        var outline = new OpenLayers.Layer.WMS( "Outline",
            "http://XXXX/geoserver/isle/wms", {layers: 'isleofwight:Outline', transparent: true}, {visibility: false},{isBaseLayer: false});
        map.addLayer(outline);

        var osm = new OpenLayers.Layer.OSM("Open Street Map");
        map.addLayer(osm);

非常感谢

由于我无法回答同样的问题,我编辑说我找到了解决方案,以防有人需要它,问题是逐个插入图层,你必须同时添加所有图层时间。

map.addLayers([osm, towns, outline]);

现在工作得很完美:D

1 个答案:

答案 0 :(得分:0)

对nmtoken和NorthLand的信用。

要一次显示多个来源,必须将它们分配给同一个图层并用逗号分隔(不允许使用空格或者它不会起作用):

params:{'LAYERS': 'Test:TestImagery,Test:Vector'},

一个工作的例子是:

var sUrl = 'https://ahocevar.com/geoserver/wms';
var oParam = JSON.parse({"LAYERS": "ne:NE1_HR_LC_SR_W_DR,topp:states", "TILED": true});

var wmsLayer = new TileLayer({
    extent: [-13884991, 2870341, -7455066, 6338219],
    source: new TileWms({
      url: sUrl,
      params: oParam,
      serverType: "geoserver",
      transition: 0
    }),
    isBaseLayer: true
  });

this.map.addLayer(wmsLayer);

这将同时在同一层上渲染2个平铺图像。