【问题标题】:How to add google maps object from GWT code?如何从 GWT 代码添加谷歌地图对象?
【发布时间】:2011-09-23 11:11:45
【问题描述】:

我想在我的 GWT 应用程序中使用谷歌地图。问题是 gwt-maps API 只支持 Google Maps API 第 2 版,而常规地图 api 是第 3 版。所以基本上我想做的是使用我的 GWT 代码中的标准 js 地图库,但这不工作:

public void onModuleLoad() {
        buildMap();
    }



    private final native void buildMap()/*-{



         <script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?sensor=false">
    </script>
            var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);

        }-*/;

我怀疑问题在于 onModuleLoad 不等同于 body.onload。你怎么看?

【问题讨论】:

    标签: javascript google-maps gwt google-maps-api-3 jsni


    【解决方案1】:

    您应该查看gwt-google-maps-v3,它是 Maps API 第 3 版的开源包装器。该项目在技术上已被弃用,因为它正在与 gwt-google-apis 合并,但它至少会让您走上正轨。

    【讨论】:

      【解决方案2】:

      我有一个完整的应用程序来执行此操作。在https://github.com/dartmanx/mapmaker/tree/0.5.2查看项目

      您可能需要特别注意我的 Google 地图实用程序类:

      https://github.com/dartmanx/mapmaker/blob/0.5.2/src/main/java/org/jason/mapmaker/client/util/GoogleMapUtil.java

      希望它有所帮助,我为那个 JSNI 经历了很多痛苦。

      杰森

      【讨论】:

      • 谢谢。我一定会看看这个。
      【解决方案3】:

      好的,我找到了解决办法。

      我做的第一件事是创建一个 UIBinder 来保存地图的 div:

      <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
          xmlns:g="urn:import:com.google.gwt.user.client.ui">
          <div id="map_canvas" style="width:100%; height:100%"></div>
      </ui:UiBinder> 
      

      下面是剩下的代码:

      public void onModuleLoad() {
          mapCanvas canvas = new mapCanvas();
          Document.get().getBody().appendChild(canvas.getElement());
          buildMap();
      }   
      
      
      private final native void buildMap()/*-{
          var latlng = new $wnd.google.maps.LatLng(-34.397, 150.644);
          var myOptions = {
            zoom: 8,
            center: latlng,
            mapTypeId: $wnd.google.maps.MapTypeId.ROADMAP
          };
          var map = new $wnd.google.maps.Map($doc.getElementById("map_canvas"), myOptions);
      }-*/;
      

      【讨论】:

      • ...为什么要使用
        元素?为什么不使用众多行为类似于
        但提供本机访问的可用面板之一?
      • 嗯,首先我是 GWT 的新手,我只是想创建一个简单的 JSNI 谷歌地图示例......现在我不知道如何从JSNI 块。
      • 好吧,既然有内置的 Maps API 包装器让您的生活更轻松,为什么还要使用 JSNI?似乎您正在创建代码,当您可以选择不这样做时,维护将是一个巨大的痛苦。使用包装器,省去手动查找无法单步执行的代码中的错误的压力。阅读我在下面发布的答案。
      • 我很乐意使用任何能让我的生活更轻松的东西 :) 首先,我想使用官方的 gwt-maps api,但它只支持 v2 的谷歌地图。 gwt-google-maps-v3 绝对不错,但不幸的是它已被弃用,所以我会检查那里的代码以了解我的实现,但我不想“盲目地”使用代码。那里有很多开发人员根本不使用 GWT,只使用 js 进行谷歌地图,一旦我更好地了解 JSNI,它不会有任何不同。
      • 它已被弃用,因为它正在合并到 gwt-google-apis 中。代码不会改变任何东西。 project 已弃用,而不是代码。
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签