Google Map GWT不适合容器大小

时间:2013-11-29 22:16:00

标签: java google-maps gwt google-maps-api-3

我在第二次调用时遇到麻烦,在GWT应用中加载Google Map。问题本身是,一旦调用了地图,它就不适合容器大小。这是一个常见的问题,正如之前的许多SO问题所描述的那样:

  1. Here
  2. Here
  3. Here
  4. Here
  5. 让我说我已经尝试了所有上述内容,遗憾的是似乎没有任何效果。我还必须说我正在使用GWT Maps API v3的非官方版本,可以找到here。因此,这就是问题所在:

    enter image description here

    现在,很奇怪,如果我更改浏览器大小,地图显示正确:

    enter image description here

    因此,看起来我需要以某种方式“调度”onResize事件......但我尝试了所有上述方法,似乎没有任何工作。为了澄清这一点,我构建地图并将其添加到容器中的部分是:

    private void buildMapMarinesPark() {
        //Visualizar datos...
        LatLng center = LatLng.newInstance(52.62715,1.7734);
            MapOptions opts = MapOptions.newInstance();
            opts.setZoom(9);
            opts.setCenter(center);
            opts.setMapTypeId(MapTypeId.HYBRID);
            MapTypeControlOptions controlOptions = MapTypeControlOptions.newInstance();
            controlOptions.setMapTypeIds(MapTypeId.values()); // use all of them
            controlOptions.setPosition(ControlPosition.TOP_RIGHT);
            opts.setMapTypeControlOptions(controlOptions);
            mapMarinePark = new MapWidget(opts);
            mapMarinePark.setSize("100%", "100%");
            // Add some controls for the zoom level
            List<EuropeanMarineParkDataEntity> parksPerAnio = null;
            listPolygon = new ArrayList<Polygon>();
            Polygon poly = null;
            for(int i=2003;i<=ANIO_MAP_PARK;i++){   
                parksPerAnio = this.hashAnioParks.get(""+i);
                if(parksPerAnio != null){
                for(EuropeanMarineParkDataEntity emp : parksPerAnio){
                    poly = this.createPolygon(emp);
                    poly.setMap(mapMarinePark);
                    listPolygon.add(poly);
                    }
                }
            }       
            ((Element)DOM.getElementById("currentYear")).setPropertyObject("innerHTML", ""+(ANIO_MAP_PARK));
    
            // Add the map to the HTML host page
            final DockLayoutPanel dock = new DockLayoutPanel(Unit.PX);
            dock.addNorth(mapMarinePark, 500);
    
            RootPanel.get("mapContainerProfile2").add(dock); 
            RootPanel.get("timeline").setVisible(true); 
            RootPanel.get("mapPanel2").setVisible(true); 
            RootPanel.get("gadget_marinepark").setVisible(true); 
            mapMarinePark.triggerResize(); --> Does not work!           
            onLoadedMapMarinePark();
    
        }
    

1 个答案:

答案 0 :(得分:1)

我猜你试图在DOM没有完全构造并且检索到错误的尺寸时绘制地图。 尝试在a的回调中绘制/创建地图 Scheduler.get().scheduleDeferred()致电。

<强>更新: 您也在混合使用DockLayoutPanelRootPanel。 这将导致问题。请改用RootLayoutPanel

正常构建DOM,并在通常将地图添加到DockLayoutPanel调用scheduleDeferred()的位置构建DOM,并将地图添加到回调中的面板