Использование Google Maps v3 DrawingManager из GWT - PullRequest
1 голос
/ 12 декабря 2011

Я работаю над проектом, который использует GWT 2.4 и gwt-maps.jar для создания MapWidget и размещения его на панели с различными элементами управления. Это все отлично работает.

Я хотел бы дать своим пользователям возможность рисовать полилинию на карте и использовать метод getLength в Polyline, чтобы определить длину нарисованной полилинии. Я делал это раньше в ActionScript, и это было немного болезненно для шеи (в частности, резиновая полоса между последней нажатой точкой и мышью), и я надеялся, что мне не придется делать это снова.

Менеджер рисунков выглядит так, как будто он подходит (хотя бы для части рисования), но он находится в v3 API, а код gwt-maps.jar только в v2. Поэтому я подумал, что мог бы написать немного JavaScript и вызвать из GWT с помощью JSNI, что-то вроде (в 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 Ответ

1 голос
/ 12 декабря 2011

Прежде всего, я имею опыт общения только с GWT и GWT-JS.Не Google API.

Сейчас:

Похоже, вы передаете объект GWT (скомпилированный объект javscript) в DrawingManager.Проблема заключается в том, что DrawingManager API получает «хорошие объекты javascript» (не объекты с запутанными методами).

Если вы хотите передать HTML-элемент, то все в порядке (но тогда вы должны передать widget.getElement(), который действительно является<div> объект (по примерам).

Решение

Действительно, документы API GMaps говорят, что вы должны передать объект Map из API GMap. Вы создаете эту карту с элементом, который будет холстом..

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. Вы должны проверить, что я говорю, и скажите мне, если мне повезло:)

Надеюсь, это поможет!

...