<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 3.1  (Linux)">
<style type="text/css">
        <!--
                @page { margin: 0.79in }
                P { margin-bottom: 0.08in }
        -->
        </style><font
 face="Helvetica, Arial, sans-serif"><big><font size="1"><big>Hi
everybody,<br>
I'm building an application based on OpenLayers but,
strange enough, I'm facing a problem with zoom and
resolutions.<br>
Though I googled a lot and searched through the
mailing list, I still haven't found the correct answer to how to
calculate resolutions.<br>
Here's how I calculate them:<br>
-
having 4 zoom levels<br>
- knowing the exact size of the map at each
zoom level, say w0, w1, w2, w3, being w0 the outer zoom level<br>
the
resolutions array is calculated as [w0/w3, w0/w2, w0/w1, w0/w0].<br>
I
even tried to overestimate the wi's to make them multiple of the tile
size (256 pixels), with no luck.<br>
<br>
I use a WMS-like layer and, to
retrieve the correct tile, having coordinates x and y, I override the
getUrl function:</big></font><br>
<font size="1"><big><br>
&nbsp;&nbsp;&nbsp;
getURL: function (bounds) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bounds = this.adjustBounds(bounds);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
var res = this.map.getResolution();<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
var x = Math.round ((bounds.left - this.maxExtent.left) / (res *
this.tileSize.w));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var
y = Math.round((this.maxExtent.bottom + bounds.bottom ) / (res *
this.tileSize.h));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var
z = this.serverResolutions != null ?<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
OpenLayers.Util.indexOf(this.serverResolutions, res) :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.map.getZoom();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var
imageSize = this.getImageSize();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
var newParams = {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'X': x,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'Y': y,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'Z': z,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'WIDTH': imageSize.w,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'HEIGHT': imageSize.h<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var requestString =
this.getFullRequestString(MyOpenLayers.Configuration.MAP_TILE_PATH,
newParams);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
requestString;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
where: <br>
- maxExtent
is an OpenLayers bound set to [0,0,w0,h0] (w0 and h0 are the width
and height at the outer zoom level)<br>
- this.tileSize.w and
this.tileSize.h are equal to 256.<br>
<br>
Now, when zooming in, two
weird behaviours occur:<br>
- the zoomed map is not centered at the
point of the map I was expecting;<br>
- more than the necessary tiles
are retrieved, even tiles with negative coordinates.<br>
<br>
Note that
I'm not using the "standard" coordinates' system used by
OpenLayers, in fact the tile (0,0) is placed at the bottom left
corner of the viewpoint.<br>
Thanks in advance,<br>
regards,<br>
franz<br>
</big></font></big></font>
</body>
</html>