我使用的OpenLayers显示的地图在一个网页。我使用的瓷砖从CloudMade,但同样问题的发生与Mapnik砖从地.

我试图限制地图,以便用户不能缩小所有出路的世界观的--我希望他们留在大约一个城市一级缩小至最小。

我已经尝试采用的 minZoomLevel / maxZoomLevel / numZoomLevels 属性;只 maxZoomLevelnumZoomLevels 属性似乎工作,而 minZoomLevel 酒店似乎被完全忽略。

是否有另一种方式来完成这个吗?

有帮助吗?

解决方案

XYZ 图层不支持 minZoomLevel,OSM 是该图层的子类。

请参阅以下票证以获取解决方法:

其他提示

您可以覆盖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选项的组合应允许您轻松地控制最小/最大缩放,而不必用分辨率或子类更动。

其他的答案这里指的OpenLayers版本3版之前。

使用的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
        })
    });
HTTP:

的更多信息可以在文档的OpenLayers发现//的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) - 我没有找到这方面的任何pernament修复,所以我做的JS我自己zoombar - 这就是我会推荐给任何人谁与遇到的问题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