Convert field of view to zoom and back again

This is a snippet from the series described in Playing around with maps and streetview, and shows the calculation to convert between fov and zoom


The Streetmap image API uses field of view to figure out what part of a panorama to show, whereas streetview in Maps uses zoom levels. This is further complicated because 
  • The max streetview image API size is 640 x 640
  • The zoom levels for streetview are documented as 0-4, but in fact it can go as high as 5. However, in practise streetview stops zooming after about 3 with many panoramas
  • The conversion table given doesn't appear to give a very accurate result.

Zoom levels are not whole nubers in streetview of course, so you need a conversion formulae. This  can derived from this table 
var fov = 180/ Math.pow (2 , zoom);

var zoom = Math.abs(fov.180)/ log(2)

However, I find these formulae give a slight better (not quite perfect, but closer) representation
var fov = Math.atan(Math.pow(2,1-zoom))*360/Math.PI;

var zoom = 1-Math.log(Math.tan(fov*Math.PI/360))/Math.log(2);

which give these results for zooms 0-4

The result

Using this formula, to calculate the fov from the zoom generates a pretty accurate set of parameters to pass over to the streetview image api as you can see from the examples below using various zoom levels with each of the APIs. A generated Streetview image API looks like this

 The Streetview image API Maps Streetview selection

For more like this, see Ephemeral Exchange Why not join our forum, follow the blog or follow me on twitter to ensure you get updates when they are available.