গুগলম্যাপ থেকে একটি চিহ্নিতকারী সরান


124

অ্যান্ড্রয়েডের জন্য নতুন গুগল ম্যাপস এপিআই-তে, আমরা একটি চিহ্নিতকারী যুক্ত করতে পারি , তবে এটিকে অপসারণের (সহজে) উপায় নেই।

আমার সমাধানটি হ'ল চিহ্নিতকারীগুলিকে একটি মানচিত্রে রাখা এবং যখন আমি কোনও চিহ্নিতকারী অপসারণ করতে চাই তখন মানচিত্রটি আবার আঁকাই, তবে এটি খুব কার্যকর নয়।

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

কারও কি আরও ভাল ধারণা আছে?


আপনি চিহ্নিতকারীদের যুক্ত করতে একটি রাননেবল () ব্যবহার করেন কেন?
ব্যবহারকারী 3927312

এটি ইউআই থ্রেডে করতে
জোনাস

সমস্ত মার্কার সাফ করতে mMap.clear () ব্যবহার করুন
বাহা সালাহাল্ডিন

উত্তর:


259

পদ্ধতিটির স্বাক্ষরটি addMarkerহ'ল:

public final Marker addMarker (MarkerOptions options)

সুতরাং আপনি যখন মার্কারটির জন্য GoogleMapবিকল্পগুলি নির্দিষ্ট করে কোনও মার্কার যুক্ত করবেন তখন আপনার Markerফিরে আসা অবজেক্টটি সংরক্ষণ করা উচিত ( MarkerOptionsআপনি যে বস্তুটি এটি তৈরি করার জন্য ব্যবহার করেছিলেন তার পরিবর্তে )। এই অবজেক্টটি আপনাকে পরে চিহ্নিতকারী স্থিতি পরিবর্তন করতে দেয়। আপনি যখন মার্কারটি শেষ করেছেন, আপনি Marker.remove()মানচিত্র থেকে এটি সরাতে কল করতে পারেন।

অন্যদিকে, যদি আপনি কেবল এটি অস্থায়ীভাবে আড়াল করতে চান, আপনি কল করে মার্কারের দৃশ্যমানতা টগল করতে পারেন Marker.setVisible(boolean)


1
এটি আমার জন্য কাজ করছে না। মার্কার.সেটভিজিবল (ভুয়া), মার্কার.রেমোভ () এমনকি মার্কার ম্যানেজ.আরেমোভ (মার্কার) মানচিত্রকে প্রভাবিত করছে না। চিহ্নিতকারী এখনও রয়ে গেছে। কোন ইঙ্গিত?
টোটলিজ

1
কোনও চিহ্নিতকারীকে ধরে রাখার বিষয়ে আমার মন্তব্যটি নীচে দেখুন, যদিও এটির মানচিত্রগুলি মুছে ফেলার পরে এটি যদি খুব কম ব্যবহার করে তবে আপনি যদি এর মানগুলি পরীক্ষা করার সিদ্ধান্ত নেন .. অপসারণ পদ্ধতিটি ট্যাগ মানটি বাতিল করে দেয় ...
স্পেকপ্প

চতুর! ধন্যবাদ!
তাসলিম ওসেনি

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

এটি আপনি যদি মার্কারকে ক্লিক করেন যখন আপনি ঠিকানাটির অবস্থানটি প্রদর্শন করতে চান তবে এটি বোনাস হ'ল মার্কার ঠিকানাটি লুকানোর জন্য এবং এই চিহ্নটি দেখানোর জন্য আপনার ঠিকানাটির অবস্থান পাওয়ার জন্য একটি পদ্ধতি প্রয়োজন need আমি এই পোস্ট থেকে কোড পেয়েছি: অক্ষাংশ এবং দ্রাঘিমাংশ থেকে কীভাবে সম্পূর্ণ ঠিকানা পাবেন?

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

কেবল একটি নোট, এমন কিছু যা আমি আজ রাতে ট্র্যাকিংয়ের সময় নষ্ট করেছি ...

যদি আপনি কোনও কারণে কোনও চিহ্নিতকারীকে ধরে রাখার সিদ্ধান্ত নেন, আপনি কোনও মানচিত্র থেকে তা সরিয়ে নেওয়ার পরে ... গেটট্যাগ নুল ফিরে আসবে, যদিও বাকী প্রাপ্ত মানগুলি চিহ্নিতকারীর তৈরি হওয়ার সময় আপনি যে মানগুলিতে সেট করেছিলেন তার সাথে ফিরে আসবে .. ।

আপনি যদি কোনও চিহ্নকে সরিয়ে ফেলেন এবং তারপরে এটি উল্লেখ করার চেষ্টা করেন তবে TAG মানটি নুলকে সেট করা হয়।

আমার কাছে বাগের মতো মনে হচ্ছে ...


1

১. আপনি যদি কোনও চিহ্নিতকারীকে সরাতে চান তবে আপনি marker.remove(); বিকল্প হিসাবে এটি করতে পারেন আপনি চিহ্নিতকারীটিকে অপসারণের পরিবর্তে এটি লুকিয়ে রাখতে পারেন

 marker.setVisible(false);

এবং যখনই প্রয়োজন হবে এটি পরে দৃশ্যমান করুন।
২. তবে আপনি যদি মানচিত্র থেকে সমস্ত চিহ্নিতকারী সরাতে চান তবে নোটটি ব্যবহার map.clear();
করুন: ইত্যাদিও map.clear();সরিয়ে ফেলুন 3.. আপনি যদি অপসারণ করতে না চান তবে চিহ্নিতকরণের দৈর্ঘ্যের লুপ (যদি আপনার একাধিক চিহ্নিতকারী থাকে) অপসারণ করতে চান তবে এখানে উদাহরণটি দেখুন বা তাদের দৃশ্যমান মিথ্যা সেট করুন এবং এই জাতীয় ক্ষেত্রে ব্যবহার করবেন না ।Polylines, Circles
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

যারা এই গুগল্যাপস - ম্যাপউইথমার্কার প্রকল্পে উদাহরণ অনুসরণ করছে তাদের জন্য , আপনি এটি করে মার্কারটিকে সরাতে পারেন

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.