21

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

ユーザーがワールド ビューに完全にズームアウトできないようにマップを制限しようとしています。少なくとも都市レベルのズームにとどまることを望んでいます。

minZoomLevel//maxZoomLevelプロパティを使用してみましたnumZoomLevelsmaxZoomLevelnumZoomLevelsプロパティのみが機能しているように見えますが、minZoomLevelプロパティは完全に無視されているようです。

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

4

9 に答える 9

11

関数をオーバーライドできます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

于 2010-11-21T22:18:35.133 に答える
9

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

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

于 2010-11-28T02:17:52.660 に答える
8

XYZレイヤーのmaxZoomレベルを制限する最も簡単な方法は、getNumZoomLevelsメソッドをオーバーライドすることでした。

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

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

于 2012-02-24T11:28:12.203 に答える
2

ここでのその他の回答は、バージョン 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/tutorials/concepts.html

于 2016-02-01T16:42:39.250 に答える
1

これを「ビュー」で使用します。

view: new ol.View({
    center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
    zoom: 15,
    maxZoom: 17,
    minZoom: 6
}),

そして、それはうまく動作します

于 2016-05-06T20:42:55.347 に答える
0

私はこのようなことを試しました、そしてそれは私のために働きます:

map.newMoveTo = map.moveTo;
map.moveTo = function(lonlat,zoom,options){
    return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false;
};
于 2012-07-13T08:44:15.803 に答える
0

私が見つけた最良の答え (例を含む) はOpenLayers - limit the number of zoom levelsでした。ここには貼り付けません。あちらの手順を参照してください。

于 2013-05-13T10:02:45.477 に答える
0

セットアップで 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;
        }
于 2012-05-14T12:00:25.557 に答える