【问题标题】:OpenLayers, how restricting WMS layer extentOpenLayers,如何限制 WMS 图层范围
【发布时间】:2011-11-21 19:10:08
【问题描述】:

我能够创建一个具有 maxExtent 和 restrictedExtent 属性的 OpenLayers 地图。

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

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

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

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

<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 子类或重新定义一些 WM 层方法。 我将不胜感激任何帮助。 谢谢。

【问题讨论】:

  • 到目前为止你能分享你的代码吗?那么帮助就容易多了。
  • 你解决了吗?如果是,您可以发布解决方案吗?

标签: gis openlayers


【解决方案1】:

如果您正在考虑将整个地图限制在您所谈论的范围内,并且不允许用户平移超出范围,您可以尝试以下操作。

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

这里的区别是我在整个地图上设置了范围,而不仅仅是图层。请注意,您还需要控制最大缩放级别。如果您不这样做,用户仍然可以缩小并显示通过范围的数据,尽管他们将无法在地图上平移视图。

如果您希望地图平移到指定范围之外但不是该图层,那么有多种方法。

  1. 如果您有权访问提供图层的 WMS 服务器,则可以在其中添加设置以限制图层服务器的范围。 检查此链接http://docs.geoserver.org/latest/en/user/webadmin/data/layers.html 并阅读“边界框部分”

  2. 如果您无权访问 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);

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

【讨论】:

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