Google Maps API v3和叠加地图类型 - 使用fitBounds时出现错误

时间:2013-01-28 14:51:35

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

我遇到了Google Maps Javascript API的一个奇怪问题。使用fitBounds()方法时,webkit浏览器会在平移和缩放某些缩放级别之间进行动画处理。这很不错,但是当使用“叠加地图类型”时,有时不会显示原始地图图块。我无法在较小的显示器上重新创建它,所以我认为它与大型地图画布有关。

我做了一个简单的示例页面,它几乎从API文档中复制过来。为了重现问题:

1)使用大型显示器在Chrome(Mac或Windows)上打开http://pastehtml.com/view/cqloxyo5v.html,并确保窗口最大化。我正在使用24“。

2)按“点击我!”左下角的按钮触发fitBounds() - 方法,其中两个坐标位于地图范围之外。

3)地图将设置动画以适合坐标,并且一些地图图块将变为空。如果没有动画,则浏览器窗口可能太小。如果它确实有动画但是看起来没问题,请更新页面并再次尝试几次。它似乎偶尔会发生。

这就是我的样子:https://vimeo.com/58366640

有人遇到过类似的东西吗?有没有办法禁用动画?

提前谢谢!

3 个答案:

答案 0 :(得分:0)

这是一个已知问题,有很多要求提供禁用动画的选项。

我没有注意到视频中显示的行为,但对我来说,在非常高和非常低的缩放级别之间切换时,缩放动画是一个非常难看的过程。

我不知道它是否适合您的情况,是否能解决问题,但我在OpenLayers中找到了可能的解决方法,可以避免Google地图中的动画。它们只是隐藏完整的地图容器,并在流程完成后显示容器。

在你的情况下,这将是:

  $().ready(function() {
      $("#clickButton").click(function() {
        var bounds = new google.maps.LatLngBounds();
        bounds.extend(new google.maps.LatLng(49.0, 2.55));
        bounds.extend(new google.maps.LatLng(35.55, 139.78));
        var mapDiv=map.getDiv();
        map.fitBounds(bounds);
        google.maps.event.addListenerOnce(map,'tilesloaded',
                                          function(){mapDiv.style.visibility=''});
        mapDiv.style.visibility="hidden";
      });
  });

答案 1 :(得分:0)

另一个重复链接:http://tinyurl.com/baqvppr

这似乎是一个Chrome错误。出于某种原因,Chrome耗尽了GPU内存。 您可以在此投票支持此问题: https://code.google.com/p/chromium/issues/detail?id=175549

enter image description here

答案 2 :(得分:0)

通过偶然事件,我需要稍微平移我的地图以显示所有标记。除了解决这个问题外,地图还停止了对各种缩放的动画效果。效果并不是人们想要的(地图变成空白,然后标记变焦到它们的位置,然后显示新的范围的地图),但它对我需要的东西更好,也许它&# 39;对你来说更好。这是我的功能的底部,它将标记放在地图上:

map.fitBounds(latlngbounds);
//This minimum zoom trick I got from StackOverflow:
google.maps.event.addListenerOnce(map, 'bounds_changed', function(event){
    if (this.getZoom() >= 5){  
        this.setZoom(5) 
        }
    }); 
map.panBy(1,0);