Min/max缩水平在OpenLayers
-
27-09-2019 - |
题
我使用的OpenLayers显示的地图在一个网页。我使用的瓷砖从CloudMade,但同样问题的发生与Mapnik砖从地.
我试图限制地图,以便用户不能缩小所有出路的世界观的--我希望他们留在大约一个城市一级缩小至最小。
我已经尝试采用的 minZoomLevel
/ maxZoomLevel
/ numZoomLevels
属性;只 maxZoomLevel
和 numZoomLevels
属性似乎工作,而 minZoomLevel
酒店似乎被完全忽略。
是否有另一种方式来完成这个吗?
解决方案
XYZ 图层不支持 minZoomLevel,OSM 是该图层的子类。
请参阅以下票证以获取解决方法:
- 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
选项的组合应允许您轻松地控制最小/最大缩放,而不必用分辨率或子类更动。
其他的答案这里指的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限数量的放大一级.我不粘贴在这里,请参阅本说明。