Can anyone provide me with a link (or some details) on the actual ratio to "zoom level" figures for Google Maps?

e.g. Google Maps Level 13 = 1:20000

  • 2
    Based on the first information i made this function, perhaps someone could use it! function setZoomLevel(meters) { //console.log(Zoom level set meters: ${meters}); var zoomfactor = 1; if (meters < 1128) { zoomfactor = 15; } else if ((meters > 1128) && (meters < 2256)) { zoomfactor = 14; } else if ((meters > 2256) && (meters < 4513)) { zoomfactor = 13; } else if ((meters > 4513) && (meters < 9027)) { zoomfactor = 12; } else if ((meters > 9027) && (meters < 18055)) { zoomfactor = 11; } else if ((meters > 18055) && (meters < 36111)) { zoomfactor = 10; } else if ((meters > 36111) && (meters < 72
    – Friis1978
    Nov 25, 2018 at 21:40

14 Answers 14


If you are designing a map you plan on overlaying over google maps or virtual earth and creating a tiling scheme then i think what you are looking for are the scales for each zoom level, use these:

19 : 1128.497220
18 : 2256.994440
17 : 4513.988880
16 : 9027.977761
15 : 18055.955520
14 : 36111.911040
13 : 72223.822090
12 : 144447.644200
11 : 288895.288400
10 : 577790.576700
9 : 1155581.153000
8  : 2311162.307000
7  : 4622324.614000
6  : 9244649.227000
5  : 18489298.450000
4  : 36978596.910000
3  : 73957193.820000
2  : 147914387.600000
1  : 295828775.300000
0  : 591657550.500000

Source: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm

  • 2
    @capdragon Thanks. That's a well-known source (ESRI) but it leaves us still wondering how they came up with these scales.
    – whuber
    Mar 18, 2011 at 19:02
  • 5
    Rational is critical to whom? I don't see any mention of rational in the question. I believe he wants a straight forward answer to his straight forward question.
    – CaptDragon
    Mar 18, 2011 at 20:02
  • 7
    @cap Without a reason, it's difficult or impossible to distinguish a correct answer from an incorrect one. Without a reason, one is left having to rely on the authority of the answerer. I'm pretty sure that the reason the other replies in this thread are getting voted up and yours isn't has little to do with correctness or straightforwardness--yours is the most authoritative and straightforward of the bunch--but rather has everything to do with the reasoning provided by the others. BTW I haven't downvoted yours.
    – whuber
    Mar 18, 2011 at 20:10
  • 4
    Thanks: +1. You guys are probably geographers or remote sensing gurus. I'm merely a GIS developer who wants to help the guy reach his answer. A colleague of mine (PHD type, double MIT major) goes into an hour lecture every time i ask him a simple question and looses me along the way. I don't ask him anymore questions (i have a masters in science). I understand that other people like to get into the meat of rational and so forth, but many of us are too ignorant to know what they are talking about. IMHO they were confusing answers that don't answer his question.
    – CaptDragon
    Mar 18, 2011 at 20:37
  • 13
    The scales were chosen so that they can be evenly divided by raster tiles that are in base 2, (e.g. 128, 512...). Bing does it similarly msdn.microsoft.com/en-us/library/bb259689.aspx Jun 25, 2012 at 18:23

I found this response - written by a Google employee - this would probably be the most accurate one:

This won't be accurate, because the resolution of a map with the mercator projection (like Google maps) is dependent on the latitude.

It's possible to calculate using this formula:

metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)

This is based on the assumption that the earth's radius is 6378137m. Which is the value we use :)

taken from: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

BTW - I'm guessing that:

'latLng.lat()' = map.getCenter().lat()
'zoom' = map.getZoom()
  • 6
    @Rodrigo meters per pixel
    – jpoehnelt
    Apr 19, 2015 at 5:56
  • 7
    I can testify that this answer is still correct and very accurate three years later. This should be the accepted answer.
    – John
    Feb 14, 2018 at 12:36
  • 2
    Does this apply to x only or also y? Does Google Maps via Javascript API use the same scale for both axes?
    – Old Geezer
    Dec 1, 2018 at 4:26
  • 1
    @OldGeezer Yes it works in all directions. Linear distortion at any point in Mercator is equal in all directions. That's one of the reasons it gets used for slippy maps. When you zoom way in you get a reasonably low distortion map. once you compensate for scale, which is what this answer does.
    – smithkm
    Apr 5, 2019 at 15:49
  • 1
    where does 156543.03392 come from?
    – Hossein
    Oct 4, 2021 at 10:39

To help you understand the maths (not a precise calculation, it's just for illustration):

  • Google's web map tile has 256 pixels of width
  • let's say your computer monitor has 100 pixels per inch (PPI). That means 256 pixels are roughly 6.5 cm of length. And that's 0.065 m.

  • on zoom level 0, the whole 360 degrees of longitude are visible in a single tile. You cannot observe this in Google Maps since it automatically moves to the zoom level 1, but you can see it on OpenStreetMap's map (it uses the same tiling scheme).

  • 360 degress on the Equator are equal to Earth's circumference, 40,075.16 km, which is 40075160 m

  • divide 40075160 m with 0.065 m and you'll get 616313361, which is a scale of zoom level 0 on the Equator for a computer monitor with 100 DPI

  • so the point is that the scale depends on your monitor's PPI and on the latitude (because of the Mercator projection)
  • for zoom level 1, the scale is one half of that of zoom level 0
  • ...
  • for zoom level N, the scale is one half of that of zoom level N-1

Also check out: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F

  • 3
    The scale actually relies on the DPI of the generated map images. The two most commonly used resolutions are 96DPI (that's what Google map tiles are) and 72DPI. Mar 19, 2011 at 23:54
  • With 96DPI the scale 591657550.500000 is Level 0 according to this answer. But according to @CaptDragon is Level 1. I should consider starting from level 1 to calculate with Google Maps? Jun 8, 2016 at 14:21

Not that easy. Given the projection, the size of the tile pixels depends on the latitude of the area you're interested in. Then in terms of transforming tile pixel size in screen pixel size, it depends on the screen and the resolution the data is displayed, the dpi your screen is using.


Straightforward authoritative correct answer:  

591657550.500000 / 2^(level) 

it gives you the table above, entering the zoom level.

Try it live on jsfiddle.net

Because the question is only for Google MAPS, not EARTH, the OP doesn't care about 3D geometry. Google maps are ALREADY flattened so 1 pixel is always the same distance (in DEGREES, which is what concerns to a google map), here and in the ecuator as in the poles.

By the way, Did you realize that somewhere inside the first pixel row of a world's map, the scale is 1:1?

  • 7
    What does the number 591657550.500000 represent? Aug 22, 2014 at 13:59
  • 2
    @Sergio why not just 591657550.5?
    – Birowsky
    Feb 6, 2017 at 20:55
  • 3
    "The number comes from the tile resolution being set at a multiple of 256 pixels, and from the screen resolution (96dpi)" gis.stackexchange.com/a/111589/92997
    – juffel
    Mar 8, 2017 at 9:57
  • 2
    Does not work - it depends on Latitude, but your formula is not Aug 15, 2019 at 16:12

Radius @ Equator 6,378,137 meters exact (WGS-84)

Circumference at Equator = 40,075,017 meters (2πr)

Zoom level 24 uses 2 to the 32 power (4,294,967,296) pixels at circumference.

Equatorial Circumference / 2 32 = .009330692 meters per pixel

Unit at Latitude = (Cosine of Latitude) X (Unit at Equator)

Zoom level doubles each increment.

1 foot (International) = 0.3048 meters


Well its not really a legitimate question to start with. Scale ratios are relative to printed documents not computer screens. What you need for these images to be used with any accuracy is to know the dimension of each pixel then scale the image according to whatever your overlaying it with.

So back 15-20 year ago someone took WGS-84 as base data. (note in a previous post someone used a value of 40,075,160 I've seen this in Wikipedia a few places and it's incorrect. The correct value is 40,075,017

They then took that and divided it by a full 32 bit integer. This is a logical choice as it yields global accuracy to about one centimeter which is plenty for aerial imagery. 32 bit integers are also efficient to store and process.

Why this is level 24 was chosen I don't know however as someone else here worked out 0 gets you down to one 256 pixel tile for the earth.

Now for an example of how to use the above data. Lets say I have an image at zoom level 20 (as zoomed as they currently let you get) Take 0.009330692 (Zoom 24 at equator) double it for zoom 23, again for zoom 22, again for zoom 21 and one last time for zoom 20. You should now have 0.149231071.

Now lets say our image is at latitude 45. Take the Cosine of that (0.707106781) and multiply it by our 0.149231071 and it will give you 0.105564729 meters. That is the length and height of one pixel from an image at latitude 45 at zoom level 20. If you screen capture a 1000 x 1000 pixel image of that area the dimension are 105.56 meters square. If you want feet divide that 0.3048

As for sources I essencial reversed engineer about 5 years ago from various bit of info and documentation I found on the web including Google and MS mapping support sites.

I have used this hundred of time and overlaying it with actually field survey data and its always been correct. Check it against any to the tables posted here and the numbers will match.

  • 2
    I'm not sure how this answers the question. Nov 28, 2012 at 3:29
  • I agree with @Devdatta, could you please provide a source and some context.
    – Aaron
    Nov 28, 2012 at 3:45
  • Not sure if these comments were before or after the edit, but I used this answer and it works great
    – bjnortier
    Jan 10, 2013 at 15:05

There is such a table in the documentation of the Virtal Earth Tile System from Microsoft. But as said by GuillaumeC the values depends on the latitude and on the screen resolution. The table gives values as measured at the Equator and at a screen resolution of 96 dpi.

PS: Not sure of that, but the zoom levels by Microsoft might be shifted by 1 in comparison to the zoom levels by Google. But they definitivly use the same projection so that the values remain correct for Google.


Just did some calculations and got the following results:

Google Maps shows a 1km ruler (bottom left of the map) which is 90 pixels in length, at zoom level 13. Which means the following:

Assuming the screen resolution is 96 dpi or 36 dpcm, at zoom level 13 we have 0.4km (from 36/90) in 1cm, which yields map scale of 1:40,000 for a 96dpi screen.

For various operations on the screen the best is to take 90px as a basis, as all numbers will be round at all zoom levels, i.e.

  • Zoom level 12: 2km in 90px
  • Zoom level 11: 4km in 90px
  • Zoom level 10: 8km in 90px

and so on.

Note that this is an approximation that should work more or less fine on smaller scales rather than big ones.

(And Google likes round numbers in the end...)

  • 1
    If you look closely you'll discover that the length of the line changes depending on the latitude of the area you're viewing.
    – rcoup
    May 25, 2013 at 10:55
  • 1
    This is valid at a specific latitude only, as @rcoup mentioned. Not only the length of the scale bar varies, but the distance it represents too. To continue this example at zoom 13, the distance represented by the scale bar is 2 km in North Cape (71° latitude), 1 km around 45° latitude, and 500 m at the equateur.
    – François
    Aug 9, 2015 at 21:07

Based on all the info provided, I have built a function that gives the best z applied to a map when you want to have a horizontal line that represents N% of the displayed Map.

The displayed Map is characterized by its own pixel width.

function calculateZoom(WidthPixel,Ratio,Lat,Length){
    // from a segment Length (km), 
    // with size ratio of the segment expected on a map (70%),
    // with a map WidthPixel width in pixels (100px),
    // and a latitude (45°) we can get the best Zoom
    // assume earth is a perfect ball with radius : 6,378,137m and
    //      circumference at the equator = 40,075,016.7 m
    // The full world on google map is available in tiles of 256 px; 
    // it has a ratio of 156543.03392 (px/m).
    // For Z = 0; 
    // pixel scale at the Lat_level is ( 156543,03392 * cos ( PI * (Lat/180) ))
    // The map scale increases at the rate of square root of Z.
    Length = Length *1000;                     //Length is in Km
    var k = WidthPixel * 156543.03392 * Math.cos(Lat * Math.PI / 180);        //k = circumference of the world at the Lat_level, for Z=0 
    var myZoom = Math.round( Math.log( (Ratio * k)/(Length*100) )/Math.LN2 );
    myZoom =  myZoom -1;                   // Z starts from 0 instead of 1
    //console.log("calculateZoom: width "+WidthPixel+" Ratio "+Ratio+" Lat "+Lat+" length "+Length+" (m) calculated zoom "+ myZoom);

    // not used but it could be useful for some: Part of the world size at the Lat 
    MapDim = k /Math.pow(2,myZoom);
    //console.log("calculateZoom: size of the map at the Lat: "+MapDim + " meters.");
    //console.log("calculateZoom: world circumference at the Lat: " +k+ " meters.");

I cannot add a comment yet but this is a possible source of Pete's reply above: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] note that each increasing zoom level is twice as large in both the x and y directions. Therefore, each higher zoom level contains four times as much resolution as the preceding level. For example, at zoom level 1, the map consists of 4 256x256 pixels tiles, resulting in a pixel space from 512x512. At zoom level 19, each x and y pixel on the map can be referenced using a value between 0 and 256 * 219


Here's a formula to calculate altitude on Google Maps for zoom level and latitude.

const EARTH_RADIUS_IN_METERS = 6371010
const TILE_SIZE = 256


const altitude = (zoom, latitude) => (RADIUS_X_PIXEL_HEIGHT * Math.cos((latitude * Math.PI) / 180)) / (Math.pow(2, zoom) * TILE_SIZE)

None of the listed formulas worked for us, so we reverse-engineered Google Maps Javascript to implement pagination for Google Maps API.

Given the zoom formula in Google Maps.

enter image description here

WolframAlpha simplified it to this one.

enter image description here


z - zoom

a - altitude

l - latitude

s - screen pixel height; constant, equal to 768

t - pixel width and height of one Google Maps tile; constant, equal to 256

r - average Earth radius; constant, equal to 6371010

The resulting formula of altitude is

enter image description here

Here is a blog post which explains how we found this formula.

Disclaimer: I work at SerpApi.


I calculated the scales for four zoom levels:

Zoom level | Scale 20 1:500 19 1:1000 18 1:2000 17 1:4000

It seems that the scale is doubled as the zoom level increased by one step. So, I hope the scale for the zoom level 16 will be 1:8000 and so on.

  • 3
    Welcome to GIS.SE! Can you please provide a source or how was this calculated?
    – Paul
    Aug 12, 2014 at 16:33

Large scale cover small area

Small scale cover large area






Hi I think I have calculated that 1pixel = 11.627km in straight-line; not taking into account the radius of the earth. Here the link of video that explain how: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be. Hope that clear your mind.

  • It does not. The value of a pixel depends on latitude. Feb 2, 2016 at 15:00
  • Oh I see, not that complex I gone into. Feb 2, 2016 at 19:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.