OpenLayers WMS 图层不会加载

OpenLayers WMS layer doesn't load

本文关键字:加载 图层 WMS OpenLayers      更新时间:2023-09-26

我使用以下JavaScript块来尝试显示WMS层。我正在使用OpenLayers 2.8。

地图的基础图层(Openstreetmap)显示正确,它缩放到正确的区域,"金字塔"图层显示在图层切换器中,但从未向其WMS服务发出请求(因此URL,样式和参数是假人的事实无关紧要 - 它甚至从未尝试获取它们)。

OpenLayers 确实会在我平移或缩放足够远时尝试获取 WMS 图层,以便可以看到几内亚湾(但我的所有数据都在荷兰)。这表明存在投影问题(WGS84的(0,0)点在那里),但我不明白为什么OpenLayers甚至不尝试在其他地方获取地图图层。我的数据位于 EPSG:3857(Web 墨卡托)投影中。

/*global $, OpenLayers */
(function () {
    "use strict";
    $(function () {
        $(".map").each(function () {
            var div = $(this);
            var data_bounds = div.attr("data-bounds");
            console.log("data_bounds: " + data_bounds);
            if (data_bounds !== "") {
                var map = new OpenLayers.Map(div.attr("id"), {
                    projection: "EPSG:3857"});
                var extent = JSON.parse(data_bounds);
                var bounds = new OpenLayers.Bounds(
                    extent.minx, extent.miny,
                    extent.maxx, extent.maxy);
                map.addLayer(
                    new OpenLayers.Layer.OSM(
                        "OpenStreetMap NL",
                        "http://tile.openstreetmap.nl/tiles/${z}/${x}/${y}.png",
                        {buffer: 0}));
                map.addLayer(
                    new OpenLayers.Layer.WMS(
                        "pyramid", "http://rasterserver.local:5000/wms", {
                            layers: "test",
                            styles: "test"
                        }, {
                            singleTile: true,
                            isBaseLayer: false,
                            displayInLayerSwitcher: true,
                            units: 'm'
                        }));
                map.addControl(new OpenLayers.Control.LayerSwitcher());
                map.zoomToExtent(bounds);
            }
        });
    });
})();

编辑:"data_bounds"控制台打印打印(添加了一些格式):

data_bounds: {
    "minx": 582918.5701295201,
    "miny": 6923595.841021758,
    "maxx": 821926.9006116659,
    "maxy": 7079960.166533174
}

它缩放到荷兰北部的正确区域,所以我认为问题不在那里。

自从发布以来,我发现如果我不使用OSM层,而是使用WMS层作为基础层,它就可以工作。因此,也许与OSM基础层和添加到其中的WMS层有些不兼容?但是我不明白它似乎确实在 WGS84 (0, 0) 附近做了一些事情。

我最终设法通过给地图一个明确的maxExtent来解决这个问题:

var extent = JSON.parse(data_bounds);
var bounds = new OpenLayers.Bounds(
    extent.minx, extent.miny,
    extent.maxx, extent.maxy);
var map = new OpenLayers.Map(div.attr("id"), {
    projection: "EPSG:3857",
    maxExtent: bounds
});

奇怪的是,这并没有限制用户在世界各地平移和缩放的能力,但它确实使覆盖层起作用......