【问题标题】:Allow Further Zoom on Google Maps v3 Satellite View允许进一步放大 Google Maps v3 卫星视图
【发布时间】:2015-05-09 05:48:22
【问题描述】:

我想在卫星视图底图上显示一些非常高分辨率的航拍图像。我的图像足以生成高达 23 级的图像。但是,Google 的卫星视图只允许放大到 20 级。我知道一旦用户放大到 20 级,我可以手动将地图类型切换到我的自定义叠加层(所以只显示我的地图类型),但随后我失去了完整缩放级别的 Google 图像。

我的问题是,一旦缩放达到 20 级,是否有某种方法可以注册事件,客户端试图进一步放大但不能?如果没有,关于如何在不丢失 20 级的 Google 图像的情况下启用进一步缩放的其他想法?

我能想出的唯一其他解决方案是创建第二个自定义磁贴服务器,它只是将请求转发到标准的 Google 磁贴 url,但它提供了不同的最小/最大缩放。如果这个想法是要走的路,我也想得到确认。谢谢。

【问题讨论】:

  • 您可以通过在mapOptions 中定义maxZoomminZoom 属性来限制缩放。
  • 是的,如果我只显示我的地图类型。但是,我有一个叠加地图类型,因此在内置卫星或地形地图类型上指定了最小和最大缩放级别。您知道如何增加(而不是减少)这些地图类型的最大缩放级别吗?
  • 这是一个很有前途的想法,但是在显示 SATELLITE 或 HYBRID 地图类型时,在 Google Maps v3.19 中扩展最大缩放不起作用。我认为这是因为这两种地图类型的最大缩放已设置为 22,但最大缩放是动态设置的,就像调用 MaxZoomService.getMaxZoomAtLatLng() 一样。

标签: google-maps google-maps-api-3


【解决方案1】:

我确定最简单的解决方案是重载更改缩放范围的函数,使用以下令人难以置信的 hacky 代码:

var zoomRangeModifier = googleMap.__proto__.__proto__.__proto__;
var originalSetFunc = zoomRangeModifier.set;
var hijackedSetFunc = function(name, value) {
    if (name === 'maxZoom') { // Old API: name === 'zoomRange'
        value = 23;           // Old API: value.max = 23;
    }
    originalSetFunc.call(this, name, value);
};
zoomRangeModifier.set = hijackedSetFunc;

【讨论】:

  • Google 似乎已经改变了他们的一些底层代码(截至 2019 年 1 月),所以现在应该是 if (a === 'zoomRange') { b.max = 23; } 而不是这个块 if (a === 'maxZoom') { b = 23; }
  • @dallinski 谢谢你。为我节省了很多时间。
  • 我编辑了答案以使用最新的 Google Maps JS。希望你不要介意。基本上,您现在只需要使用maxZoom 并且该参数是一个整数。如果您更喜欢以前的答案,请随时回滚。在这种情况下,请联系我,我将在更改中添加一个新答案。 :-)
  • @Peque 感谢您花时间更新!我在您的代码中添加了 cmets,以表明在旧版本的 Google 地图中这是如何完成的,以防某些用户仍然需要该信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多