2012-07-23 15 views
0
function ZoomCenter(bounds, canvas) 
{ 
    var center = bounds.getCenter(); 

    if (canvas.getMapTypeId() == "roadmap") canvas.fitBounds(bounds); 
    else 
    { 
    var maxZoomService = new google.maps.MaxZoomService(); 

    maxZoomService.getMaxZoomAtLatLng(center, function(response) 
    { 
     if (response.status != google.maps.MaxZoomStatus.OK) alert("Error in Google MaxZoomService"); 
     else 
     { 
     var max_zoom = (response.zoom > SATMAP_MAX_ZOOM) ? SATMAP_MAX_ZOOM : response.zoom; 

     canvas.setOptions({ maxZoom: max_zoom }); 
     canvas.fitBounds(bounds); 
     canvas.setOptions({ maxZoom: SATMAP_MAX_ZOOM}); 
     } 
    }); 
    } 
} 

这是第一次这被称为缩放比地图上适合的1。第二次和第一次之后,它会使用完全相同的边界数据缩放到正确的级别。谷歌地图V3 fitBounds缩放到更接近的视图,当第二次调用相同的边界

在fitBounds中有错误吗?或者我错过了什么?

回答

0

没有看到更多的代码,也没有亲身体验过这种怪癖,这很难说。然而,我总是更怀疑我自己的代码中存在一个错误,而不是Google的错误,所以我会首先消除那些显而易见的可能性。

因此,我要做的第一件事就是用JS调试确认:

  • bounds是相同的两次
  • 它会通过相同的执行路径击中同一canvas.fitBounds(bounds)通话两次。 (你有它在那里两次。哪一个被执行取决于你的条件涉及MapTypeId。如果canvas有不同的MapTypeId每次通过时,可能会造成的怪癖。)

如果不调高该问题,下一个看看的地方可能是Google Maps API issue tracker

+0

地图类型是hybrib每次。对于检查的区域,最大缩放服务返回20。 SATMAP_MAX_ZOOM设置为20.边界数据每遍完全相同。画布每次都是相同的地图。边界数据每次传递完全相同。 – user1544767 2012-07-23 02:59:05

+0

经过更多调试后,我得出结论这是fitBounds中的一个错误。当初始缩放级别为10或更小时,fitBounds会返回1小于正确的缩放级别。如果初始缩放级别为11或更多,fitBounds将返回正确的缩放级别。 – user1544767 2012-07-23 03:58:51

+0

有趣!如果您还没有这样做,我会鼓励您在我的答案中的问题跟踪链接上提交错误报告。 – Trott 2012-07-23 06:06:27

相关问题