Android 将字符串转换为Google地图中的标记,以删除地图中的旧标记

Android 将字符串转换为Google地图中的标记,以删除地图中的旧标记,android,google-maps,Android,Google Maps,我有一个复选框列表,用户可以在其中选择一些路由,然后从服务器获得响应。我有一个方法gotoLocation来更新标记的位置,并且当一个新的标记以相同的路由插入到服务器端的表中时,在地图中添加一个新的标记 以前,我在向地图添加新标记时遇到问题,因此,当我在数据库表中为具有相同选定路线的新标记插入数据时,新插入的标记未添加到地图中。在解决此问题之前,我将id和标记存储在HashMap中,方法是将标记的数据存储为HashMap中的String。在这种情况下,新插入的数据将作为标记添加到映射中 现在在更

我有一个复选框列表,用户可以在其中选择一些路由,然后从服务器获得响应。我有一个方法gotoLocation来更新标记的位置,并且当一个新的标记以相同的路由插入到服务器端的表中时,在地图中添加一个新的标记

以前,我在向地图添加新标记时遇到问题,因此,当我在数据库表中为具有相同选定路线的新标记插入数据时,新插入的标记未添加到地图中。在解决此问题之前,我将id和标记存储在HashMap中,方法是将标记的数据存储为HashMap中的
String
。在这种情况下,新插入的数据将作为标记添加到映射中

现在在
更新块
中,我需要将此数据
latit、longit、rout_dirc
转换为marker,以在更新其位置之前从map和HashMap中删除旧数据。在我的情况下,我该怎么做?既然HashMap中现在没有标记,我又不能使用
marker.remove()
删除旧标记,那么我如何从映射中删除旧标记

谢谢你的帮助

代码:

public class Map extends FragmentActivity {

    GoogleMap map;
    static HashMap<Integer, String> markerMap = new HashMap<Integer, String>();
    static String marker_string;

    static Marker marker = null;
    private void gotoLocation(int id, double lat, double lng,
            String route_direct) {
        final float zoom = 11;
        LatLng ll = null;
        if (markerMap.containsKey(id)) {
            // Update the location.
            marker_string = markerMap.get(id);              
            String[] marker_string_split = marker_string.split(",");
            double latit = Double.parseDouble(marker_string_split[0]);
            double longit = Double.parseDouble(marker_string_split[1]);
            String rout_dirc = marker_string_split[2];

            LatLng LL_2 = new LatLng(lat, lng);
            MarkerOptions markerOpt2 = new MarkerOptions().title(route_direct)
                    .position(LL_2);

            // This here doest work.
            marker.remove();

            // Remove from the HashMap tp add the new one.
            markerMap.remove(id);

            ll = new LatLng(lat, lng);
            MarkerOptions markerOpt = new MarkerOptions().title(route_direct)
                    .position(ll);
            marker = map.addMarker(markerOpt);

            String lat1 = Double.toString(lat);
            String lng1 = Double.toString(lng);
            String data = lat1 + "," + lng1 + "," + route_direct;
            markerMap.put(id, data);
            zoom();

        } else {
            // Add a new  marker 
            String lat1 = Double.toString(lat);
            String lng1 = Double.toString(lng);
            String data = lat1 + "," + lng1 + "," + route_direct;
            markerMap.put(id, data);

            ll = new LatLng(lat, lng);
            MarkerOptions markerOpt = new MarkerOptions().title(route_direct)
                    .position(ll);
            marker = map.addMarker(markerOpt);
            zoom();


        }
    }
}
公共类映射扩展了碎片活动{
谷歌地图;
静态HashMap markerMap=newhashmap();
静态字符串标记;
静态标记=空;
私人空位(内部id、双lat、双lng、,
字符串路由(U直接){
最终浮点缩放=11;
LATLL=null;
if(标记映射容器(id)){
//更新位置。
marker_string=markerMap.get(id);
String[]marker\u String\u split=marker\u String.split(“,”);
double-latit=double.parseDouble(marker_-string_-split[0]);
double longit=double.parseDouble(marker_string_split[1]);
String rout_dirc=marker_String_split[2];
LatLng LL_2=新LatLng(lat,lng);
MarkerOptions markerOpt2=新的MarkerOptions().标题(路线\直达)
.职位(LL_2);
//这不管用。
marker.remove();
//从HashMap tp中删除并添加新的。
标记映射移除(id);
ll=新板条液化天然气(板条液化天然气);
MarkerOptions markerOpt=新的MarkerOptions().标题(路线\直达)
.职位(ll);
marker=map.addMarker(markerOpt);
字符串lat1=Double.toString(lat);
管柱lng1=双相管柱(lng);
字符串数据=lat1+”,“+lng1+”,“+route_direct;
markerMap.put(id,数据);
缩放();
}否则{
//添加新标记
字符串lat1=Double.toString(lat);
管柱lng1=双相管柱(lng);
字符串数据=lat1+”,“+lng1+”,“+route_direct;
markerMap.put(id,数据);
ll=新板条液化天然气(板条液化天然气);
MarkerOptions markerOpt=新的MarkerOptions().标题(路线\直达)
.职位(ll);
marker=map.addMarker(markerOpt);
缩放();
}
}
}

它看起来像是
marker.remove()中的标记
被设置为null,除非您有一个要删除的标记的引用,否则它不会起任何作用。如果要删除所有旧标记,可以尝试以下操作:

mMap = super.getMap();
map.clear();
这将删除所有内容。否则,如果以后需要删除标记,则在添加标记时应该有一个引用

例如,您的标记变量是:

Marker marker = map.addMarker(..);
然后您可以通过
marker.remove()删除它
希望这是有意义的

mapView.clear()

它将删除地图中的所有标记, 你也可以参考谷歌官方文档

我不想删除地图上的所有标记,我只想删除带有特定
id
的标记来更新其位置。我有个主意,但我觉得这有点愚蠢。但是你可以试试。因此,如果您有标记的id,请通过从给定id获取从HashMap中删除lat/lng。添加您需要的任何新lat/lng点,然后通过循环地图将新的lat/lng点集推送到地图上。那么,除已删除的标记外,您的所有标记都仍然存在。我没有尝试过您的注释解决方案,但我已将其用于
HashMap
sine,因为我的问题之一是更新记录时,表id增加了1,我假设它是相同的id。谢谢您的帮助支持。你找到合适的工作解决方案了吗?如果是,请帮助我