2013-04-21 2 views
0

지도에 직사각형을 오버레이하는 데 사용한 클래스가 있습니다. 그러나 새로운 결과 집합이 내 displayOnMap 메서드에 제공되는 경우 이전 오버레이를 제거하여 새 사각형을 그리는 방법을 파악할 수 없습니다.GWT를 사용하여 오버레이를 지우는 방법

방법에 대한 더 많은 통찰력을 제공하십시오. PlotSetOutput을 인수를 중심으로 포함하며 각 중심에는 위도/경도 좌표 집합이 포함됩니다. 따라서 그것을 반복하고 위도/경도 경계를 만들고이를 사각형 객체에 할당하는 논리. 방법 (displayOnMap)은 처음 호출

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 방법은 제 2 쿼리라고 enter image description here

출력.

enter image description here

나는 rectangle.setMap (널)을하려고 노력; pWidget.removeFromParent();하지만 같은 결과가 계속 나왔습니다.

+0

소스를 시도했지만 일부 클래스가 누락되었습니다. 쇼케이스에서 테스트 할 수 있도록 모든 클래스의 전체 예제를 제공 할 수 있습니까? – Branflake2267

답변

0

동일한 문제가 있었지만 오버레이를 숨기거나 삭제할 수있는 유일한 방법은 OverlayCompleteMapEvent를 사용하는 것이 었습니다. 오버레이가 완료되기 전에 오버레이에 연결할 수 없다는 것을 알기 때문에 일단 오버레이가 완료되면 오버레이 콤플렉스 맵 이벤트를 처리하는 유일한 방법이됩니다. 내가 목록을 사용하여 오버레이를 저장 한 다음 숨기기/표시/삭제할 수있었습니다.

관련 문제