2011-12-12 44 views
1

我正在使用GWT 2.4和gwt-maps.jar創建MapWidget並將其置於具有各種控件的面板中的項目。這一切工作正常。從GWT使用Google Maps v3繪圖管理器

我想讓我的用戶能夠在地圖上繪製折線,並使用折線中的getLength方法來確定繪製的折線的長度。我之前在ActionScript中做過這件事,它在頸部有點疼痛(特別是最後一次點擊點和鼠標之間的橡皮筋),我希望不必再這樣做。

繪圖管理器看起來可能很適合(至少對於繪圖部分),但它在API的v3中,而gwt-maps.jar代碼僅在v2。所以我想我可能會寫一些JavaScript和使用JSNI,沿着線的東西從GWT調出(在wibble.html - 我的頂級HTML文件):

var dM = new google.maps.drawing.DrawingManager(... 

function showDM(map) { 
    dM.setMap(map); 
    dM.setOptions({ 
     drawingControl: true 
}); 

然後(在Wobble.java) :

private MapWidget map = new MapWidget(... 

private native void showIt(final MapWidget map) /*-{ 
    $wnd.showDM(map); 
}-*/; 

我試圖傳遞MapWidget及其同行,但在這兩種情況下調用的setMap當我得到一個無效值錯誤。

有沒有人試過(併成功)做到這一點或我是否在錯誤的樹上出現?

感謝,

SO

回答

1

首先,我只有使用GWT和GWT-JS的通信體驗。不是Google API。

現在:

看起來你傳遞一個GWT對象(編譯javscript對象)的DrawingManager。問題在於DrawingManager API接收到「很好的JavaScript對象」(不包含具有混淆方法的對象)。

如果你想傳遞一個HTML元素就可以了(但是,你必須通過widget.getElement()這確實是一個<div>對象(舉例)。

解決方案

事實上GMaps API文檔說,你必須通過從GMAP API Map對象。您創建一個地圖,這將是在畫布上的元素。

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

如果你想使用你MapWidget作爲地圖畫布那麼你可以使用它的HTML元素。

在GWT:

private native void showIt(final MapWidget map) /*-{ 
    $wnd.showDM(map.getElement()); // use mapwidget's element as canvas 
}-*/; 

在javascript中:

function showDM(canvasToUse) { 
    // TODO: define myOptions :) 
    var map = new google.maps.Map(canvasToUse, myOptions); 
    dM.setMap(map); 
    dM.setOptions({ 
     drawingControl: true 
}); 

免責聲明

這只是基於我與GWT和JSNI經驗。我沒有嘗試過,也沒有GMaps或DrawingManager的經驗。你應該檢查我說什麼,並告訴我,如果我運氣:)

希望它有幫助!

+0

我也一直在摔跤。 問題是,如果GWT生成一個'MapWidget',那麼JavaScript無法從它獲取'Map'。雖然如果JavaScript創建了一個Map,那麼它不能被GWT用作MapWidget。 –