0

これは、Google マップの GWT バインディングのマップ 3.8.0 のプレリリースのバグだと思いますが、そのルートをたどる前に、皆さんに確認しておこうと思いました。マップを作成し、新しく作成したマップ パネル/ウィジェットをそれを含むパネルに追加しようとすると、例外が発生します。既存の html div をラップするパネルでマップを作成すると例外なく表示されますが、HTML に div があるかどうかに関係なく、他のパネルに追加しようとすると例外がスローされます。

通常スローされる例外は次のとおりです。

gwt-google-apis gwt-map-3.8.0-pre throws JavaScriptException 'map' is not defined.

他にも例外はありますが、関連性がない限り無視しておきましょう。

ライブラリを入手したリンクは次のとおりです

余談ですが、元のソースを Java 1.5 コンパイラで再コンパイルしましたが、何も変更していません。

背景として、Google マップ v2 から v3 用に作成されたアプリケーションを移植しています。現在の製品バージョンでは、MapWidget オブジェクトが VerticalPanel (つまり、html テーブル) に追加され、それが別の VerticalPanel に追加され、最終的にポータルを通じて提供されました。この構造を変更する必要がある場合は、さらに大幅な書き直しが必要になるため、ご意見をいただければ幸いです。

このテーマでいくつかのバリエーションを試しましたが、同様の結果が得られました。多くの場合、マップは表示されますがグレー表示され、コントロールを介してマップを操作すると、通常は自動的に並べ替えられますが、そうでない場合もあります。IE-8 か firefox かは関係ないようです。

私のコードは次のようになります。

    LatLng myLatLng = LatLng.create(39.571993, -104.998184);
    MapOptions myOptions = MapOptions.create();
    myOptions.setZoom(16.5);
    myOptions.setCenter(myLatLng);
    myOptions.setMapTypeId(MapTypeId.SATELLITE);
    //com.google.gwt.dom.client.Element mapDiv = Document.get().getElementById("map_canvas");
    RootPanel root = RootPanel.get("MAP1_NetworkMapContainer");
    //HTMLPanel mapPanel = HTMLPanel.wrap(mapDiv);
    //mapPanel.setHeight("100%");
    //map = GoogleMap.create(mapPanel.getElement(), options);

    try {
        root.add(mapPanel);
    } catch (Exception e) {
        Log.error("Received Exception ", e);
        String  error = e.toString();
    }

...ウィジェットAKAとして、3.0.2のソースで行われた方法

public class MapWidget extends Widget {
    final private static String EXCEPTION_NOT_ATTACHED
        = "Map widget must be attached to window's document.";
    private GoogleMap map;

    public MapWidget(MapOptions options) {
      setElement(Document.get().createDivElement());
      map = GoogleMap.create(getElement(), options);
    }

... SimplePanel の拡張機能として

public class MapPanel extends SimplePanel {
    final private static String EXCEPTION_NOT_ATTACHED
        = "Map Panel must be attached to window's document.";
    private GoogleMap map;

    public MapPanel(MapOptions options) {
      map = GoogleMap.create(getElement(), options);
    }

結果は常に同じです。私の GWT ウィジェットが HTML に div の要素 ID を持っている場合は問題なく表示されますが、作成した div または html div の結果を追加してからルート パネルにアタッチしようとすると、例外がスローされます。ルート パネルであるか、他のタイプのパネルであるかは問題ではないようです。mapPanel を追加します。

4

2 に答える 2

1

私はこのライブラリを使い始めました:私がしていることのために、それは動作します。

これが私がした方法です:

public class MyMapWidget extends Composite {

  interface MyMapWidgetUiBinder
      extends UiBinder<Widget, MyMapWidget> {}

  private static MyMapWidgetUiBinder uiBinder = 
      GWT.create(MyMapWidgetUiBinder.class);

  @UiField FlowPanel mapContainer;   

  private GoogleMap map;  

  ...

  public MyMapWidget() {

       initWidget(uiBinder.createAndBindUi(this));

       MapOptions opts = MapOptions.create();

       opts.setScaleControl(true);
       // add your map options
  ...
       opts.setCenter(LatLng.create(44.1, 0.2);
       opts.setZoom(8.0);

       map = GoogleMap.create(mapContainer.getElement(), opts);

  ...
  }

私が持っている対応するUiBinder XMLファイルで

<g:FlowPanel ui:field="mapContainer" width="500px" height="350px" />
于 2012-10-02T23:00:29.170 に答える
0

これをプレリリース 1 バインディングで動作させることはできませんでした。ここにあるサードパーティのバインディングに切り替えました: Google マップ V3

この問題が 2 年半にわたって衰退し、v2 の強制終了の期限が迫っているため、GWT チームからの解決策がすぐに出てくるとは思えません。

私は GWT サイトにイシューを作成しました。そこで更新を確認するか、影響を受けている場合は投票してください。問題 504

于 2012-10-02T21:42:49.797 に答える