GoogleMapからマーカーを削除する


123

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

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

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);
      }
    }
  });
}

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


なぜマーカーを追加するためにRunnable()を使用するのですか?
user3927312 2017

UIスレッドで実行するには
Jonas

mMap.clear()を使用してすべてのマーカーをクリアする
Bahaa Salaheldin

回答:


258

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

public final Marker addMarker (MarkerOptions options)

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

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


1
これは私のために働いていません。marker.setVisible(false)、marker.remove()、さらにはmarkerManager.remove(marker)がマップに影響を与えていません。マーカーはまだ残っています。ヒントはありますか?
Totalys 2016年

1
マーカーを保持することについては、下記の私のコメントを参照してください。マーカーをマップから削除した後は、マーカーの値を調べる必要がある場合はほとんど
役に立ちません。Remove

賢い!ありがとう!
Taslim Oseni

32

このように地図にマーカーを追加します

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

次に、removeメソッドを使用できます。そのマーカーのみが削除されます

markerName.remove();

25

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

map.clear()

14
これにより、質問が示唆するマーカーだけでなく、マップ上のすべてのオーバーレイがクリアされます。
Emzor

4

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

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)));
}

3

Kotlin言語を使用する場合は、次のコードを追加するだけです。

GoogleMapMarkerタイプのグローバル変数を作成します。

変数マーカーを使用して、変数マーカーの値を直接変更できるようにします

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)
    }

マーカーをクリックしたときに住所の場所を表示したい場合は、このコードを追加してマーカーの住所を表示または非表示にしますが、住所の場所を取得するためのメソッドが必要な場合はお勧めです。私はこの投稿からコードを取得しました:緯度と経度から完全な住所を取得する方法?

map.setOnMarkerClickListener {marker ->
        if (marker.isInfoWindowShown){
            marker.hideInfoWindow()
        }else{
            marker.showInfoWindow()
        }
        true
    }

2

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

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

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

「マーカー」をクリックすると、それを削除できます。


2

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

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

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

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


1

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

 marker.setVisible(false);

必要なときにいつでも表示できるようにします。
2.しかし、あなたがマップからすべてのマーカーを削除する場合は使用 map.clear();
:ノート map.clear();も削除されますPolylines, Circlesなど
3.あなたが削除したくない場合はPolylines, Circles、それらを削除するには(あなたが複数のマーカーを持っている場合)マーカーの長さに使用よりも、ループをなどをここでは例をチェック OR彼らに目に見える偽を設定し、使用していない map.clear();ような場合に。


1

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

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

アドインマップ上のすべてのマーカーを含む配列を作成します。

後で使用:

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

0

このGoogleMaps-MapWithMarkerプロジェクトの例に従っている人は、そうすることでマーカーを削除できます

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))
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.