2011-11-21 107 views
3

我可以用maxExtent和restrictedExtent屬性創建一個OpenLayers地圖。OpenLayers,如何限制WMS圖層範圍

另外我也玩過WMS圖層及其maxExtent屬性,但是在WMS圖層中使用singleTile時會出現問題。

我想要的是隻有一個WMS圖層從服務器獲取一個圖像,但僅限於我想要的邊界。因爲這我使用了singleTile = true,ratio = 1和maxExtend = my_desired_extent。 但它總是要求整個地圖視圖。

任何想法如何實現它。 在此先感謝。

接着代碼示出了具有基礎層和costline線層的地圖我想在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子類或重新定義一些WMs層方法。 我將不勝感激任何幫助。 謝謝。

+1

你可以分享你的代碼到目前爲止?然後更容易幫助。 –

+1

你解決了嗎?如果是的話,你可以發佈解決方案嗎? – Shaunak

回答

2

如果您正在考慮限制整個地圖的範圍,而不是允許用戶在範圍外進行平移,則可以嘗試如下所示。

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

請注意,我沒有測試此代碼,它可能需要一些精煉得到它的工作。