从Google地图中删除标记

时间:2015-05-22 16:53:45

标签: java android google-maps google-maps-api-3

我似乎无法弄清楚为什么我添加到Google地图中的标记没有被正确删除。

我根据通过回调返回给我的列表添加和删除标记。此列表每10秒更改一次,并返回一组包含预设键/ id的对象。只要在特定半径范围内,就可以每隔10秒返回一个具有相同精确字符串键/ id的对象。

我正在检查markerHashMap中的标记(表示Google Map上的标记)是否包含在新的markersCurrentHashMap中。如果markersCurrentHashMap中不存在该ID(因为该对象超出范围/半径),我将从Google Map中删除条目Marker,然后我从HashMap中删除该条目。

为什么我的Marker没有被正确删除,即使从markersHashMap中正确删除了Key / Value对?

这一行似乎是问题.. markersHashMap.get(key).remove();

以下是根据此返回列表添加/删除特定标记的方法。

private void updateMapMarkers(List<AnimateCarObj> carAnimateCarList) {
    animateCarObjMap.clear();
    markersCurrentHashMap.clear();

    //POPULATE CURRENT HASHMAP / ANIMATE CAR MAP
    for (AnimateCarObj ao : carAnimateCarList) {
        if (ao.isAnimating()) {
            isAnimCacheCarList.add(ao);
        }
        addAnimCarObjToMap(ao);
        addMarkerToCurrentHashMap(ao);
    }
    printAnimateCarMap();
    printCurrentMarkerMap();

    //REMOVE ALL MARKERS FROM MARKER MAP, THAT DO NOT EXIST IN THE CURRENT VIEWABLE LIST
    //removeOldMarkers();
    for (String key : markersHashMap.keySet()) {
        if (!(markersCurrentHashMap.containsKey(key))) {
            markersHashMap.get(key).remove();
            markersHashMap.remove(key);
        }
    }
    addNewMarkers();
    printMarkerMap();
}

如何添加标记

public void addNewMarkers() {
    for (String key : markersCurrentHashMap.keySet()) {
        if(!markersHashMap.containsKey(key)){
            addMarker(key);
        }
    }
}

添加创建标记,添加到hashmap

public void addMarker(String id) {
    AnimateCarObj animateCarObj = animateCarObjMap.get(id);
    Bitmap carIcon = IconUtils.loadIcon(getActivity(), "some_car_marker.png", 0,
                                                                            (int) DisplayUtils.dp2pixel(getActivity(), 50), ScaleMode.BY_HEIGHT);

    Marker marker = map.addMarker(new MarkerOptions().position(animateCarObj.getGps1())
                                                                .rotation((float) animateCarObj.getWs_CarInfoObj().getBearing())
                                                                .icon(BitmapDescriptorFactory.fromBitmap(carIcon))
                                                                .visible(true));

    addMarkerToHashMap(id, marker);
}

将标记添加到hashmap

public void addMarkerToHashMap(String id, Marker marker) {
    setUpMarkersHashMap();
    markersHashMap.put(id, marker);
}

以下是HashMaps的初始化方式

public void setUpMarkersHashMap() {
    if (animateCarObjMap == null) {
        animateCarObjMap = new HashMap<String, AnimateCarObj>();
    }

    if (markersHashMap == null) {
        markersHashMap = new HashMap<String, Marker>();
    }

    if (markersCurrentHashMap == null) {
        markersCurrentHashMap = new HashMap<String, Marker>();
    }

    if (markersResultHashMap == null) {
        markersResultHashMap = new HashMap<String, Marker>();
    }
}

0 个答案:

没有答案