我正在开发一个使用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
答案 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的经验。你应该查看我说的话并告诉我,如果我有运气:)
希望它有所帮助!