我在第二次调用时遇到麻烦,在GWT应用中加载Google Map。问题本身是,一旦调用了地图,它就不适合容器大小。这是一个常见的问题,正如之前的许多SO问题所描述的那样:
让我说我已经尝试了所有上述内容,遗憾的是似乎没有任何效果。我还必须说我正在使用GWT Maps API v3的非官方版本,可以找到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();
}
答案 0 :(得分:1)
我猜你试图在DOM没有完全构造并且检索到错误的尺寸时绘制地图。
尝试在a的回调中绘制/创建地图
Scheduler.get().scheduleDeferred()
致电。
<强>更新强>:
您也在混合使用DockLayoutPanel
和RootPanel
。
这将导致问题。请改用RootLayoutPanel
。
正常构建DOM,并在通常将地图添加到DockLayoutPanel
调用scheduleDeferred()
的位置构建DOM,并将地图添加到回调中的面板