簡體   English   中英

OpenLayers中的最小/最大縮放級別

[英]Min/max zoom level in OpenLayers

我正在使用OpenLayers在網頁中顯示地圖。 我正在使用來自CloudMade的磁貼,但OpenStreetMap中的Mapnik磁貼也會出現同樣的問題。

我正在嘗試限制地圖,以便用戶無法一直縮放到世界視圖 - 我希望它們保持在大致城市級別的縮放至少。

我嘗試過使用minZoomLevel / maxZoomLevel / numZoomLevels屬性; 只有maxZoomLevelnumZoomLevels屬性似乎可以工作,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM