score:0

here's what i ended up with (don't be surprised about the strangeness of js – it's es6):

const convertzoomleveltomercator = (zoomlevel) =>
  math.pow(2, 8 + zoomlevel) / 2 / math.pi;
const convertzoomlevelfrommercator = (zoomlevelinmercator) =>
  math.log(zoomlevelinmercator * 2 * math.pi) / math.ln2 - 8;

testing:

console.log(convertzoomleveltomercator(1));
console.log(convertzoomleveltomercator(5));
console.log(convertzoomleveltomercator(10));
console.log(convertzoomleveltomercator(15));
console.log(convertzoomleveltomercator(20));
console.log('----');
console.log(convertzoomlevelfrommercator(convertzoomleveltomercator(1)));
console.log(convertzoomlevelfrommercator(convertzoomleveltomercator(5)));
console.log(convertzoomlevelfrommercator(convertzoomleveltomercator(10)));
console.log(convertzoomlevelfrommercator(convertzoomleveltomercator(15)));
console.log(convertzoomlevelfrommercator(convertzoomleveltomercator(20)));

output:

81.48733086305042
1303.797293808806
41721.51340188181
1335088.428860218
42722829.72352698
----
1
5
10
15
20

score:3

map.projection = d3.geo.mercator()
            .center([map.center[1], map.center[0]])
            .scale((1 << 8 + map.zoom) / 2 / math.pi)
            .translate([map.width / 2, map.height / 2])

not sure how that works, but looked at some other examples and figured it out.


Related Query

More Query from same tag