首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于缩放级别显示WMS图层

基于缩放级别显示WMS图层
EN

Stack Overflow用户
提问于 2010-10-23 04:32:41
回答 2查看 11.3K关注 0票数 5

我已经做了一整天了,老实说,我已经没有主意了。我有一些WMS图层,我希望根据当前缩放级别显示/不显示这些图层。是的,我已经看过了API文档,它们看起来很清楚,但我遵循了所有建议,但我没有得到想要的结果:(

这是我看过的来源之一:http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels

更糟糕的是,我发现如果你有一个在加载时显示的开放街道地图基础图层,它似乎限制了你对地图的numZoomLevels的控制,这正是我需要的,因为我确实想使用它作为我的加载基础图层……

所以我的问题是:

我做错了什么?在加载时使用Open Street Map基础图层时,真的没有解决缩放级别控制的方法吗?还是有什么我不知道的?

以下是我的一些代码尝试: Take 1: tib_villages层应该只在缩放级别为8-10时显示,不起作用!

代码语言:javascript
运行
复制
var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: null, //setting the map's zoom levels to null
            allOverlays: false
        }

var osm = new OpenLayers.Layer.OSM(); //MY base layer

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: 10, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                );

图2: tib_villages图层应该只在缩放级别为8-10时显示,地图应该只有10个缩放级别,而不是像Open Street map图层那样有19个缩放级别,这是不起作用的!

代码语言:javascript
运行
复制
var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: 10, //setting the map's zoom levels to 10 only
            allOverlays: false
        }

var osm = new OpenLayers.Layer.OSM(); //MY base layer

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: null, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                )

图3:在加载时去除Open Street Map基础图层后,地图只有10个指定的缩放级别,但tib_villages层应该只在缩放级别为8-10时显示,不起作用!

代码语言:javascript
运行
复制
var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: 10, //setting the map's zoom levels to 10
            allOverlays: false
        }

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: 10, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                );

我们真诚地感谢您的所有建议!

elshae

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-21 02:28:31

我建议在图层上使用maxScale和minScale,而不是分辨率,但这可能是一个品味问题。:-)我不能联系到解析值,但是当别人看你的代码时,尺度很容易理解和长期维护。

票数 5
EN

Stack Overflow用户

发布于 2010-10-25 17:49:22

尝试使用minResolutionmaxResolution而不是minZoomLevel。它通常工作得很好。如果你调用map.getResolution()方法,你可以得到任何变焦杆的分辨率。

另一种选择是监听OpenLayers.Mapzoomend事件,并相应地切换图层可见性。

代码语言:javascript
运行
复制
map.events.on({ "zoomend": function (e) {
    if (this.getZoom() > 2) {
      layer1.setVisibility(false);
      layer2.setVisibility(true);
    }
    else {
      layer2.setVisibility(false);
      layer1.setVisibility(true);
    }
  }
});
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4000734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档