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

Objective

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);

and 
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;

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

which give these results for zooms 0-4
127
90
53
28
14

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.
Comments