[英]Min/max zoom level in OpenLayers
我正在使用OpenLayers在網頁中顯示地圖。 我正在使用來自CloudMade的磁貼,但OpenStreetMap中的Mapnik磁貼也會出現同樣的問題。
我正在嘗試限制地圖,以便用戶無法一直縮放到世界視圖 - 我希望它們保持在大致城市級別的縮放至少。
我嘗試過使用minZoomLevel
/ maxZoomLevel
/ numZoomLevels
屬性; 只有maxZoomLevel
和numZoomLevels
屬性似乎可以工作,而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層不支持minZoomLevel,其中OSM是子類。
請參閱以下故障單以獲取解決方法:
我發現限制XYZ層的maxZoom級別的最簡單方法是覆蓋getNumZoomLevels方法:
map.getNumZoomLevels = function(){
return 10;
};
這樣可以在10級以上進行縮放,並且還可以正確繪制zoomBar控件。 這個和zoomOffset
選項的組合應該允許您輕松控制最小/最大縮放,而不必亂用分辨率或子類。
這里的其他答案指的是版本3之前的OpenLayers版本。
使用OpenLayers 3,您可以在初始化地圖時使用maxZoom
map選項,如下所示:
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
現在我在“視圖”中使用它:
view: new ol.View({
center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
zoom: 15,
maxZoom: 17,
minZoom: 6
}),
它工作正常
我最終得到了這個解決方案,因為我無法弄清楚如何在我的設置中使用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上 - 限制縮放級別的數量 。 我不在這里粘貼,請看那邊的說明。
定義分辨率並沒有解決問題(即使在v2.1中) - 我沒有找到任何pernament修復,所以我在JS中創建了自己的zoombar - 這就是我建議任何遇到使用自定義的zoombar問題的人瓷磚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.