google map API zoom range
Google MapsGoogle Maps Problem Overview
I am using google map API version-3 , I was trying with different zoom value, I have randomly done for some numbers started with 1 upto 100 , map gets zoom in for increasing numbers but some level giving same result, I mean I am getting same zoom for 30 and 100.
I like to know , what is the exact range for zoom?
Google Maps Solutions
Solution 1 - Google Maps
Google Maps basics
Zoom Level - zoom
0 - 19
0 lowest zoom (whole world)
19 highest zoom (individual buildings, if available) Retrieve current zoom level using mapObject.getZoom()
Solution 2 - Google Maps
Available Zoom Levels
Zoom level 0 is the most zoomed out zoom level available and each integer step in zoom level halves the X and Y extents of the view and doubles the linear resolution.
Google Maps was built on a 256x256 pixel tile system where zoom level 0 was a 256x256 pixel image of the whole earth. A 256x256 tile for zoom level 1 enlarges a 128x128 pixel region from zoom level 0.
As correctly stated by bkaid, the available zoom range depends on where you are looking and the kind of map you are using:
- Road maps - seem to go up to zoom level 22 everywhere
- Hybrid and satellite maps - the max available zoom levels depend on location. Here are some examples:
- Remote regions of Antarctica: 13
- Gobi Desert: 17
- Much of the U.S. and Europe: 21
- "Deep zoom" locations: 22-23 (see bkaid's link)
Note that these values are for the Google Static Maps API which seems to give one more zoom level than the Javascript API. It appears that the extra zoom level available for Static Maps is just an upsampled version of the max-resolution image from the Javascript API.
Map Scale at Various Zoom Levels
Google Maps uses a Mercator projection so the scale varies substantially with latitude. A formula for calculating the correct scale based on latitude is:
meters_per_pixel = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
Formula is from Chris Broadfoot's comment.
Solution 3 - Google Maps
What you're looking for are the scales for each zoom level. Use these:
20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9 : 2311162.307000
8 : 4622324.614000
7 : 9244649.227000
6 : 18489298.450000
5 : 36978596.910000
4 : 73957193.820000
3 : 147914387.600000
2 : 295828775.300000
1 : 591657550.500000
Solution 4 - Google Maps
The range depends on where you are looking at. Some places only have zoom levels of 15 or so, where as other places have 23 (or possibly more). Google Maps has a getMaxZoomAtLatLng
API call you can make to retrieve the max zoom level.
Solution 5 - Google Maps
Use this function in order to get the best zoom based on your current location and a distance to the point (C# code tested with GMap.net on VS2022 but zoom levels and algorithm are the same for Google):
/// <summary>
/// Zoom map to fit the desired distance from point
/// </summary>
/// <param name="mapSize">The size of the control (map size in pixels)</param>
/// <param name="coverage">Ratio of the map, normally 70 (70%)</param>
/// <param name="latitude">Latitude where the point to draw is located</param>
/// <param name="distance">Distance to show from this point in meters</param>
/// <param name="minZoomLevel">Min level of zoom (normally 18)</param>
/// <param name="maxZoomLevel">Max level of zoom (normally 1)</param>
/// <returns>Zoom level</returns>
static double CalculateGMapZoom(Size mapSize, int coverage, double latitude, double distance, int minZoomLevel, int maxZoomLevel)
{
int pixels = mapSize.Width >= mapSize.Height ? mapSize.Height : mapSize.Width; //get the shortest dimmension of the map
double k = (double)pixels * 156543.03392 * Math.Cos(latitude * Math.PI / 180);
int zoom = (int)((Math.Round(Math.Log((coverage * k) / (distance * 100)) / 0.6931471805599453)) - 1);
return (zoom > maxZoomLevel ? (double)maxZoomLevel: (zoom < minZoomLevel ? (double)minZoomLevel: (double)zoom));
}
Usage:
map.Zoom = CalculateGMapZoom(mapa.Size, 70, latitude, 1000, 1, 18);