質問

OpenLayers を使用して Web ページに地図を表示しています。CloudMade のタイルを使用していますが、OpenStreetMap の Mapnik タイルでも同じ問題が発生します。

ユーザーがワールド ビューまでズームアウトできないようにマップを制限しようとしています。少なくとも、おおよそ都市レベルのズームに留めておきたいと考えています。

使ってみました minZoomLevel / maxZoomLevel / numZoomLevels プロパティ;だけ maxZoomLevel そして numZoomLevels プロパティは機能しているように見えますが、 minZoomLevel プロパティは完全に無視されているようです。

これを達成する別の方法はありますか?

役に立ちましたか?

解決

minZoomLevel は、OSM がサブクラスである XYZ レイヤーではサポートされていません。

回避策については、次のチケットを参照してください。

他のヒント

あなたはisValidZoomLevel関数をオーバーライドすることができます。このような何か(テストしていません):

OpenLayers.Map.isValidZoomLevel = function(zoomLevel) {
   return ( (zoomLevel != null) &&
      (zoomLevel >= 2) && // set min level here, could read from property
      (zoomLevel < this.getNumZoomLevels()) );
}

編集

それとも、利用可能な解像度を上書きし、ここでの例を参照してくださいする必要があります:ます。http:// dev.openlayers.org/examples/zoomLevels.htmlする

私はXYZ層用maxZoomレベルを制限する最も簡単な方法を発見するgetNumZoomLevelsメソッドをオーバーライドすることであった。

map.getNumZoomLevels = function(){
        return 10;
        };

このpeventsは、レベル10を超えてズームとも正しくzoomBarコントロールを描画します。これとzoomOffsetオプションの組み合わせは、簡単に解像度やサブクラスの周り混乱することなく、最小/最大ズームを制御できるようにする必要があります。

他の答えはここに前のバージョン3にOpenLayersをバージョンを参照します。

マップを初期化するときに、次のように OpenLayersを3で、あなたは、maxZoomマップオプションを使用することができます:

    var map = new ol.Map({
        target: 'mapcontainer-001',
        layers: layers,  // Layers need to be initialized previously
        view: new ol.View({
          center: ol.proj.transform([-5.12345, 42.12345], 'EPSG:4326', 'EPSG:3857'),
          zoom: 12,
          maxZoom: 19
        })
    });

詳しい情報は、OpenLayersをマニュアルに記載されています:ます。http:// OpenLayersを.ORG / EN / V3.0.0 / DOC /チュートリアル/ concepts.htmlする

今、私は、 "ビュー" で、これを使用します:

view: new ol.View({
    center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
    zoom: 15,
    maxZoom: 17,
    minZoom: 6
}),
そして、それが動作する罰金

解像度を定義することは(たとえv2.1の)問題が解決しない - 私はJSで自分zoombarを作ったので、私は、このための任意のpernament修正を見つけることができませんでした - 私が問題に遭遇した人に推薦するものだというzoombarカスタムタイルを使用します。

私は私のセットアップでzoomOffsetを使用する方法を見つけ出すことができなかったとして、私はこの解決策になってしまっています。

        map.getNumZoomLevels = function(){
            return (options.maxzoom-options.minzoom+1);
        };

        map.isValidZoomLevel = function(zoomLevel) {
            var valid = ( (zoomLevel != null) &&
                (zoomLevel >= options.minzoom) &&
                (zoomLevel <= options.maxzoom) );
            if(!valid && map.getZoom() == 0){
                map.zoomTo(options.maxzoom - (options.maxzoom - options.minzoom)/2);

            }
            return valid;
        }

私はこのような何かを試してみましたが、それは私のために動作します:

map.newMoveTo = map.moveTo;
map.moveTo = function(lonlat,zoom,options){
    return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false;
};

私が見つけた最良の答え(例を含む)は、次のとおりです。 OpenLayers - ズーム レベルの数を制限します. 。ここには貼りません。そこにある説明を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top