2013-04-21 66 views
0

我有一個類,我用它在地圖上覆蓋矩形。但是,如果向我的displayOnMap方法提供了一組新結果,我無法弄清楚如何刪除以前的覆蓋圖來繪製新的矩形。如何使用GWT清除覆蓋圖

提供更多關於繪製方法的見解。它將PlotSetOutput作爲一個包含中心的參數,每個中心包含一組緯度/長度的座標。因此,用於循環它並創建緯度/長邊界並將其分配給矩形對象的邏輯。

public class displayOnMap extends Composite { 

    private final VerticalPanel pWidget; 
    private MapWidget mapWidget; 
    private static Rectangle rectangle; 
    private RectangleOptions rectOpts; 
    private static final LatLng USCENTER = LatLng.newInstance(33.68,-116.17); 

    public displayOnMap(PlotSetOutput result) { 
     pWidget = new VerticalPanel(); 
     initWidget(pWidget); 
     draw(result); 
    } 

    private void draw(PlotSetOutput result) { 
     MapOptions mapOpts = MapOptions.newInstance(); 
     mapOpts.setZoom(4); 
     mapOpts.setCenter(USCENTER); 
     mapOpts.setMapTypeId(MapTypeId.TERRAIN); 
     mapWidget = new MapWidget(mapOpts); 
     pWidget.add(mapWidget); 
     mapWidget.setSize("800px", "800px"); 

     ArrayList<Centers> listOfCenters = new ArrayList<Centers>(); 

     List<ResultClusterPlots> finalCluster = result.getFinalcluster(); 

     int totalNumberOfClusters = result.getTotalNumberOfClusters(); 

     for (int i = 0; i < totalNumberOfClusters; i++) { 
      listOfCenters.add(i, new Centers()); 
     } 

     for (int j = 0; j < finalCluster.size(); j++) { 
      Centers p = listOfCenters.get(finalCluster.get(j).getClusterID()-1); 

      LatLng ne = LatLng.newInstance(finalCluster.get(j).getLatitude() 
        .get(0), finalCluster.get(j).getLongitude().get(0)); 

      LatLng sw = LatLng.newInstance(finalCluster.get(j).getLatitude() 
        .get(1), finalCluster.get(j).getLongitude().get(1)); 

      p.setLatLongArr(LatLngBounds.newInstance(ne,sw)); 
     } 

     for (int k = 0; k < listOfCenters.size(); k++) { 
      ArrayList<LatLngBounds> ltlgBound = listOfCenters.get(k).getLatLongArr(); 
      String color = getRandomColor(); 
      for (int l = 0; l < ltlgBound.size(); l++) { 
       rectOpts = RectangleOptions.newInstance(); 
       rectOpts.setStrokeColor("#FF0000"); 
       rectOpts.setStrokeOpacity(0.3); 
       rectOpts.setStrokeWeight(2); 
       rectOpts.setFillColor(color); 
       rectOpts.setFillOpacity(0.35); 
       rectOpts.setMap(mapWidget); 
       rectOpts.setBounds(ltlgBound.get(l)); 
       rectangle = Rectangle.newInstance(rectOpts); 
       rectangle.setMap(mapWidget); 
      } 
     } 
    } 
} 

輸出時所述方法(displayOnMap)被調用首次。一切正常。 enter image description here

displayOnMap方法用第二個查詢調用時輸出。

enter image description here

我試圖做rectangle.setMap(NULL); pWidget.removeFromParent();但我一直得到相同的結果。

+0

我嘗試了源代碼,但它缺少一些類。您能否提供所有類的完整示例,以便我可以在展示中對其進行測試? – Branflake2267 2013-04-21 04:04:08

回答

0

我有同樣的問題,我可以隱藏/刪除/顯示覆蓋的唯一方法是通過OverlayCompleteMapEvent。 據我所知,在完成之前無法獲得覆蓋層的鉤子,一旦完成,獲取鉤子的唯一方法就是處理「OverlayCompleteMapEvent」事件。我使用了一個列表來存儲疊加層,然後我可以隱藏/顯示/刪除它們。