如何从android中的Google Map v2中清除圆圈和标记

时间:2013-05-22 01:49:33

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

我试图在Android中的Google Map v2上绘制一个圆圈,当中心位置发生变化时,将中心作为当前位置。现在我所看到的是,每当位置变化时,圆圈不断被绘制(如果位置相同则相互重叠)而不删除前一个圆圈。 Marker也是如此。

以下是我用于在Google Map v2上绘制圆圈的代码

@Override
public void onLocationChanged(Location location) {
    if (location != null) {

    // Create a LatLng object for the current location
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

    // Show the current location in Google Map
    map.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    // Zoom in the Google Map
    map.animateCamera(CameraUpdateFactory.zoomTo(14));

    CircleOptions circleOptions = new CircleOptions().center(latLng) // set center
    .radius(1000) // set radius in meters
    .fillColor(Color.TRANSPARENT) // default
    .strokeColor(0x10000000).strokeWidth(5);

    myCircle = map.addCircle(circleOptions);

    map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));
}

如何确保每当下次绘制圆圈时,将从Google地图中清除上一个圆圈和标记。我需要在代码中做出哪些更改?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

从地图中删除内容很简单。无论出于何种原因,在GoogleMaps v2中,您不能通过获取其ID来删除Marker,因为该值在创建时自动生成,因此几乎无用。要解决此问题,您需要做的就是创建一些可以存储对要删除的对象的引用的东西。一种方法是创建HashMap并存储对Marker,圈子或您希望删除的任何其他内容的引用,以及一些唯一ID。通过在HashMap中存储您放置在地图上的内容的引用,然后每次您的位置更新时,您都可以在与该键相关联的标记上调用remove。对于圆圈也是如此(如果你按照下面的方式设置类型,你将需要一个不同的HashMap - 我不知道你是否可以使用通用的String,它将存储两者的对象图。) / p>

要使用此方法,请将HashMap声明为其实例变量,以便可以从Activity

中的所有方法访问它
private HashMap<String, Marker> mapStuff = new HashMap<String, Marker>();

然后,无论您在何处创建Marker或其他地图对象,只需将其添加到具有某个键值的HashMap

Marker dude = map.addMarker(new MarkerOptions()
.position(newLatLng(latitude, longitude))
.title(MARKER_TITLE)
.snippet(SNIPPET));
mapStuff.put("userMarker", dude);

这个概念与另一张海报的建议非常相似,只是将Marker作为实例变量并在那里存储引用。两者都做同样的事情。如果您处理多个标记或对象,HashMap方法最有效。如果您只处理一个Marker或一个圈子,则单变量方法可能更正确,因为您不需要使用Collection来添加或删除一个标记。只需声明

private Marker userMarker;

然后将Marker添加到地图中,存储参考

userMarker = map.addMarker(new MarkerOptions()
.position(newLatLng(latitude, longitude))
.title(MARKER_TITLE)
.snippet(SNIPPET));

当您更新您的位置时,可能在onLocationChanged中只检查标记的存在并将其删除(如果存在)并重新添加

if(userMarker == null){
    displayUserMarker(location);
} else {
    userMarker.remove;
    displayUserMarker(location);
}

答案 1 :(得分:1)

map.clear();

在if(location!= null)

之前添加

因此,每次位置更改时,所有标记和圆圈都会被移除并再次绘制

答案 2 :(得分:0)

首先,保持对标记的引用,就像保持圆圈一样

myMarker = map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));

如果要删除它们,只需拨打remove()

即可
myCircle.remove();
myMarker.remove();