使用来自GWT的Google Maps v3 DrawingManager

使用来自GWT的Google Maps v3 DrawingManager,gwt,google-maps-api-3,Gwt,Google Maps Api 3,我正在从事一个项目,该项目使用GWT2.4和GWT-maps.jar创建一个MapWidget,并将其放置在一个带有各种控件的面板中。这一切都很好 我想让我的用户能够在地图上绘制多段线,并在多段线中使用getLength方法来确定绘制的多段线的长度。我以前在ActionScript中做过这件事,这让我有点头疼(特别是上次点击的点和鼠标之间的橡皮筋),我希望以后不要再这样做了 绘图管理器看起来可能非常适合(至少对于绘图部分而言),但它在API的v3中,gwt-maps.jar代码仅在v2中。因此,

我正在从事一个项目,该项目使用GWT2.4和GWT-maps.jar创建一个MapWidget,并将其放置在一个带有各种控件的面板中。这一切都很好

我想让我的用户能够在地图上绘制多段线,并在多段线中使用getLength方法来确定绘制的多段线的长度。我以前在ActionScript中做过这件事,这让我有点头疼(特别是上次点击的点和鼠标之间的橡皮筋),我希望以后不要再这样做了

绘图管理器看起来可能非常适合(至少对于绘图部分而言),但它在API的v3中,gwt-maps.jar代码仅在v2中。因此,我想我可能会编写一些JavaScript,并使用JSNI从GWT调用,大致如下(在wibble.html-我的顶级html文件中):

然后(在Wobble.java中):

我已尝试传递MapWidget及其对等程序,但在这两种情况下,调用setMap时都会出现无效值错误

有人试过(并成功地)这么做吗?还是我找错了方向

谢谢


因此

首先,我只有GWT和GWT-JS通信方面的经验。不是谷歌API

现在:

看起来您正在将GWT对象(已编译的javscript对象)传递给DrawingManager。问题是DrawingManager API接收“漂亮的javascript对象”(而不是带有模糊方法的对象)

如果您想传递一个HTML元素是可以的(但是,您必须传递
widget.getElement()
,它实际上是一个
对象(通过示例)

解决方案

事实上,GMAPSAPI文档说你必须从GMAPAPI中传递一个映射对象。你用一个元素创建这个映射,这个元素就是画布

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方面的经验。我没有尝试过,也没有在GMAP或DrawingManager方面的经验。你应该检查一下我说的话,并告诉我是否幸运:)


希望有帮助

首先,我只有GWT和GWT-JS通信方面的经验。不是谷歌API

现在:

看起来您正在将GWT对象(已编译的javscript对象)传递给DrawingManager。问题是DrawingManager API接收“漂亮的javascript对象”(而不是带有模糊方法的对象)

如果您想传递一个HTML元素是可以的(但是,您必须传递
widget.getElement()
,它实际上是一个
对象(通过示例)

解决方案

事实上,GMAPSAPI文档说你必须从GMAPAPI中传递一个映射对象。你用一个元素创建这个映射,这个元素就是画布

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方面的经验。我没有尝试过,也没有在GMAP或DrawingManager方面的经验。你应该检查一下我说的话,并告诉我是否幸运:)


希望有帮助

我也一直在努力解决这个问题。问题在于,如果GWT制作了一个
MapWidget
,那么JavaScript就无法从中获取
Map
。如果JavaScript制作了一个
Map
,那么它就不能被GWT用作
MapWidget
。我也一直在努力解决这个问题。问题在于,如果GWT制作了一个
MapWidget
,那么JavaScript就无法从中获取
Map
。而如果JavaScript生成一个
Map
,那么GWT就不能将其用作
MapWidget