OpenLayers中的最小/最大缩放级别

Dav*_*fer 20 javascript zoom openlayers openstreetmap cloudmade

我正在使用OpenLayers在网页中显示地图.我正在使用来自CloudMade的磁贴,但OpenStreetMap中的Mapnik磁贴也会出现同样的问题.

我正在尝试限制地图,以便用户无法一直缩放到世界视图 - 我希望它们保持在大致城市级别的缩放至少.

我尝试过使用minZoomLevel/ maxZoomLevel/ numZoomLevels属性; 只有maxZoomLevelnumZoomLevels属性似乎有效,而minZoomLevel属性似乎完全被忽略了.

还有另一种方法来实现这一目标吗?

Jon*_*han 11

你可以覆盖这个isValidZoomLevel功能.像这样的东西(未经测试):

OpenLayers.Map.isValidZoomLevel = function(zoomLevel) {
   return ( (zoomLevel != null) &&
      (zoomLevel >= 2) && // set min level here, could read from property
      (zoomLevel < this.getNumZoomLevels()) );
}
Run Code Online (Sandbox Code Playgroud)

编辑

或者您需要覆盖可用的分辨率,请参阅此处的示例:http://dev.openlayers.org/examples/zoomLevels.html


geo*_*ika 9

XYZ层不支持minZoomLevel,其中OSM是子类.

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

  • 这不再适用于OpenLayers 3.0.请参阅我对OpenLayers 3.0的更新答案. (3认同)

Gra*_*ham 7

我发现限制XYZ层的maxZoom级别的最简单方法是覆盖getNumZoomLevels方法:

map.getNumZoomLevels = function(){
        return 10;
        };
Run Code Online (Sandbox Code Playgroud)

这样可以在10级以上进行缩放,并且还可以正确绘制zoomBar控件.这个和zoomOffset选项的组合应该允许您轻松控制最小/最大缩放,而不必乱用分辨率或子类.