web-dev-qa-db-ja.com

Googleマップからマーカーを削除する

新しいAndroid用Google Maps APIでは、 マーカーを追加 を使用できますが、マーカーを(簡単に)削除する方法はありません。

私の解決策は、マーカーをマップ内に保持し、マーカーを削除するときにマップを再描画することですが、あまり効率的ではありません。

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();

private void add(String name, LatLng ll) {
  final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
  mMarkers.put(name, marker);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.addMarker(marker);
    }
  });
}

private void remove(String name) {
  mMarkers.remove(name);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.clear();

      for (MarkerOptions item : mMarkers.values()) {
        mMap.addMarker(item);
      }
    }
  });
}

誰かがより良いアイデアを持っていますか?

105
Jonas

addMarker のメソッドシグネチャは次のとおりです。

public final Marker addMarker (MarkerOptions options)

そのため、マーカーのオプションを指定してGoogleMapにマーカーを追加する場合、(作成に使用したMarkerオブジェクトの代わりに)返される MarkerOptions オブジェクトを保存する必要があります。このオブジェクトを使用すると、後でマーカーの状態を変更できます。マーカーの使用が終了したら、 Marker.remove() を呼び出して、マップからマーカーを削除できます。

余談ですが、一時的に非表示にするだけの場合は、 Marker.setVisible(boolean) を呼び出してマーカーの表示を切り替えることができます。

230
Anthony

マップ内のすべての落書きをクリアする

map.clear()
24

このようなマップにマーカーを追加します

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));

その後、removeメソッドを使用できるようになります。それはそのマーカーのみを削除します

markerName.remove();
23
Eclipse22

マーカーが存在する場合、最後のマーカーを削除します。マーカーが存在しない場合、現在のマーカーを作成します

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)));
}
4
dor sharoni

次のコードを使用します。

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

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

"a marker"をクリックすると、削除できます。

1
kuo chang

1。マーカーを削除する場合は、marker.remove();としてマーカーを削除できます。代わりに、マーカーを削除する代わりにマーカーを非表示にすることもできます

 marker.setVisible(false);

必要なときにいつでも表示できるようにします。
2。ただし、マップからすべてのマーカーを削除する場合使用map.clear();
注:map.clear();Polylines, Circlesなども削除します。
Polylines, Circlesなどを削除したくない場合は、マーカーの長さまでループを使用して(複数のマーカーがある場合)、それらを削除します ここで例を確認してくださいまたはそれらをVisible falseに設定し、そのような場合はmap.clear();を使用しないでください。

1

ただのメモ、私が今夜何時間も追跡していたもの...

何らかの理由でマーカーを保持することに決めた場合、マップからマーカーを削除した後、残りのget値は、マーカーが作成されたときに設定した値で返されますが、getTagはNULLを返します。 。

マーカーを削除してから参照しようとすると、TAG値はNULLに設定されます。

私にはバグのようです...

0
Speckpgh

マップに追加するすべてのマーカーで配列を作成します。

後で使用します:

Marker temp = markers.get(markers.size() - 1);
temp.remove();
0
Elton da Costa

マーカーを追跡するグローバル変数を作成します

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();
0
Hitesh Sahu