gpt4 book ai didi

gis - OpenLayers,如何限制 WMS 图层范围

转载 作者:行者123 更新时间:2023-12-02 02:21:01 27 4
gpt4 key购买 nike

我能够创建具有 maxExtent 和 restrictedExtent 属性的 OpenLayers map 。

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

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

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

下一个代码显示了一个带有基础层和成本线层的 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 图层方法。我将不胜感激任何帮助。谢谢。

最佳答案

如果您正在考虑将整个 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 平移到指定范围之外而不是该图层,则有多种方法。

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

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

关于gis - OpenLayers,如何限制 WMS 图层范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com