Gis OpenLayers,如何限制WMS层范围

Gis OpenLayers,如何限制WMS层范围,gis,openlayers,Gis,Openlayers,我能够使用maxExtent和restrictedExtent属性创建OpenLayers贴图 此外,我还使用了WMS层及其maxExtent属性,但在WMS层中使用singleTile时会出现问题 我想要的是有一个WMS层,它只从服务器获取一个图像,但限制在我想要的范围内。因为我使用了singleTile=true、ratio=1和maxExtend=my\u所需的\u范围。 但它总是要求整个地图视图 有什么想法可以实现吗。 提前谢谢 下一个代码显示了一个带有基本层和海岸线层的地图,我想在si

我能够使用maxExtent和restrictedExtent属性创建OpenLayers贴图

此外,我还使用了WMS层及其maxExtent属性,但在WMS层中使用singleTile时会出现问题

我想要的是有一个WMS层,它只从服务器获取一个图像,但限制在我想要的范围内。因为我使用了singleTile=true、ratio=1和maxExtend=my\u所需的\u范围。 但它总是要求整个地图视图

有什么想法可以实现吗。 提前谢谢

下一个代码显示了一个带有基本层和海岸线层的地图,我想在singleTile模式下使用它,并限制它们必须向WMS请求的are:

<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>

var map=newopenlayers.map(“map”);
var wms=新的OpenLayers.Layer.wms(“OpenLayers wms Basic”http://labs.metacarta.com/wms/vmap0",
{
图层:“基本”
});
地图添加层(wms);
var restricted=新的OpenLayers.Layer.WMS(“海岸线”http://labs.metacarta.com/wms/vmap0",
{
图层:“海岸线_01,海岸线_02”
},
{
不透明度:0.6,
是的,
比率:1,
isBaseLayer:false,
maxExtent:OpenLayers.Bounds.fromString(“-10,-90,30,90”)
});
map.addLayer(受限);
地图设置中心(新OpenLayers.LonLat(0,40),3);
我正在查看OpenLayers源代码,似乎我想要的还没有实现,所以我需要创建一些WMS子类或重新定义一些WMS层方法。 我将感谢任何帮助。
谢谢。

如果您希望将整个地图限制在您所谈论的范围内,并且不允许用户在范围外平移,您可以尝试以下方法

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

如果希望贴图平移到指定范围之外,而不是该层,则有多种方法

  • 如果您可以访问该层所服务的WMS服务器,则可以在该服务器上添加一个设置以限制该层服务器的范围。 选中此链接并阅读“边界框部分”

  • 如果您没有访问WMS服务器的权限,并且只想限制从客户端从WMS服务器请求的区域,则可以尝试使用具有不同策略的OpenLayers.layer.WMS类。请参见下面的示例:


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

    到目前为止,您能否分享您的代码?帮助起来容易多了。你解决了这个问题吗??如果是,请张贴解决方案?
    var myfilter = new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.BBOX,
        value: OpenLayers.Bounds.({-10,-90,20,90})})
    
    var filterStrategy = new OpenLayers.Strategy.Filter({filter: myFilter});
    
    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,
          strategies: [filterStrategy]
      });
      map.addLayer(restricted);