OpenLayers の最小/最大ズーム レベル
-
27-09-2019 - |
質問
OpenLayers を使用して Web ページに地図を表示しています。CloudMade のタイルを使用していますが、OpenStreetMap の Mapnik タイルでも同じ問題が発生します。
ユーザーがワールド ビューまでズームアウトできないようにマップを制限しようとしています。少なくとも、おおよそ都市レベルのズームに留めておきたいと考えています。
使ってみました minZoomLevel
/ maxZoomLevel
/ numZoomLevels
プロパティ;だけ maxZoomLevel
そして numZoomLevels
プロパティは機能しているように見えますが、 minZoomLevel
プロパティは完全に無視されているようです。
これを達成する別の方法はありますか?
解決
minZoomLevel は、OSM がサブクラスである XYZ レイヤーではサポートされていません。
回避策については、次のチケットを参照してください。
- http://trac.osgeo.org/openlayers/ticket/2909 (ズームオフセットを適用)
- http://trac.osgeo.org/openlayers/ticket/2189 (minZoomLevelパッチを追加)
他のヒント
あなたは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 - ズーム レベルの数を制限します. 。ここには貼りません。そこにある説明を参照してください。