【问题标题】:OpenLayers WMS layer doesn't loadOpenLayers WMS 图层不加载
【发布时间】:2014-04-07 10:12:04
【问题描述】:

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

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

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

/*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) 附近做了什么。

【问题讨论】:

  • 代码中的界限或范围是什么?
  • 我在问题中添加了边界控制台输出。
  • 您是否尝试过使用 900913(球形墨卡托的旧名称)而不是 3857,因为您使用的是 OL 2.8?
  • 我没有,但几秒钟前我设法找到了答案——一旦我在地图上添加了一个 maxExtent,它就可以工作了。不知道为什么。感谢您的帮助!
  • 太棒了。直到你在内布拉斯加州加载了一些东西并且它出现在加纳海中之前你还没有完成映射:-)

标签: javascript openlayers gis wms


【解决方案1】:

我最终设法通过为地图提供明确的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
});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多