2012-07-23 55 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