Если вы смотрите на ограничение всей карты в той степени, о которой вы говорите, и не позволяете пользователям перемещаться за пределы экстента, вы можете попробовать что-то вроде следующего.
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, с которого обслуживается слой, вы можете добавить параметр для ограничения экстента сервера слоя.
Проверьте эту ссылку http://docs.geoserver.org/latest/en/user/webadmin/data/layers.html и прочитайте раздел «Ограничительные рамки»
Если у вас нет доступа к серверу 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);
Обратите внимание, что я не тестировал этот код, и может потребоваться небольшая доработка, чтобы заставить его работать.