我已经做了一整天了,老实说,我已经没有主意了。我有一些WMS图层,我希望根据当前缩放级别显示/不显示这些图层。是的,我已经看过了API文档,它们看起来很清楚,但我遵循了所有建议,但我没有得到想要的结果:(
这是我看过的来源之一:http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels
更糟糕的是,我发现如果你有一个在加载时显示的开放街道地图基础图层,它似乎限制了你对地图的numZoomLevels的控制,这正是我需要的,因为我确实想使用它作为我的加载基础图层……
所以我的问题是:
我做错了什么?在加载时使用Open Street Map基础图层时,真的没有解决缩放级别控制的方法吗?还是有什么我不知道的?
以下是我的一些代码尝试: Take 1: tib_villages层应该只在缩放级别为8-10时显示,不起作用!
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个缩放级别,这是不起作用的!
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时显示,不起作用!
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
发布于 2010-12-21 02:28:31
我建议在图层上使用maxScale和minScale,而不是分辨率,但这可能是一个品味问题。:-)我不能联系到解析值,但是当别人看你的代码时,尺度很容易理解和长期维护。
发布于 2010-10-25 17:49:22
尝试使用minResolution
和maxResolution
而不是minZoomLevel
。它通常工作得很好。如果你调用map.getResolution()
方法,你可以得到任何变焦杆的分辨率。
另一种选择是监听OpenLayers.Map
的zoomend
事件,并相应地切换图层可见性。
map.events.on({ "zoomend": function (e) {
if (this.getZoom() > 2) {
layer1.setVisibility(false);
layer2.setVisibility(true);
}
else {
layer2.setVisibility(false);
layer1.setVisibility(true);
}
}
});
https://stackoverflow.com/questions/4000734
复制相似问题