在Google Maps v2中按ID获取地图标记

时间:2013-03-12 17:28:21

标签: android google-maps google-maps-android-api-2

基本上在向地图添加标记时,它会返回新标记,您可以从中获取标记ID

Marker m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(lat,lon)));
String id = m.getId();
如果有很多标记而你只想删除一个标记,有没有办法通过它的id获取标记?

4 个答案:

答案 0 :(得分:20)

问题是标记ID是自动生成的,不能单独跟踪标记。已经提出了许多策略来解决这个问题。一个是use a hash map to track markers,然后使用您选择的键来查找特定标记并将其删除。另一个想法是重载其中一个标记字段,如代码段,然后自己添加一个键。例如,如果您正在制作新标记(使用Google示例代码),则可以将自己的密钥字符串放入代码段字段

mMap.addMarker(new MarkerOptions()                           
.position(MELBOURNE)                           
.title("Melbourne")                           
.snippet(KEY + "Population: 4,137,400"));

稍后您可以使用

来检索该密钥
String s = marker.getSnippet()
String key = s.substring(start, end)

然后使用条件删除特定标记(如果匹配)。根据你需要采取一种方法,我比另一种方法更容易,更有效。

答案 1 :(得分:4)

使用WeakHashMap<Integer,Marker>来存储标记,因为这样我们就不会在内存中保留对标记的引用,也不必担心垃圾收集标记。

其次建议的方法是使用带有ID和自定义数据的WeakHashMap。文档说标记对象可能会改变,因此不要使用标记作为关键字。如果活动被杀死并恢复,但ID将保持不变。有时,如果标记对象发生变化,它也可能返回null。

WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>();

希望它能帮助未来的观众......

答案 2 :(得分:1)

我知道,已经很晚了。但是现在,我们可以直接向标记添加唯一的 TAG

Marker marker = mMap.addMarker(markerOptions);
marker.setTag("");

Google Developers link about map marker TAG

答案 3 :(得分:0)

执行此操作的最佳方法是使用Map <int, Mark> dictionaryMark;

每次绘制时,只需将标记添加到字典中即可。