Android 从谷歌地图上删除标记

Android 从谷歌地图上删除标记,android,google-maps,Android,Google Maps,在Android新的谷歌地图API中,我们可以,但没有办法(轻松)删除一个 我的解决方案是将标记保留在地图中,并在需要删除标记时重新绘制地图,但这不是很有效 private final Map mMarkers=new ConcurrentHashMap(); 专用void add(字符串名称,LATLL){ final MarkerOptions marker=新MarkerOptions().position(ll).title(name); mMarkers.put(名称、标记); run

在Android新的谷歌地图API中,我们可以,但没有办法(轻松)删除一个

我的解决方案是将标记保留在地图中,并在需要删除标记时重新绘制地图,但这不是很有效

private final Map mMarkers=new ConcurrentHashMap();
专用void add(字符串名称,LATLL){
final MarkerOptions marker=新MarkerOptions().position(ll).title(name);
mMarkers.put(名称、标记);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mMap.addMarker(marker);
}
});
}
私有无效删除(字符串名称){
m标记。删除(名称);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mMap.clear();
对于(标记选项项:mMarkers.values()){
mMap.添加标记(项目);
}
}
});
}
有人有更好的主意吗?

签名的方法是:

因此,当您通过指定标记的选项将标记添加到
GoogleMap
时,您应该保存返回的对象(而不是用于创建它的
MarkerOptions
对象)。此对象允许您稍后更改标记状态。完成标记后,可以调用将其从地图中删除


另外,如果您只想暂时隐藏标记,可以通过调用来切换标记的可见性。

要清除地图中的所有涂鸦,请使用

map.clear()

使用外接程序地图上的所有标记创建阵列

稍后,请使用:

Marker temp = markers.get(markers.size() - 1);
temp.remove();

1。如果要删除标记,可以按
marker.remove()操作
或者,也可以隐藏标记,而不是将其删除

 marker.setVisible(false);
并在以后需要时使其可见。
2。但是,如果要从地图中删除所有标记,请使用
map.clear()
注意:
map.clear()还将删除多段线、圆等。

3.如果不想删除
多段线、圆等,请使用标记长度的循环(如果有多个标记)来删除这些将其设置为可见假,并且不要使用
map.clear()在这种情况下。

像这样将标记添加到地图中

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
然后您将能够使用remove方法,它将只删除该标记

markerName.remove();

如果存在标记,请删除最后一个标记。如果标记不存在,请创建当前标记

Marker currentMarker = null;
if (currentMarker!=null) {
    currentMarker.remove();
    currentMarker=null;
}

if (currentMarker==null) {
    currentMarker = mMap.addMarker(new MarkerOptions().position(arg0).
    icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}

创建一个全局变量以跟踪标记

private Marker currentLocationMarker;
//删除旧标记

            if (null != currentLocationMarker) {
                currentLocationMarker.remove();
            }
//在中添加更新的标记并移动相机

            currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
                    new LatLng(getLatitude(), getLongitude()))
                    .title("You are now Here").visible(true)
                    .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
                    .snippet("Updated Location"));

            currentLocationMarker.showInfoWindow();

使用以下代码:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
       @Override
       public boolean onMarkerClick(Marker marker) {

           marker.remove();
           return true;
       }
   });

一旦你点击“一个标记”
,你就可以删除它。

只是一个便条,我今晚花了好几个小时才找到的东西

如果你因为某种原因决定抓住一个标记,在你从地图上移除它之后。。。getTag将返回NULL,即使剩余的get值将与创建标记时设置的值一起返回

如果删除标记,然后尝试引用它,则标记值将设置为NULL


对我来说似乎是个bug…

如果使用Kotlin语言,只需添加以下代码:

创建
GoogleMap
Marker
类型的全局变量

我使用变量标记使变量标记值可以直接更改

private lateinit var map: GoogleMap
private lateinit var marker: Marker
我使用此函数/方法在地图上添加标记:

private fun placeMarkerOnMap(location: LatLng) {
    val markerOptions = MarkerOptions().position(location)
    val titleStr = getAddress(location)
    markerOptions.title(titleStr)
    marker = map.addMarker(markerOptions)
}
创建函数后,我将此代码放在
onMapReady()
上,以删除标记并创建一个新标记:

map.setOnMapClickListener { location ->
        map.clear()
        marker.remove()
        placeMarkerOnMap(location)
    }
如果您希望在单击标记时显示地址位置,则可以添加此代码以隐藏和显示标记地址,但您需要一种获取地址位置的方法。我从这篇文章中得到了代码:


对于遵循此项目示例的用户,您可以通过这样做来删除标记

override fun onMapReady(googleMap: GoogleMap?) {
    googleMap?.apply {

        // Remove marker
        clear()

        val sydney = LatLng(-33.852, 151.211)
        addMarker(
            MarkerOptions()
                .position(sydney)
                .title("Marker in Sydney")
        )
        moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }
}

试试这个,它正在更新当前位置,效果很好

public void onLocationChanged(@NonNull Location){
//这里我们更新地图上的位置
LatLng myActualLocation=新LatLng(location.getLatitude(),location.getLength());
如果(markerName!=null){//marker name被声明为gloval变量。
markerName.remove();
}
markerName=mMap.addMarker(新的MarkerOptions().position(myActualLocation).title(“Marker”).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
//mMap.addMarker(新的MarkerOptions().position(myActualLocation).title(“Marker”).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myActualLocation,18));
}

这将清除地图上的所有覆盖,而不仅仅是问题所指的标记。这对我不起作用。marker.setVisible(false)、marker.remove()甚至markerManager.remove(marker)都不会影响映射。标记仍然存在。有什么提示吗?如果您决定检查标记的值,请参阅下面我关于保留标记的评论,而标记从地图中删除后几乎没有任何用处。。Remove方法将标记值设置为null…聪明!谢谢为什么要使用Runnable()添加标记?要在UI线程上添加标记,请使用mMap.clear()清除所有标记
map.setOnMarkerClickListener {marker ->
        if (marker.isInfoWindowShown){
            marker.hideInfoWindow()
        }else{
            marker.showInfoWindow()
        }
        true
    }
override fun onMapReady(googleMap: GoogleMap?) {
    googleMap?.apply {

        // Remove marker
        clear()

        val sydney = LatLng(-33.852, 151.211)
        addMarker(
            MarkerOptions()
                .position(sydney)
                .title("Marker in Sydney")
        )
        moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }
}