我能够创建一个具有 maxExtent 和strictedExtent 属性的OpenLayers map 。
我也玩过 WMS 层及其 maxExtent 属性,但是在 WMS 层中使用 singleTile 时出现问题。
我想要的是有一个 WMS 层,它只能从服务器获取一个图像,但仅限于我想要的范围。因为我使用了 singleTile=true、ratio=1 和 maxExtend=my_desired_extent。
但它总是请求整个 map View 。
任何想法如何实现它。
提前致谢。
下一个代码显示了我想在 singleTile 模式下使用并限制它们必须向 WMS 请求的具有基础层和成本线层的 map :
<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 层方法。
我将不胜感激任何帮助。
谢谢。
最佳答案
如果您正在考虑将整个 map 限制在您所说的范围内并且不允许用户在范围之外平移,您可以尝试以下操作。
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);
这里的不同之处在于我在整个 map 上设置了范围,而不仅仅是图层。请注意,您还需要控制最大缩放级别。如果您不这样做,用户仍然可以缩小并传递数据,尽管他们无法在 map 上平移 View ,但会显示范围。
如果您希望 map 平移超出指定的范围但不平移该图层,则有多种方法。
检查此链接 http://docs.geoserver.org/latest/en/user/webadmin/data/layers.html 并阅读“边界框部分”
请注意,我尚未测试此代码,可能需要稍加改进才能使其正常工作。
关于gis - OpenLayers,如何限制 WMS 图层范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8217163/