2010-10-22 61 views
4

我一整天都在這裏,誠實地說我已經沒有想法了。我有一些WMS圖層,我想根據當前縮放級別顯示/不顯示。是的,我已經通過了API文檔,他們似乎很清楚白天,但我遵循一切建議,我沒有得到所需的結果:(根據縮放級別顯示WMS圖層

這是我看到的來源之一: http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels

然後爲了讓事情變得更糟我發現如果你有一個打開的街道地圖基礎層顯示在加載它似乎限制你的控制權地圖的numZoomLevels,正是我所需要的,因爲我想用它作爲我的加載基礎層...

所以我的問題是:

我在做什麼錯? 在負載上使用開放式街道地圖基礎圖層時,確實沒有關於縮放級別控制的解決方法嗎?還是有什麼我不知道的?

下面是我的一些代碼嘗試: 採取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:當縮放級別爲8-10 tib_villages層應僅顯示,地圖應該只有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: 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:在加載時擺脫了開放街道地圖基礎圖層後,地圖只有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

+0

** @ elshae **:我會在http://gis.stackexchange.com/或郵件列表*[email protected]*上發佈您的問題。 – Chau 2010-10-25 07:32:12

+0

嗯,我會去看看gis.stackexchange.com,我會在[email protected]上發帖,但我經常沒有迴應: -/ – elshae 2010-10-25 13:52:34

回答

4

我會建議在圖層上使用maxScale和minScale而不是分辨率,但這可能是一個味道的問題。 :-)我無法涉及到分辨率值,但是當其他人查看您的代碼時,規模很容易理解並在較長時間內保持不變。

+0

我實際上最終以minScale結尾:),太糟糕了,我無法將兩個答案都標記爲正確: -/ – elshae 2010-12-21 14:40:18

+0

沒關係。如果你可以改變哪個答案是正確的,那當然會很好,但這不是什麼大問題。 – 2010-12-21 15:31:36

+3

如果您正在投票 - 請提交意見,以便將來可以改進。謝謝。 – 2011-11-23 11:48:07

9

嘗試使用minResolutionmaxResolution而不是minZoomLevel。它通常工作正常。如果您撥打map.getResolution()方法,您可以獲得任何變焦杆的分辨率。

另一種選擇是聆聽OpenLayers.Mapzoomend事件並相應切換圖層可見性。這樣的事情:

map.events.on({ "zoomend": function (e) { 
    if (this.getZoom() > 2) { 
     layer1.setVisibility(false); 
     layer2.setVisibility(true); 
    } 
    else { 
     layer2.setVisibility(false); 
     layer1.setVisibility(true); 
    } 
    } 
}); 
+0

非常感謝!您的回答非常清晰簡潔,現在我的地圖功能正在按照我的要求工作:D – elshae 2010-10-25 19:28:02

+0

清晰的解釋,優雅的解決方案。工作無可挑剔。 – 2012-06-06 04:00:56

相關問題