5

私は一日中これにいて、正直なところ私は考えがありません。現在のズームレベルに応じて表示/非表示にしたいWMSレイヤーがいくつかあります。はい、私はAPIドキュメントを調べましたが、それらは日として明確であるように見えますが、提案されたすべてに従い、望ましい結果が得られません:(

これは私が見たソースの1つでした:http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels

さらに悪いことに、ロード時にOpen Street Mapベースレイヤーが表示されている場合、これをロードベースレイヤーとして使用したいので、マップのnumZoomLevelsの制御が制限されているように見えることがわかりました。 ..。。

だから私の質問は:

私は何が間違っているのですか?ロード時にOpenStreetMapベースレイヤーを使用する場合、ズームレベルの制御に実際に回避策がないというのは本当ですか?それとも私が知らないことがありますか?

私のコードの試みのいくつかを次に示します。テイク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 Layerによって強制されるように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}
                );

あなたの提案のすべては心から感謝されます!

エルシェ

4

2 に答える 2

9

の代わりにminResolutionandを使用してみてください。通常は正常に動作します。メソッドを呼び出すと、任意のズームレバーの解像度を取得できます。maxResolutionminZoomLevelmap.getResolution()

もう1つのオプションは、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);
    }
  }
});
于 2010-10-25T09:49:21.903 に答える
5

解像度ではなく、レイヤーでmaxScaleとminScaleを使用することをお勧めしますが、それは好みの問題かもしれません。:-)解像度の値に関連付けることはできませんが、他の人があなたのコードを見るとき、スケールは理解しやすく、長期的には維持するのが簡単です。

于 2010-12-20T18:28:31.397 に答える