Consider the following example (I tried to keep it as simple as possible).
<html>
<head>
<style>
#map { width: 800px; height: 600px; }
</style>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
function init(){
var layer = new OpenLayers.Layer.OSM(
"OpenStreet Maps"
);
var extent = new OpenLayers.Bounds(
-1500000, 4000000, 5600000, 11000000
);
var map= new OpenLayers.Map({
div: 'map',
layers: [layer],
maxExtent: extent,
restrictedExtent: extent,
maxScale: 60000000,
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.Scale()
]
});
map.zoomToMaxExtent();
}
</script>
</head>
<body onload="init()">
<div id="map"></div>
</body>
</html>
As the OSM
map is in the Spherical Mercator Projection, the bounds (-1500000, 4000000, 5600000, 11000000)
should cover most of Europe. I set these bounds both as the maxExtent
and the restrictedExtent
of the map.
Furthermore, I set maxScale
to 60 M
.
After launching this example, the map really centers to Europe and restricts panning to other parts of the World. But, it absolutely disregards the maxScale
attribute and allows zooming far away.
Now, I try to remove the restrictedExtent
. I should be able to pan the map freely. This is true. However, now the zoomToMaxExtent()
doesn't work, although the maxExtent
is still set!
How come neither maxScale
nor zoomToMaxExtent()
would work in this example? Am I just gravely misunderstanding the OpenLayers documentation?
Best Answer
There is no way to do this with OL 2.11, so you need to change OpenLayers URL from http://openlayers.org/api/OpenLayers.js to http://openlayers.org/dev/OpenLayers.js and use the following code:
It should work as you expected.