在maps.google.com上缩放比在google maps API v3上更平滑



我注意到maps.google.com上的缩放行为与我使用谷歌地图api第3版的自定义地图不同(读作:更平滑)。后来我发现这也适用于谷歌的演示。

有没有一种方法可以使用谷歌地图API v3在地图上获得同样的平滑缩放感觉?

我一直在网上寻找解决方案,但我能找到的只是人们问如何制作缩放动画,这不是我想要的。

原生谷歌地图网站Maps.Google.com使用HTML5画布元素来渲染地图。谷歌地图API v3没有。目前(截至2015年底),使用谷歌地图API无法获得平滑的连续缩放行为。

在谷歌文档和网络上搜索没有结果的答案后,我花了一些时间来了解API v3地图.Google.com基本上是如何渲染和显示地图的。有一个主要区别可以立即清楚地说明为什么使用API无法进行连续缩放:

  1. Google Maps API v3创建一个由图像分片组成的地图,每个分片渲染到具有固定默认大小256 x 256 px的单个<div />容器中。切换缩放级别时,必须使用新图像(任何类型的图像,可能使用自定义覆盖等动态样式)重新渲染每个平铺。这是一项非常昂贵的任务,因此每个额外的缩放步骤都会增加要加载的额外资源,以及通过DOM操作重新渲染整个场景的额外计算成本。流畅的缩放体验几乎是不可能的,即使在高CPU/内存机器上使用现代浏览器也是如此。

  2. maps.google.com使用HTML5画布对象来渲染地图场景(我很确定旧浏览器有API v3风格的回退变体)。在本机支持的画布对象中绘制要比在DOM元素中替换图像便宜得多。谷歌使用基于矢量图形的方法,基本上可以在不需要获取额外资源的情况下连续放大细节。此外,特定缩放级别所需的信息可以作为较小的数据块获取,并应用于绘图例程。

我必须承认,我不知道这是如何详细工作的。这正是我通过检查源代码发现的,我希望它能很好地总结为什么"平滑缩放">目前使用API地图是不可能的。无论如何,让我们期待谷歌地图APIv4

还有其他允许平滑缩放的JavaScript映射库,如Mapbox GL和Cesium。他们都使用WebGL,就像maps.google.com.一样

https://www.mapbox.com/mapbox-gl-js/example/fitbounds/

https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Camera.html&label=展示

我认为现在取决于谷歌地图是否处于精简模式,这似乎是他们对老式的基于图像平铺的地图的称呼,而不是基于画布的地图。

根据谷歌地图的系统和浏览器要求文档,地图将禁用某些视频卡的3D,而对于某些视频卡,它超越了这一点,只允许您使用Lite模式。

最新更新