我能够创建一个具有 maxExtent 和strictedExtent 属性的OpenLayers map 。

我也玩过 WMS 层及其 maxExtent 属性,但是在 WMS 层中使用 singleTile 时出现问题。

我想要的是有一个 WMS 层,它只能从服务器获取一个图像,但仅限于我想要的范围。因为我使用了 singleTile=true、ratio=1 和 maxExtend=my_desired_extent。
但它总是请求整个 map View 。

任何想法如何实现它。
提前致谢。

下一个代码显示了我想在 singleTile 模式下使用并限制它们必须向 WMS 请求的具有基础层和成本线层的 map :

<script type="text/javascript" src="http://openlayers.org/api/2.11/OpenLayers.js"></script>

<div id="map" style="width: 700px; height: 500px;"></div>

<script type="text/javascript">
    var map = new OpenLayers.Map("map");
    var wms = new OpenLayers.Layer.WMS("OpenLayers WMS Basic", "http://labs.metacarta.com/wms/vmap0",
    {
        layers: 'basic'
    });
    map.addLayer(wms);

    var restricted = new OpenLayers.Layer.WMS("Coast Line", "http://labs.metacarta.com/wms/vmap0",
    {
        layers: 'coastline_01,coastline_02'
    },
    {
        opacity: 0.6,
        singleTile: true,
        ratio: 1,
        isBaseLayer: false,
        maxExtent: OpenLayers.Bounds.fromString("-10,-90,30,90")
    });
    map.addLayer(restricted);

    map.setCenter(new OpenLayers.LonLat(0,40), 3);
</script>

我正在查看 OpenLayers 源代码,似乎没有实现我想要的东西,所以我需要创建一些 WMS 子类或重新定义一些 WMs 层方法。
我将不胜感激任何帮助。
谢谢。

最佳答案

如果您正在考虑将整个 map 限制在您所说的范围内并且不允许用户在范围之外平移,您可以尝试以下操作。

var extent = new OpenLayers.Bounds({-10,-90,30,90});
function init() {
            var options = {
                restrictedExtent: extent
            };
            map = new OpenLayers.Map('map', options);
var restricted = new OpenLayers.Layer.WMS("Coast Line", "http://labs.metacarta.com/wms/vmap0",
    {
        layers: 'coastline_01,coastline_02'
    },
    {
        opacity: 0.6,
        singleTile: true,
        ratio: 1,
        isBaseLayer: false
    });
    map.addLayer(restricted);

这里的不同之处在于我在整个 map 上设置了范围,而不仅仅是图层。请注意,您还需要控制最大缩放级别。如果您不这样做,用户仍然可以缩小并传递数据,尽管他们无法在 map 上平移 View ,但会显示范围。

如果您希望 map 平移超出指定的范围但不平移该图层,则有多种方法。
  • 如果您可以访问为图层提供服务的 WMS 服务器,您可以在那里添加一个设置来限制图层服务器的范围。
    检查此链接 http://docs.geoserver.org/latest/en/user/webadmin/data/layers.html 并阅读“边界框部分”
  • 如果您无权访问 WMS 服务器,而只想限制从客户端从 WMS 服务器请求的区域,您可以尝试使用具有不同策略的 OpenLayers.layer.WMS 类。请参阅下面的示例:



  • 请注意,我尚未测试此代码,可能需要稍加改进才能使其正常工作。

    关于gis - OpenLayers,如何限制 WMS 图层范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8217163/

    10-12 01:54