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