Javascript OpenLayers WMS层不';t载荷

Javascript OpenLayers WMS层不';t载荷,javascript,openlayers,gis,wms,Javascript,Openlayers,Gis,Wms,我使用下面的JavaScript块尝试显示WMS层。我使用的是OpenLayers 2.8 地图的基本层(Openstreetmap)显示正确,它缩放到正确的区域,“金字塔”层显示在图层切换器中,但从未向其WMS服务发出任何请求(因此URL、样式和参数都是虚拟的这一事实不重要——它甚至从未尝试获取它们) OpenLayers确实尝试在我平移或缩放到足够远的地方后获得WMS层,以便可以看到几内亚湾(但我所有的数据都在荷兰)。这表明存在投影问题(WGS84的(0,0)点在那里),但我不明白为什么Op

我使用下面的JavaScript块尝试显示WMS层。我使用的是OpenLayers 2.8

地图的基本层(Openstreetmap)显示正确,它缩放到正确的区域,“金字塔”层显示在图层切换器中,但从未向其WMS服务发出任何请求(因此URL、样式和参数都是虚拟的这一事实不重要——它甚至从未尝试获取它们)

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

/*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);
            }
        });
    });
})();
编辑:“数据边界”控制台打印打印(添加了一些格式):

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


自从发布后,我发现如果我不使用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
});

奇怪的是,这并没有限制用户在世界范围内平移和缩放的能力,但它确实使覆盖工作…

您的代码中有什么边界或范围?我在问题中添加了边界控制台输出。您是否尝试过使用900913,即旧的球形墨卡托,而不是3857,看到你在OL2.8上了吗?我没有,但几秒钟前我设法找到了一个答案——只要我在地图上添加一个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
});