GoogleMap से एक मार्कर निकालें


124

एंड्रॉइड के लिए नए Google मैप्स एपीआई में, हम एक मार्कर जोड़ सकते हैं , लेकिन (आसानी से) को हटाने का कोई तरीका नहीं है।

मेरा समाधान मार्करों को एक नक्शे में रखना है और जब मैं एक मार्कर को निकालना चाहता हूं, तो नक्शे को फिर से तैयार करना है, लेकिन यह बहुत कुशल नहीं है।

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

क्या किसी के पास बेहतर विचार है?


मार्करों को जोड़ने के लिए आप एक रननेबल () का उपयोग क्यों करते हैं?
user3927312

इसे UI थ्रेड पर करने के लिए
जोनास

सभी मार्करों को साफ करने के लिए mMap.clear () का उपयोग करें
Bahaa Salaheldin

जवाबों:


260

इसके लिए विधि हस्ताक्षर addMarkerहै:

public final Marker addMarker (MarkerOptions options)

इसलिए जब आप मार्कर के लिए GoogleMapविकल्पों को निर्दिष्ट करके एक मार्कर जोड़ते हैं , तो आपको उस Markerऑब्जेक्ट को सहेजना चाहिए जिसे वापस लौटा दिया गया है (उस MarkerOptionsऑब्जेक्ट के बजाय जो आपने इसे बनाया था)। यह ऑब्जेक्ट आपको मार्कर स्थिति को बाद में बदलने की अनुमति देता है। जब आप मार्कर के साथ समाप्त हो जाते हैं, तो आप Marker.remove()इसे मानचित्र से हटाने के लिए कॉल कर सकते हैं ।

एक तरफ, यदि आप केवल इसे अस्थायी रूप से छिपाना चाहते हैं, तो आप कॉल करके मार्कर की दृश्यता को टॉगल कर सकते हैं Marker.setVisible(boolean)


1
यह मेरे लिए काम नहीं कर रहा है। मार्कर.सेटव्यू (झूठा), मार्कर.आर्मोवे (), यहां तक ​​कि मार्करमैनग्रेम (मार्कर) भी मानचित्र को प्रभावित नहीं कर रहा है। मार्कर अभी भी बने हुए हैं। कोई संकेत?
कुल

1
मार्कर पर रखने के बारे में मेरी टिप्पणी नीचे देखें, जबकि मानचित्र से हटाए जाने के बाद यह बहुत कम उपयोग करता है, यदि आपको इसके मानों की जांच करने का निर्णय लेना चाहिए .. निकालें विधि टैग मान को शून्य करने के लिए सेट करती है ...
Speckpgh

चतुर! धन्यवाद!
तस्लीम ओसेनी

32

मार्कर को इस तरह से मैप में जोड़ें

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

तब आप हटाने की विधि का उपयोग करने में सक्षम होंगे, यह केवल उस मार्कर को हटा देगा

markerName.remove();

25

मानचित्र उपयोग में सभी स्क्रिबल्स को साफ़ करने के लिए

map.clear()

14
यह मानचित्र पर सभी ओवरले को साफ करता है, न कि केवल एक मार्कर के रूप में प्रश्न का सुझाव देता है।
इमेजर

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

यदि आप कोटलिन भाषा का उपयोग करते हैं तो आप इस कोड को जोड़ते हैं:

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

यह बोनस है यदि आप पता स्थान प्रदर्शित करना चाहते हैं जब आप मार्कर पते को छिपाने के लिए इस कोड को जोड़ते हैं और मार्कर पते को दिखाते हैं लेकिन आपको पता स्थान प्राप्त करने के लिए एक विधि की आवश्यकता होती है। मुझे इस पोस्ट से कोड मिला: अक्षांश और देशांतर से पूरा पता कैसे प्राप्त करें?

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

बस एक नोट, कुछ है कि मैं आज रात नीचे ट्रैकिंग घंटे बर्बाद कर दिया ...

यदि आप किसी कारण से किसी मार्कर पर पकड़ बनाने का निर्णय लेते हैं, तो आपके द्वारा इसे एक नक्शे से हटाने के बाद ... गेटटैग NULL को वापस कर देगा, भले ही शेष प्राप्त मान उन मानों के साथ वापस आ जाएंगे, जब आप मार्कर बनाया गया था। ।

यदि आप कभी किसी मार्कर को हटाते हैं, और तब उसे संदर्भित करने का प्रयास करते हैं, तो TAG मान NULL पर सेट होता है।

मेरे लिए एक बग की तरह लगता है ...


1

1. यदि आप किसी मार्कर को हटाना चाहते हैं तो आप इसे marker.remove(); वैकल्पिक रूप से कर सकते हैं क्योंकि आप मार्कर को इसे हटाने के बजाय छिपा सकते हैं

 marker.setVisible(false);

और जब भी जरूरत हो बाद में इसे दिखाई दें।
2. हालाँकि यदि आप मानचित्र से सभी मार्करों को हटाना चाहते हैं तो उपयोग करें map.clear();
नोट: आदि map.clear();को भी हटा देगा Polylines, Circles
3. यदि आप Polylines, Circlesमार्कर को हटाने के लिए लूप का उपयोग करने के बजाय आदि को हटाना चाहते हैं (यदि आपके पास कई मार्कर हैं) यहाँ उदाहरण की जाँच करें या उन्हें दर्शनीय झूठी सेट और उपयोग नहीं करते हैं 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))
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.