### How to calculate appropriate google maps zoom level

2

I have a tricky question...I am using the google maps static API to create an image of a map with markers on it. What I am struggling to do is calculate the appropriate zoom level, given the positions of the two markers I want to display.

I have latitudeA, longitudeA, latitudeB, longitudeB, and the center point (easy). Does anyone know of a formula to solve for zoom level?

Thanks!

2012-04-04 01:00
by TomBomb

3

I took 3 static maps at levels 11, 12 and 13, and used the "Maps Labs" feature of Google Maps, holding down the shift key at the corresponding min/max latitude/longtitude marks. Then I wrote a Perl program to calculate the latitude/longtitude ranges, the expected values (with the formula I predicted by inspecting the data), and the deltas (ie. abs(expected - range)), which should be close to zero. Once I had convinced myself that I had gotten as close as I could, here were my results:

``````Z11:  LatRange[0.323999]  ExpLat[ 0.324]  DeltaLat[  0.0000000000000019]
Z11:  LonRange[0.439999]  ExpLon[  0.44]  DeltaLon[  0.0000000000000023]

Z12:  LatRange[0.161999]  ExpLat[ 0.162]  DeltaLat[  0.0000000000000010]
Z12:  LonRange[0.219999]  ExpLon[  0.22]  DeltaLon[  0.0000000000000011]

Z13:  LatRange[0.081000]  ExpLat[ 0.081]  DeltaLat[  0.0000000000000031]
Z13:  LonRange[0.109999]  ExpLon[  0.11]  DeltaLon[  0.0000000000000006]
``````

And the formulas I used were:

``````ExpLat = 0.162 * (2 ** (12 - Z))
ExpLon = 0.220 * (2 ** (12 - Z))
``````

Where ExpLat, ExpLon are the expected latitude and longtitude ranges, and Z is the zoom level.

2012-09-15 01:05
by golux
good answer golux - Jordan Richards 2012-09-16 18:27

2

Even though you are using the static maps api, you can still reference the regular maps script file, and then do a bounding box calculation:

``````map = new GMap2(document.getElementById("map"));

// Define the two corners of the bounding box
var sw = new GLatLng(59.0, 13.12); //any lat,lng pair
var ne = new GLatLng(60.35, 16.90);

var bounds = new GLatLngBounds(sw, ne);

var zoom = map.getBoundsZoomLevel(bounds));
``````
2012-04-04 02:17
by javram
well technically I'm not using the maps api, all I'm trying to do is get a map image to embed in an email. Is there no way to do this (mathematically) without using GMap calls - TomBomb 2012-04-04 02:33
Are you using any type of programming language to calculate this, or are you just trying to copy/paste the link from somewhere - javram 2012-04-04 02:57
Technically this is in PHP, but i'm trying to get an appropriate static google maps link like: