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

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

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

【问题讨论】:

    标签: google-maps


    【解决方案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);
         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        相关资源
        最近更新 更多