使用GWT的Google Maps v3 DrawingManager

时间:2011-12-12 16:37:52

标签: gwt google-maps-api-3

我正在开发一个使用GWT 2.4和gwt-maps.jar创建MapWidget的项目,并将其放置在具有各种控件的面板中。一切正常。

我想让我的用户能够在地图上绘制折线,并使用折线中的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 个答案:

答案 0 :(得分: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的经验。你应该查看我说的话并告诉我,如果我有运气:)

希望它有所帮助!