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)时的输出。一切正常。 在此处输入图像描述

使用第二个查询调用 displayOnMap 方法时的输出。

在此处输入图像描述

我试着做rectangle.setMap(null); pWidget.removeFromParent(); 但我一直得到相同的结果。

4

1 回答 1

0

我遇到了同样的问题,我可以隐藏/删除/显示叠加层的唯一方法是通过 OverlayCompleteMapEvent。据我了解,在覆盖完成之前不可能获得覆盖的挂钩,一旦完成,获得挂钩的唯一方法就是处理“OverlayCompleteMapEvent”事件。我使用一个列表来存储叠加层,然后我可以隐藏/显示/删除它们。

于 2014-01-03T05:38:56.943 回答