我是 OpenLayers 的新手,正在尝试弄清楚如何限制用户可以平移和向外缩放的数量。对于此应用程序,用户在地图中选择一个本地区域并单击一个按钮,表示使用该区域,我们希望他们不能平移到该范围之外或缩小到更大的范围。单击按钮时,我使用 map.GetExtent() 将 maxRestrictedExtent 和 maxExtent 设置为当前范围。我还通过调用 map.getResolution() 将 maxResolution 设置为当前分辨率。平移效果很好,但缩放却不行。通过给定的分辨率,用户仍然可以缩小。
我添加了代码,每次范围更改时,都会打印出当前范围和分辨率。在第 6 次范围更改时,我设置了上面列出的三个地图属性并打印出这些设置。这使我可以从完整的世界视图放大到足够本地化的区域进行测试。在第 6 次范围更改时,我用鼠标滚轮缩小并查看选择的范围和分辨率。单击鼠标滚轮进行缩小时,下一个打印输出清楚地显示分辨率确实大于 map.maxResolution 的设置,并且我可以看到可视区域大于选择的区域。我已经尝试了很多事情,包括设置 maxExtent,但似乎没有什么会导致最大可缩放范围受到限制。如果我愿意,我可以再次放大到完整的世界视图。
下面你可以看到我编写的测试代码,它使用导航控件和 OSM 层实例化地图,然后注册地图的 moveend 事件,创建一个回调函数,执行我所描述的操作,最后缩放到最大程度.
有没有人知道我应该做些什么不同的事情来限制缩小到所选最大范围的能力?我希望我不必手动将范围调整回最大范围内,但如果是这样的话,至少知道这会有所帮助。
PS - 不幸的是,整个 html 没有显示,因为从样式到样式之前,以及最终样式之后都被处理为 html。唯一真正缺少的是我在正文的 onload 事件中调用了 init()。
<style type="text/css">
html, body {
width: 100%;
height: 100%;
margin: 0;
}
#map {
width: 100%;
height: 100%;
margin: 0;
}
</style>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
var num;
function init(){
map = new OpenLayers.Map('map', { controls: [] });
map.addControl(new OpenLayers.Control.Navigation());
map.addLayer(new OpenLayers.Layer.OSM());
map.events.register("moveend", this, function (e) {
if (num == 5)
{
map.maxExtent = map.getExtent();
map.restrictedExtent = map.maxExtent;
map.maxResolution = map.getResolution();
console.log(num++ + ": Setting maxExtent/restrictedExtent: " + map.maxExtent + "; resolution: " + map.maxResolution);
}
else
{
console.log(num++ + ": Changed to extent: " + map.getExtent() + "; resolution: " + map.getResolution());
}
});
num = 0;
map.zoomToMaxExtent();
}
</script>