Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于缩放级别显示WMS图层_Javascript_Extjs_Openlayers_Openstreetmap - Fatal编程技术网

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

Javascript 基于缩放级别显示WMS图层,javascript,extjs,openlayers,openstreetmap,Javascript,Extjs,Openlayers,Openstreetmap,我整天都在干这个,老实说,我已经没有主意了。我有一些WMS图层,我希望根据当前的缩放级别显示/不显示这些图层。是的,我已经浏览了API文档,它们看起来很清晰,但我遵循了所有建议,没有得到预期的结果:( 这是我看到的其中一个来源: http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels 然后更糟糕的是,我发现如果你有一个开放的街道地图基础层在加载时显示,它似乎限制了你对地图numZoomLevels的控制,这正是我所需要的,因为我确实想使用它

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

这是我看到的其中一个来源: http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels

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

因此,我的问题是:

我做错了什么? 在加载时使用开放式街道地图基础层时,是否真的没有解决缩放级别控制问题的方法?还是有什么我不知道的

以下是我的一些代码尝试: 拍摄1:tib_Lavels仅在缩放级别为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}
                );
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}
                )
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}
                );
假设2:tib_villages图层只应在缩放级别为8-10时显示,地图应仅具有10个缩放级别,但取而代之的是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: 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}
                );
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}
                )
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}
                );
)

第3步:删除加载的开放街道地图基础层后,地图仅具有指定的10个缩放级别,但tib_村图层应仅在缩放级别为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}
                );
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}
                )
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

尝试使用
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);
    }
  }
});

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

@elshae:我会把你的问题贴在邮件列表上users@openlayers.org.Hmm我会去看看gis.stackexchange.com,然后在上面发帖Users@openlayers.org,但我经常没有得到回应:-/非常感谢!您的回答非常清晰简洁,现在我的地图功能正按照我的要求运行:Dclear解释,优雅的解决方案。工作做得无可挑剔。事实上,我最终还是得到了minScale:),太糟糕了,我不能把两个答案都标为正确:-/没关系。如果你能改变哪一个答案是正确的,那当然很好,但这没什么大不了的。如果你投了反对票,请提交评论,这样我将来可以改进。谢谢。我有点困惑,我什么时候投了反对票?我相信我最近接受了你的回答@艾尔莎我不知道谁投了反对票,我是在跟谁说话。显然不是你。:-)