0

地図に長方形を重ねるために使用したクラスがあります。しかし、新しい結果のセットが私のdisplayOnMap メソッドに提供された場合、以前のオーバーレイを削除して新しい長方形を描画する方法を理解できません。

描画方法についてより多くの洞察を提供するため。中心を含む引数として 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)を初めて呼び出したときに出力されます。すべて正常に動作します。 ここに画像の説明を入力

2 番目のクエリで displayOnMap メソッドが呼び出されたときに出力されます。

ここに画像の説明を入力

私はrectangle.setMap(null);をやろうとしました。pWidget.removeFromParent(); しかし、私は同じ結果を得続けました。

4

1 に答える 1