我能够使用maxExtent和restrictedExtent属性创建一个OpenLayers Map .
我也玩WMS图层及其maxExtent属性,但是在WMS图层中使用singleTile时会出现问题 .
我想要的是拥有一个WMS图层,它只从服务器获取一个图像,但仅限于我想要的边界 . 因为我使用了singleTile = true,ratio = 1和maxExtend = my_desired_extent . 但它始终要求整个 Map 视图 .
任何想法如何实现它 . 提前致谢 .
下一个代码显示了一个 Map ,其中包含我想在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 回答
如果您正在考虑将整个 Map 限制在您谈论的范围内,并且不允许用户超出范围,您可以尝试以下内容 .
这里的不同之处在于我在整个 Map 上设置了范围而不仅仅是图层 . 请注意,您还需要控制最大缩放级别 . 如果不这样做,用户仍然可以缩小,并且将显示传递的数据,但是它们将无法在 Map 上平移视图 .
如果您希望 Map 在指定的范围之外平移但不是那个层,那么有许多方法 .
如果您有权访问从中提供图层的WMS服务器,则可以在此处添加设置以限制图层服务器的范围 . 检查此链接http://docs.geoserver.org/latest/en/user/webadmin/data/layers.html并阅读"Bounding Boxes Section"
如果您无权访问WMS服务器,并且只想从客户端限制从WMS服务器请求的区域,则可以尝试使用具有不同策略的OpenLayers.layer.WMS类 . 请参阅下面的示例:
var filterStrategy = new OpenLayers.Strategy.Filter({filter:myFilter});
var restricted = new OpenLayers.Layer.WMS(“Coast Line”,“http://labs.metacarta.com/wms/vmap0”,
{
图层:'coastline_01,coastline_02'
},
{
不透明度:0.6,
singleTile:是的,
比例:1,
isBaseLayer:false,
策略:[filterStrategy]
});
map.addLayer(限制);
请注意,我还没有测试过这段代码,可能需要一些改进才能让它运行起来 .