2012-03-11 16 views
0

Gmap.addoverlay()如果您調用getEarthInstance(),則會導致地圖縮小。在地圖插件中使用Gmaps G_SATELLITE_3D_MAP時,添加標記可完全縮放地圖

使用ge插件6.2.1.6014,Chrome/Mac OSX和{Firefox,Chrome}/Windows Vista Home Premium(交叉發佈於Google Earth API issues)。請參閱測試代碼here

第二個標記出現後不久,地圖縮小,即使沒有人提出要求。 通過在回調中添加alert()並延長timeout()的時間間隔,我敢肯定它是發生問題的addOverlay()而不是getEarthInstance()

爲了免疫我的代碼,我嘗試了回調中的註釋代碼,但顯然已爲時過晚。

那麼,有沒有什麼辦法可以在不致電getEarthInstance()的情況下確定插件的版本?也許一些黑客與google.load?如果沒有一個乾淨的方式來檢測插件的版本,只要這個版本的插件仍然安裝在那裏,我就必須禁用G_SATELLITE_3D_MAP,我認爲這個版本幾乎是永遠的?

我打電話給getEarthInstance(),因爲我想啓用幾個圖層並在地球上設置點擊監聽器。如果沒有getEarthInstance(),有沒有可能做這些事情?

回答

0

我還沒有廣泛地使用Maps API的v2,所以這可能是一個長期已知的行爲,但這看起來似乎是一個錯誤。我建議在Maps API v2 issue tracker上提交它,因爲插件本身(或插件API)無法真正做任何事情來更改地圖的視圖。

請注意,API的v2版已被棄用(自2010年5月以來!),因此它們只能修復迴歸。另外,你應該真的考慮切換到API的v3;還有一個方便的library for Earth API integration

在此期間,也有可能會幫助一些方法:

  1. 有沒有你正在檢查的 插件的版本號的原因是什麼?在最近的 版本中已經增加了一些API,但我不確定6.2版本中的內容會成爲一種破壞行爲。 插件現在已經使用與Google地球相同的自動更新程序 ,所以絕大多數用戶都使用最新版本的 插件。有幾個堅持在5.x和6.0的 具體原因,但真的不是很多。對於幾乎所有訪問您網站的 ,isSupported()檢查應該是 ,如果不是,他們可能有意選擇 ,並知道爲什麼事情不起作用。

  2. 既然你正在加載地球JavaScript庫,你可以考慮只加載插件的一個實例,而不涉及 的API。 google.earth.createInstance將幫助你在那裏 (你可以使用一個隱藏的html元素,如果有的話,只要確保 分離它,讓它完成後垃圾收集)。 在啓動一個插件實例時有一些開銷,然後丟棄它,但是在剛剛啓動它的時候它很小,你已經在這裏做了 。當視圖切換到3D時,下一個插件實例也將更快地創建爲 。

+0

謝謝! 'google.earth.createInstance()'正是我需要檢查這個錯誤而不被它觸及的。我會在另一個答案中發佈一些代碼,以防有人被同一個bug咬傷。 至於檢查版本號,我在我的文章中還不夠清楚:在[長時間運行的地圖V2應用](http://wisp.heywhatsthat.com)中出現的不良行爲突然作爲用戶升級(或自動升級)到當前的GE。例如,當我在GE版本6.1.0.5001的XP機器上運行測試代碼時,該錯誤似乎沒有發生。 – user1262414 2012-03-15 20:38:10

0

爲了任何人誰是被打的這個錯誤,這要歸功於由肯尼先生回答的建議,這裏的一些代碼來檢查插件版本,而犧牲品我們試圖避免故障:

function enable_geplugin(map, div, callback) { 
    if (!google.earth.isSupported()) 
    return; 

    var earth_div = document.createElement('div'); 
    document.body.appendChild(earth_div); 
    earth_div.style.height = '1px'; 
    earth_div.style.width = '1px'; 

    google.earth.createInstance(
    earth_div, 
    function(instance) { 
     if (!instance.getPluginVersion().match(/^6\.2\./)) { 
     map.addMapType(G_SATELLITE_3D_MAP); 
     if (callback) 
      map.getEarthInstance(callback); 
     } 
     earth_div.style.display = 'none'; 
     document.body.removeChild(earth_div); 
    }, 
    function(errorCode) { 
     // do this so user can click on map type "Earth" and see the download instructions 
     map.addMapType(G_SATELLITE_3D_MAP); 
     earth_div.style.display = 'none'; 
     document.body.removeChild(earth_div); 
    } 
); 
} 

例如使用here

(在OSX /鍍鉻中,document.body.removeChild(earth_div)產生未捕獲的ReferenceError:NPObject刪除,但是這是我最小的麻煩)

所以我們現在可以有效地禁用G_SATELLITE_3D_MAP不良插件的版本,但我仍然希望有人在使用插件來修復錯誤本身。

相關問題