decimal places for the zoom level whilst still preserving accuracy
sufficient to position the map within a few pixels.
The relationship between zoom level, decimal places, and the accuracy
with which the map can then be positioned in pixels is as follows:
Zoom Decimals Accuracy (pixels)
1 0 1.42
2 0 2.84
3 1 0.57
4 1 1.14
5 1 2.28
6 2 0.46
7 2 0.91
8 2 1.82
9 3 0.36
10 3 0.73
11 3 1.46
12 4 0.29
13 4 0.58
14 4 1.17
15 5 0.23
16 5 0.47
17 5 0.93
18 6 0.19
So the worse case is at zoom 2 where accuracy is still within 3 pixels.
Based on a patch by rjmunro.
function updatelinks(lon,lat,zoom,layers) {
+ var decimals = Math.pow(10, Math.floor(zoom/3));
var node;
+ lat = Math.round(lat * decimals) / decimals;
+ lon = Math.round(lon * decimals) / decimals;
+
+ node = document.getElementById("permalinkanchor");
+ if (node) {
+ var args = getArgs(node.href);
+ args["lat"] = lat;
+ args["lon"] = lon;
+ args["zoom"] = zoom;
+ args["layers"] = layers;
+ node.href = setArgs(node.href, args);
+ }
+
node = document.getElementById("viewanchor");
if (node) {
var args = getArgs(node.href);