谷歌地图API缩放范围

Posted

技术标签:

【中文标题】谷歌地图API缩放范围【英文标题】:google map API zoom range 【发布时间】:2012-03-10 12:48:20 【问题描述】:

我正在使用 google map API version-3,我尝试使用不同的缩放值,我随机完成了一些从 1 到 100 开始的数字,地图会放大以增加数字,但某些级别会给出相同的结果,我的意思是我得到了 30 和 100 的相同缩放。

我想知道,缩放的确切范围是多少?

【问题讨论】:

【参考方案1】:

Google 地图基础知识

缩放级别 - 缩放

0 - 19

0 最低缩放(全世界)

19 最高缩放(单个建筑物,如果可用)使用mapObject.getZoom()检索当前缩放级别

【讨论】:

检查developers.google.com/maps/documentation/javascript/…,最大缩放级别似乎为18。是否有更改或文档不正确?在他的回答中提到的链接@bkaid中也有同样的说明。 @Jay:值 18 不是最大缩放级别。它只是在该示例中使用。请参阅谷歌文档Maximum Zoom Imagery Service:例如,大多数路线图图像的缩放级别为 0 到 18。卫星图像的变化范围更广,因为这些图像不是生成的,而是直接拍摄的。 18 和 19 都不是最高缩放级别。因此,如果您想知道特定点的最大缩放,您必须使用getMaxZoomAtLatLng(),正如@bkaid 所述。【参考方案2】:

可用的缩放级别

缩放级别 0 是可用的最大缩小缩放级别,缩放级别的每个整数步长都会将视图的 X 和 Y 范围减半,并将线性分辨率加倍。

Google 地图建立在 256x256 像素的平铺系统上,其中缩放级别 0 是整个地球的 256x256 像素图像。缩放级别 1 的 256x256 平铺从缩放级别 0 放大 128x128 像素区域。

正如 bkaid 所说,可用的缩放范围取决于您正在查看的位置以及您使用的地图类型:

路线图 - 似乎到处都可以放大到 22 级 混合地图和卫星地图 - 最大可用缩放级别取决于位置。以下是一些示例: 南极偏远地区:13 戈壁滩:17 美国和欧洲的大部分地区:21 “深度缩放”位置:22-23(见bkaid's link)

请注意,这些值适用于 Google Static Maps API,它似乎比 Javascript API 提供了更多的缩放级别。似乎静态地图可用的额外缩放级别只是来自 Javascript API 的最大分辨率图像的上采样版本。

不同缩放级别的地图比例

Google 地图使用墨卡托投影,因此比例随纬度变化很大。根据纬度计算正确比例的公式是:

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

公式来自Chris Broadfoot's comment。

【讨论】:

Google Static Maps API?哇。非常感谢您提到这一点!链接到API here... 将整个地球映射到 256x256 瓦片时,使用哪种投影? 感谢 API 链接,@zipzit!我添加了内联链接。 @Dims – Google 静态地图的所有缩放级别都使用墨卡托投影。 WhiteRabbit 对this thread 的评论解释了为什么使用墨卡托投影,尽管它夸大了远离赤道的土地规模。 Anders Kaseorg 对this Quora question 的回复提供了更详细的解释。【参考方案3】:

您正在寻找的是每个缩放级别的比例。使用这些:

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

【讨论】:

比例尺本身是无量纲的。 你知道这些数字是从哪里来的,或者它们是如何计算的吗? 我相信这些来自这里webhelp.esri.com/arcgisserver/9.3/java/… 所以缩放参数实际上是比例的对数【参考方案4】:

范围取决于您查看的位置。有些地方只有 15 级左右的缩放级别,而其他地方有 23 级(或可能更多)。 Google 地图有一个 getMaxZoomAtLatLng API 调用,您可以调用它来检索最大缩放级别。

【讨论】:

【参考方案5】:

使用此功能可根据您当前的位置和到该点的距离获得最佳缩放(C# 代码在 VS2022 上使用 GMap.net 测试,但缩放级别和算法与 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));

用法:

map.Zoom = CalculateGMapZoom(mapa.Size, 70, latitude, 1000, 1, 18);
   

【讨论】:

以上是关于谷歌地图API缩放范围的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用滚动缩放。谷歌地图嵌入 API [重复]

Android 谷歌地图 API v2 中心缩放

如何设置谷歌地图缩放级别以显示所有标记?

如何在谷歌地图中设置缩放级别

如何计算适当的谷歌地图缩放级别

谷歌地图api没有刷新