গুগল ম্যাপস এপিআই ভি 3: কীভাবে সমস্ত চিহ্নিতকারী সরিয়ে ফেলবেন?


429

গুগল ম্যাপস এপিআই ভি 2-তে, আমি যদি সমস্ত মানচিত্র চিহ্নিতকারীকে সরাতে চাইতাম তবে আমি কেবল এটি করতে পারি:

map.clearOverlays();

গুগল ম্যাপস এপিআই v3 এ আমি কীভাবে করব ?

রেফারেন্স এপিআইয়ের দিকে তাকানো , এটি আমার কাছে অস্পষ্ট।


3
আমি নীচের লিঙ্কটিতে কিছু কোড পেয়েছি, তবে পবিত্র গরু - এটি হ'ল এপিআইয়ের ভি 2-তে আগের 1 লাইন কোডটি অনুকরণ করার জন্য প্রচুর কোড। লোগোগো.com
googlemapsapi3/

2
মনে রাখবেন যে মোবাইল ডিভাইসগুলি যতটা সম্ভব অল্প
ব্যবধানে

1
এখানে প্রস্তাবিত সমাধানগুলি ২০১০/০ ./২০১৯ খণ্ডিত হিসাবে ভেঙে গেছে বলে মনে হচ্ছে। আমি আশা করি পরিবর্তে প্রস্তাবিত করার জন্য আমার একটি কার্যকারী সংস্করণ ছিল।
জোনাথন হ্যানসন

9
সর্বোচ্চ রেট দেওয়া উত্তরটি ভুল। এটি কীভাবে করবেন তা দেখতে এই উদাহরণের উত্স দেখুন: google-developers.appspot.com/maps/docamentation/javascript/…
সেব অ্যাশটন

অনুগ্রহ করে এই পৃষ্ঠাটি দেখুন gmaps-utility-library.googlecode.com/svn/trunk/markermanager/…
জুনাইদ কাদির

উত্তর:


487

কেবল নিম্নলিখিতটি করুন:

I. একটি বৈশ্বিক চলক ঘোষণা করুন:

var markersArray = [];

২। একটি ফাংশন সংজ্ঞায়িত করুন:

function clearOverlays() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

অথবা

google.maps.Map.prototype.clearOverlays = function() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

তৃতীয়। নিম্নলিখিতগুলিকে কল করার আগে 'মার্কারআরে'-তে চিহ্নিতকারীদের পুশ করুন:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

চতুর্থ। যেখানে প্রয়োজন সেখানে ফোন করুন clearOverlays();বা map.clearOverlays();ফাংশন করুন ।

এটাই!!


32
একটি অ্যারের সাথে লুপ? এই নিশ্চয়ই ভাল হতে পারে ..? ..সি: স্ট্যাকওভারফ্লো.
জ্যাক 21

4
অন্যথায় আপনি marker.setVisible (মিথ্যা) ব্যবহার চিহ্নিতকারী লুকিয়ে রাখতে পারেন
NBK

12
চিহ্নিতকারীগুলি এখনও অ্যারেতে রাখা হয়েছে যদিও এটি আরও বড় এবং বড় হবে। লুপের পরে অ্যারে সাফ করার পরামর্শ
অমি

5
আপনি সর্বদা markersArrayএটির দৈর্ঘ্য নির্ধারণের পরিবর্তে একটি খালি অ্যারেতে সেট করতে পারেন যা আমি একরকম markersArray = [];
বিশ্রী পাই

11
আমি ব্যবহার করতে চাই whileঅ্যারে প্রক্রিয়াকরণের জন্য দৃষ্টীকোণ: while(markersArray.length) { markersArray.pop().setMap(null); }। এর পরে অ্যারে সাফ করার দরকার নেই।
ইং ইয়ং

84

একই সমস্যা. এই কোডটি আর কাজ করে না।

আমি এটিকে সংশোধন করেছি, ক্লিয়ারমার্কস পদ্ধতিটি এইভাবে পরিবর্তন করুন:

সেট_ম্যাপ (নাল) ---> সেটম্যাপ (নাল)

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i < this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

বিষয়টিতে বিশদ অন্তর্ভুক্ত করতে ডকুমেন্টেশন আপডেট করা হয়েছে: https://developers.google.com/maps/docamentation/javascript/markers#remove


1
অবশেষে আমি যেভাবে এটি কাজ করেছিলাম তা হ'ল আমি যেগুলি সংরক্ষণ করেছি সেখানে চিহ্নিতকারী সংগ্রহের মাধ্যমে পুনরাবৃত্তি করা এবং সেটম্যাপ (নাল) ব্যবহার করা
সেবাস্তিয়ান

4
কিন্তু এটি কি স্মৃতি থেকে চিহ্নিতকারীদের সাফ করে? আমি বুঝতে পারলাম জাভাস্ক্রিপ্টটিতে স্বয়ংক্রিয় আবর্জনা সংগ্রহ রয়েছে, তবে আমরা কীভাবে জানি যে গুগলের API গুলি সেটআপের (নাল) বলা হলে চিহ্নিতকারীটির কোনও রেফারেন্স রাখে না? আমার অ্যাপ্লিকেশনটিতে, আমি একটি টন চিহ্নিতকারী যুক্ত এবং "মুছে ফেলুন", এবং মেমরি চুষতে না পারার জন্য আমি এই সমস্ত "মোছা" চিহ্নিতকারীদের ঘৃণা করব।
নিক

@ নিক: যুক্ত করুন 'এটি মুছে দিন। [I];' সেটম্যাপ (নাল) বিট পরে।
ডেভস

4
এই প্রশ্নের উত্তর এখন ডকুমেন্টেশনে দেওয়া আছে। কোড.google.com/apis/maps/docamentation/javascript/…
lashleigh

1
এমনকি কে ব্যবহার করে new Array();?
রিহার্ডস

47

দেখে মনে হচ্ছে এখনও ভি 3 তে এরকম কোনও কার্যকারিতা নেই।

লোকেরা মানচিত্রে আপনার থাকা সমস্ত চিহ্নিতকারীকে একটি অ্যারেতে রেফারেন্স রাখার পরামর্শ দেয়। এবং তারপরে আপনি যখন সমস্ত Em মুছতে চান, কেবল অ্যারে লুপ করুন এবং প্রতিটি রেফারেন্সে .setMap (নাল) পদ্ধতিতে কল করুন।

আরও তথ্য / কোডের জন্য এই প্রশ্নটি দেখুন।

আমার সংস্করণ:

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;

google.maps.Marker.prototype.setMap = function(map) {
    if (map) {
        map.markers[map.markers.length] = this;
    }
    this._setMap(map);
}

কোডটি এই কোডটির সম্পাদিত সংস্করণ http://www.lootogo.com/googlemapsapi3/markerPlugin.html আমি নিজেই অ্যাডমার্কার কল করার প্রয়োজনটিকে সরিয়েছি।

পেশাদাররা

  • এইভাবে আপনি কোডটি কমপ্যাক্ট এবং এক জায়গায় রেখেছেন (নামস্থানটি দূষিত করে না)।
  • আপনাকে আর নিজেই চিহ্নিতকারীদের ট্র্যাক রাখতে হবে না আপনি সবসময় মানচিত্রে ম্যাপে সমস্ত চিহ্নিতকারীকে খুঁজে পেতে পারেন getgetMarkers ()

কনস

  • প্রোটোটাইপ এবং মোড়কের মতো ব্যবহারের মাধ্যমে এখন আমার কোডটি গুগল কোডের উপর নির্ভরশীল করে তোলে, যদি তারা তাদের উত্সটিতে কোনও মেয়র পরিবর্তন করে তবে এটি ভেঙে যাবে।
  • যদি আপনি এটি না বুঝতে পারেন তবে ব্রেক হলে তা ঠিক করতে পারবেন না। সম্ভাবনা কম যে তারা কিছু পরিবর্তন করতে চলেছে যা এটি ভেঙে দেবে, তবে এখনও ..
  • আপনি যদি একটি চিহ্নিতকারীকে ম্যানুয়ালি মুছে ফেলেন তবে এর উল্লেখটি এখনও চিহ্নিতকারী অ্যারেতে থাকবে। (এটির সমাধানের জন্য আপনি আমার সেটম্যাপ পদ্ধতিটি সম্পাদনা করতে পারেন, তবে ট্রুপের চিহ্নিতকরণের অ্যারে লুপিং করে রেফারেন্সটি সরিয়ে ফেলতে পারেন)

1
আমার কাছ থেকে তবে আপনার উত্তরটি ভাল হবে যদি আপনি স্বয়ংক্রিয়ভাবে অ্যাডমার্কারে কল করার জন্য মোড়কটি অন্তর্ভুক্ত করেন!
অ্যান্ড্রু 17

আমি ধরে নিচ্ছি আপনি আসলে অ্যান্ড্রুজ উত্তরটি উল্লেখ করছেন। আপনি কি আলাদা এবং কেন করতে চান তা কোড দিয়ে দেখাবেন। ধন্যবাদ
এমপি_

দেরি হয়ে যাওয়ার জন্য দুঃখিত, আমি কোডিং পোস্ট করা থেকে বিরত ছিলাম কারণ তাড়াতাড়ি পরীক্ষা করার আমার কোনও উপায় ছিল না।
মাইকু মোরি

ধন্যবাদ মাইকু। যদিও, আমি বুঝতে পারি না - আমি কীভাবে আপনার উদাহরণে একটি নতুন মার্কার যুক্ত করব। আবারও অনেক অনেক ধন্যবাদ!
এমপি_

1
আমি সেটম্যাপ (নাল) ব্যবহার করার চেষ্টা করেছি, তবে আমার একটি স্বয়ং-আপডেটিং স্ক্রিপ্ট ছিল এবং যতবার আমি আমার 50 বা তার বেশি চিহ্নিতকারীগুলিকে একটি নাল মানচিত্রে সেট করেছিলাম, তখনও আমার কাছে কোথাও কোথাও কোথাও কোথাও ডমটিতে ভাসমান মানচিত্রহীন মার্কার ছিল। এটি পৃষ্ঠাটি ক্র্যাশ করে চলেছে কারণ প্রতি 30 সেকেন্ডে এটি ডিওমে 50 টি নতুন চিহ্নিতকারী যুক্ত করেছে এবং এটি অবিরাম প্রচারিত হয়েছে কারণ ভিডিওটি কোনও প্রাচীরের পৃষ্ঠাতে 24/7 খোলা থাকার কারণে। আমাকে শীর্ষের উত্তরটি ব্যবহার করতে হবে এবং নতুন তৈরির আগে পুরোপুরি ডিওএম থেকে সমস্ত মানচিত্রের ওভারলেগুলি সাফ করতে হয়েছিল। আশা করি এটি কাউকে সহায়তা করবে; আমার পৃষ্ঠাটি ক্র্যাশ হচ্ছে কেন তা বুঝতে আমার বেশ দীর্ঘ সময় লেগেছে! :(
ইন্টারফেসগুই

23

ব্যবহারকারীদের মূল প্রশ্নের মূল প্রতিক্রিয়ার অধীনে ইয়াংইয়াং মার্চ 11 '14 পোস্ট করেছেন 15: 049-এ মূলত পোস্ট করা সমস্ত সমাধানগুলির মধ্যে এটি সবচেয়ে সহজ ছিল

আমি তার একই সমাধানটি 2.5 বছর পরে গুগল ম্যাপ v3.18 এর সাথে ব্যবহার করছি এবং এটি একটি কবজির মতো কাজ করে

markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }

// No need to clear the array after that.

21
google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.addMarker = function(marker) {
    this.markers[this.markers.length] = marker;
};

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

আমি মনে করি না ভি 3-তে একটি রয়েছে তাই আমি উপরের কাস্টম প্রয়োগটি ব্যবহার করেছি।

দাবি অস্বীকার: আমি এই কোডটি লিখিনি তবে আমি যখন আমার কোডবেসে এটি একীভূত করেছি তখন কোনও রেফারেন্স ধরে রাখতে ভুলে গিয়েছিলাম যাতে আমি জানি না যে এটি কোথা থেকে এসেছে।


আমার কাছ থেকে আমি গুগল.ম্যাপস.মার্কার কনস্ট্রাক্টর (বা সেটম্যাপ পদ্ধতি যেহেতু আমার মনে হয় নির্মাতারা এটি অভ্যন্তরীণভাবে কল করে) এর চারপাশে একটি মোড়ক যুক্ত করব যা অ্যাডমার্কারকে স্বয়ংক্রিয়ভাবে কল করে, তবে এখনও সুন্দর উত্তর :) :)
মাইকু মরি

@ মাইকু মারি, আপনি কী আলাদা করবেন এবং কেন করবেন তা আপনি কি কোড দিয়ে দেখিয়ে দেবেন? ধন্যবাদ
এমপি_

এটি কীভাবে সমাধান নয়? আপনি যে নির্দিষ্ট চিহ্নিতকারীকে সাফ করতে চান তাতে সেট_ম্যাপ (নাল) ব্যবহার করে আপনি চিহ্নিতকারীদের সরিয়ে ফেলুন, আপনি যদি সমস্তটি সাফ করতে চান তবে এই ফাংশনটি ব্যবহার করে লুপটি সরিয়ে ফেলুন। আপনি যদি আরও কিছু চান তবে এখানে এটির জন্য অনুরোধ করুন: Code.google.com/p/gmaps-api-issues/issues/…
পেট্রোগড

আমি বিশ্বাস করি এটি এখান থেকে এসেছে লোটোগো.com
মরি

6
-1 খারাপ শৈলী। কেবলমাত্র একটি চিহ্নিতকারী অ্যারে তৈরি করা হয়েছে, তবে ক্লিয়ারমার্কারের পরে মানচিত্রে একটি করে (প্রোটোটাইপের সাথে পার্থক্য / সেট পার্থক্যের কারণ)। একাধিক মানচিত্রের বস্তু সহ কদর্য বাগ gs
টমাস

18

নতুন সংস্করণ ভি 3-তে, তারা অ্যারে রাখার পরামর্শ দিয়েছিল। নিম্নলিখিত হিসাবে.

ওভারলে-ওভারভিউতে নমুনা দেখুন ।

var map;
var markersArray = [];

function initialize() {
  var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
  var mapOptions = {
    zoom: 12,
    center: haightAshbury,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };
  map =  new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

  google.maps.event.addListener(map, 'click', function(event) {
    addMarker(event.latLng);
  });
}

function addMarker(location) {
  marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markersArray.push(marker);
}

// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

// Shows any overlays currently in the array
function showOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(map);
    }
  }
}

// Deletes all markers in the array by removing references to them
function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

6

গুগলের ডেমো গ্যালারীটিতে তারা কীভাবে এটি করে তার একটি ডেমো রয়েছে:

http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html

তারা কীভাবে চিহ্নিতকারী যুক্ত করে তা দেখতে আপনি উত্স কোডটি দেখতে পারেন।

দীর্ঘ গল্প সংক্ষিপ্ত, তারা চিহ্নিতকারীদের একটি বিশ্বব্যাপী অ্যারে রাখে। এগুলি সাফ / মুছলে, তারা অ্যারের মধ্য দিয়ে লুপ করে এবং প্রদত্ত চিহ্নিতকারী অবজেক্টে ".setMap (নাল)" কল করে।

যাইহোক, এই উদাহরণটি একটি 'কৌশল' দেখায়। এই উদাহরণের জন্য "সাফ করুন" এর অর্থ তাদের মানচিত্র থেকে সরানো কিন্তু অ্যারেতে রাখা, যা অ্যাপ্লিকেশনটিকে তাদের দ্রুত মানচিত্রে পুনরায় যুক্ত করতে দেয়। এক অর্থে, এটি তাদের "লুকানোর" মতো কাজ করে।

"মুছুন" পাশাপাশি অ্যারেও সাফ করে।



6

সমাধানটি বেশ সহজ। আপনি পদ্ধতিটি ব্যবহার করতে পারেন:marker.setMap(map);। এখানে, আপনি নির্দিষ্ট করুন যে কোন মানচিত্রে পিনটি উপস্থিত হবে।

সুতরাং, আপনি nullযদি এই পদ্ধতিতে ( marker.setMap(null);) সেট করেন তবে পিনটি অদৃশ্য হয়ে যাবে।


আপনার মানচিত্রে সমস্ত চিহ্নিতকারীকে অদৃশ্য করার সময় আপনি এখন একটি ফাংশন ডাইনি লিখতে পারেন।

আপনি কেবল আপনার পিনগুলিকে একটি অ্যারেতে যুক্ত করুন এবং এগুলি markers.push (your_new pin)বা এই কোডটি দিয়ে উদাহরণ হিসাবে ঘোষণা করুন :

// Adds a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

এটি একটি ফাংশন জাদুকরী মানচিত্রে আপনার অ্যারের সমস্ত চিহ্নিতকারীকে সেট বা অদৃশ্য করতে পারে:

// Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

আপনার সমস্ত চিহ্নিতকারীকে অদৃশ্য করার জন্য আপনার সাথে ফাংশনটি কল করা উচিত null:

// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

এবং, আপনার সমস্ত চিহ্নিতকারীদের অপসারণ এবং অদৃশ্য হয়ে যাওয়ার জন্য আপনাকে নিজের মার্কারগুলির অ্যারেটি পুনরায় সেট করতে হবে:

// Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

এটি আমার সম্পূর্ণ কোড। এটি হ্রাস করতে পারে সবচেয়ে সহজ। সাবধান থাকুন আপনি YOUR_API_KEYকোডটি আপনার কী গুগল এপিআই দ্বারা প্রতিস্থাপন করতে পারেন :

<!DOCTYPE html>
<html>
  <head>
  <title>Remove Markers</title>
  <style>
     /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
     #map {
       height: 100%;
       }
  </style>
</head>
<body>

<div id="map"></div>
<p>Click on the map to add markers.</p>
<script>

  // In the following example, markers appear when the user clicks on the map.
  // The markers are stored in an array.
  // The user can then click an option to hide, show or delete the markers.
  var map;
  var markers = [];

  function initMap() {
    var haightAshbury = {lat: 37.769, lng: -122.446};

    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: haightAshbury,
      mapTypeId: 'terrain'
    });

    // This event listener will call addMarker() when the map is clicked.
    map.addListener('click', function(event) {
      addMarker(event.latLng);
    });

    // Adds a marker at the center of the map.
    addMarker(haightAshbury);
  }

   // Adds a marker to the map and push to the array.
  function addMarker(location) {
    var marker = new google.maps.Marker({
      position: location,
      map: map
    });
    markers.push(marker);
  }

  // Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

  // Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

  // Shows any markers currently in the array.
  function showMarkers() {
    setMapOnAll(map);
  }

  // Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

</script>
   <script async defer
    src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap">
   </script>
</body>
</html>

আপনি গুগল বিকাশকারী বা গুগল বিকাশকারী ওয়েব সাইটে সম্পূর্ণ ডকুমেন্টেশনের সাথে পরামর্শ করতে পারেন ।


5

রোলিংয়ের উত্তরের একটি পরিষ্কার এবং সহজ প্রয়োগ।

function placeMarkerAndPanTo(latLng, map) {
      while(markersArray.length) { markersArray.pop().setMap(null); }
      var marker = new google.maps.Marker({
        position: latLng,
        map: map
      });
      map.panTo(latLng);

      markersArray.push(marker) ;
    }

4

set_mapউভয় উত্তরে পোস্ট করা " " ফাংশনটি Google মানচিত্র v3 এপিআইতে আর কাজ করবে না বলে মনে হয়।

আমি ভাবলাম কি হয়েছে

হালনাগাদ:

গুগল তাদের এপিআই এমন পরিবর্তন করেছে যে " set_map" নয় " setMap"।

http://code.google.com/apis/maps/documentation/v3/reference.html


4

এখানে আপনি কীভাবে চিহ্নিতকারীদের অপসারণ করবেন তার একটি উদাহরণ পেতে পারেন:

https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es

// Add a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

// Sets the map on all markers in the array.
function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
   }
}

// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
  setAllMap(null);
}

// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
  clearMarkers();
  markers = [];
}

3

অনন থেকে নিম্নলিখিতগুলি নিখুঁতভাবে কাজ করে, যদিও বারবার ওভারলেগুলি সাফ করার সময় ফ্লিকারদের সাথে।

কেবল নিম্নলিখিতটি করুন:

I. একটি বৈশ্বিক চলক ঘোষণা করুন:

var markersArray = [];

২। একটি ফাংশন সংজ্ঞায়িত করুন:

function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

তৃতীয়। নিম্নলিখিতগুলিকে কল করার আগে 'মার্কারআরে'-তে চিহ্নিতকারীদের পুশ করুন:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

চতুর্থ। clearOverlays()যেখানে প্রয়োজন সেখানে ফাংশনটি কল করুন ।

এটাই!!

আশা করি এটি আপনাকে সহায়তা করবে।


1
for(in in markersArray){}সম্ভবত আপনি এটি করার প্রত্যাশা করেন না। যদি Arrayকোডের অন্য কোথাও প্রসারিত হয় তবে এটি কেবলমাত্র সূচিগুলিতে নয়, তবে সেই বৈশিষ্ট্যগুলির উপরেও পুনরাবৃত্তি করবে। এর জাভাস্ক্রিপ্ট সংস্করণ markersArray.forEach()যা সর্বত্র সমর্থিত নয়। আপনি আরও ভাল হতে চাইfor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
কিট সুন্দে

3

আমি গুগল-ম্যাপস-ইউটিলিটি-লাইব্রেরি-ভি 3 প্রকল্পে মার্কম্যানার গ্রন্থাগারটি সবচেয়ে সহজ উপায় হিসাবে পেয়েছি।

1. মার্কার ম্যানেজার সেট আপ করুন

mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function () {
    loadMarkers();
});

২. মার্কার ম্যানেজারে মার্কার যুক্ত করুন

function loadMarkers() {
  var marker = new google.maps.Marker({
            title: title,
            position: latlng,
            icon: icon
   });
   mgr.addMarker(marker);
   mgr.refresh();
 }

৩. চিহ্নিতকারীদের সাফ করার জন্য আপনাকে কেবল মার্কার ম্যানেজারের clearMarkers()ফাংশনটি কল করতে হবে

mgr.clearMarkers();

মার্কারগুলি সাফ করার জন্য লাইব্রেরিটি টানতে অনেক বেশি ওভারকিলের মতো মনে হয়। সমস্ত clearMarkersকিছু হ'ল চিহ্নিতকারীদের কল করার জন্য পুনরাবৃত্তি হয় marker.setMap(null)(আমি উত্সটি দেখেছি)। এগুলিকে একটি অ্যারে রাখার এবং এটি নিজেই করা কম কাজ হবে।
কিট সুন্দে

3

আপনি এটি এভাবেও করতে পারেন:

function clearMarkers(category){ 
  var i;       

  for (i = 0; i < markers.length; i++) {                          
    markers[i].setVisible(false);        
  }    
}

2

আমি সবেমাত্র কিমিএলএল.সেটম্যাপ (নাল) দিয়ে এটি চেষ্টা করেছি এবং এটি কাজ করেছে। নিশ্চিত না যে এটি নিয়মিত চিহ্নিতকারীদের সাথে কাজ করে তবে সঠিকভাবে কাজ করে বলে মনে হচ্ছে।


2

পলি, মার্কার, ইত্যাদি সহ সমস্ত ওভারলে সাফ করার জন্য ...

সহজভাবে ব্যবহার করুন:

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);}

এখানে একটি ফাংশন যা আমি লিখেছিলাম তা এটি একটি মানচিত্র অ্যাপ্লিকেশনটিতে আমাকে গঠন করে:

  function clear_Map() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    //var chicago = new google.maps.LatLng(41.850033, -87.6500523);
    var myOptions = {
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: HamptonRoads
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("directionsPanel"));
}

এটি কি মানচিত্রটি পুনরায় সেট করবে না? মনে করুন ব্যবহারকারী যদি মানচিত্রটিকে কোনও নতুন জায়গায় টেনে আনত?
কিচু

2

মানচিত্র থেকে সমস্ত চিহ্নিতকারীকে সরাতে ফাংশনগুলি এমন কিছু তৈরি করুন:

1.এডিডিমার্কার (অবস্থান): এই ফাংশনটি মানচিত্রে চিহ্নিতকারী যুক্ত করতে ব্যবহৃত হয়েছিল

২.ClearMarkers (): এই ফাংশনটি অ্যারে থেকে নয়, সমস্ত চিহ্নকে মানচিত্র থেকে সরান

3.setMapOnAll (মানচিত্র): অ্যারেতে চিহ্নিতকারীদের তথ্য যুক্ত করতে এই ফাংশনটি ব্যবহৃত হয়

৪.ডিলেটমার্কার্স (): এই ফাংশনটি অ্যারের মধ্যে সমস্ত চিহ্নিতকারীদের উল্লেখগুলি মুছে ফেলা করে।

// Adds a marker to the map and push to the array.
      function addMarker(location) {
        var marker = new google.maps.Marker({
          position: location,
          map: map
        });
        markers.push(marker);
      }


// Sets the map on all markers in the array.
      function setMapOnAll(map) {
        for (var i = 0; i < markers.length; i++) {
          markers[i].setMap(map);
        }
      }



// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

// Deletes all markers in the array by removing references to them.
      function deleteMarkers() {
        clearMarkers();
        markers = [];
      }

2

এটি করার সর্বোত্তম উপায় হ'ল মানচিত্রের সমস্ত বৈশিষ্ট্য পুনরাবৃত্তি করা। চিহ্নিতকারীরা (বহুভুজ, পলিইনস, ইত্যাদি সহ) মানচিত্রের ডেটা স্তরে সংরক্ষণ করা হয় ।

function removeAllMarkers() {
  map.data.forEach((feature) => {
    feature.getGeometry().getType() === 'Point' ? map.data.remove(feature) : null
  });
}

ড্রয়িং ম্যানেজারের মাধ্যমে চিহ্নিতকারীদের যুক্ত করা হচ্ছে এমন ক্ষেত্রে, চিহ্নিতকারীদের একটি বিশ্বব্যাপী অ্যারে তৈরি করা বা মার্কারগুলিকে তৈরির সময় ডেটা লেয়ারের দিকে ঠেলে দেওয়া ভাল:

google.maps.event.addListener(drawingManager, 'overlaycomplete', (e) => {
    var newShape = e.overlay;
    newShape.type = e.type;

    if (newShape.type === 'marker') {
      var pos = newShape.getPosition()
      map.data.add({ geometry: new google.maps.Data.Point(pos) });

      // remove from drawing layer
      newShape.setMap(null);
    }
  });

আমি দ্বিতীয় পদ্ধতির প্রস্তাব দিচ্ছি কারণ এটি আপনাকে পরে অন্যান্য google.maps.data শ্রেণীর পদ্ধতিগুলি ব্যবহার করতে দেয়।


1

গুগল নিজেরাই কমপক্ষে একটি নমুনায় ব্যবহার করে এমন পদ্ধতি:

var markers = [];

// Clear out the old markers.
markers.forEach(function(marker) {
  marker.setMap(null);
});
markers = [];

সম্পূর্ণ কোড উদাহরণের জন্য গুগল নমুনা পরীক্ষা করুন:

https://developers.google.com/maps/documentation/javascript/examples/places-searchbox


0

আমি জানি না কেন, তবে setMap(null)আমি যখন ব্যবহার করছি তখন আমার চিহ্নিতকারীগুলিতে সেট করা আমার পক্ষে কাজ করে না DirectionsRenderer

আমার ক্ষেত্রে আমাকেও আমার কাছে ফোন setMap(null)করতে হয়েছিল DirectionsRenderer

এরকম কিছু:

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();

if (map.directionsDisplay) {
    map.directionsDisplay.setMap(null);
}

map.directionsDisplay = directionsDisplay;

var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
};

directionsDisplay.setMap(map);
directionsService.route(request, function (result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(result);
    }
});

0

কেবল চিহ্নিতকারীদের উপর দিয়ে হাঁটুন এবং তাদের মানচিত্র থেকে সরান, খালি মানচিত্র চিহ্নিতকারীগুলির পরে অ্যারে:

var markers = map.markers;
for(var i = 0; i < markers.length; i++) {
    markers[i].setMap(null);
}
map.markers = [];


0

আমি প্রস্তাবিত সমস্ত সমাধানের চেষ্টা করেছি, তবে আমার সমস্ত মার্কার একটি ক্লাস্টারের নিচে থাকাকালীন কিছুই আমার পক্ষে কার্যকর হয়নি। অবশেষে আমি কেবল এটি রেখেছি:

var markerCluster = new MarkerClusterer(map, markers,
    { imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
agentsGpsData[agentGpsData.ID].CLUSTER = markerCluster;

//this did the trick
agentsGpsData[agentId].CLUSTER.clearMarkers();

অন্য কথায়, আপনি যদি একটি ক্লাস্টারে মার্কারগুলি মুড়িয়ে রাখেন এবং সমস্ত চিহ্নিতকারী সরাতে চান, আপনি কল করুন:

clearMarkers();

-1

আপনি কি তাদের লুকিয়ে রাখার মতো মুছে ফেলতে চান?

লুকিয়ে থাকলে:

function clearMarkers() {
            setAllMap(null);
        }

আপনি যদি এগুলি মুছতে চান:

 function deleteMarkers() {
            clearMarkers();
            markers = [];
        }

লক্ষ্য করুন যে আমি তাদের অ্যারে রাখতে এবং এটিকে ম্যানুয়ালি পুনরায় সেট করতে একটি অ্যারে চিহ্নিতকারী ব্যবহার করি।


-1

আপনাকে সেই চিহ্নিতকারীটির কাছে মানচিত্র নাল সেট করতে হবে।

var markersList = [];    

function removeMarkers(markersList) {
   for(var i = 0; i < markersList.length; i++) {
      markersList[i].setMap(null);
   }
}

function addMarkers() {
   var marker = new google.maps.Marker({
        position : {
            lat : 12.374,
            lng : -11.55
        },
        map : map
       });
      markersList.push(marker);
   }

-1

আমি সহজ সমাধান পেয়েছি (আমি মনে করি):

var marker = new google.maps.Marker();

function Clear(){
     marker.setMap(null);
}



-3

আমি জানি এটি সম্ভবত একটি সিম্পল সমাধান, তবে আমি এটিই করি

$("#map_canvas").html("");
markers = [];

আমার জন্য প্রত্যেক সময় কাজ করে।


2
$ ( "# map_canvas") এইচটিএমএল ( "")। প্রকৃতপক্ষে পুরো মানচিত্রটি দ্বি পরিষ্কার করে মুছে ফেলবে এবং jQuery এর উপর নির্ভর করবে তাই আপনার প্রতিক্রিয়া বোকা এবং অসহায় উভয়ই।
স্যাম

হা ঐটা ঠিক. মানচিত্র এবং চিহ্নিতকারীদের সূচনা করুন
ক্রোনাস

তবে তিনি বিদ্যমান মানকগুলিকে সরাতে চাইছেন সেই মানচিত্রটি পুনরায় পুনরায় করতে চান না ....
স্যাম

আমি বিদ্যমান মার্কার্সগুলি সরাতে কেবল যেভাবে সন্ধান পেয়েছি তা দিচ্ছি। কমপক্ষে এটির একটি শট দিন এবং বলুন এটি কার্যকর হয়েছে কিনা not এটি আমার পক্ষে কাজ করে
ক্রোনাস

2
মানচিত্রের চিহ্নিতকারীদের সরাতে ইচ্ছুক পুরো বিষয়টি হ'ল মানচিত্রটি পুনরায় পুনরায় প্রবর্তন করা উচিত নয়, আমার মতো পরিস্থিতির অর্থ হ'ল যে আমি যদি ম্যাপে অঙ্কন করার জন্য গুগলস অঙ্কন গ্রন্থাগারটি ব্যবহার করছিলাম এবং যদি আমি আঁকানো সমস্ত ওভারলেগুলি পুরো মানচিত্রটিকে পুনরায় তৈরি করতে পারি তবে এটি থামানোর একমাত্র উপায়টি অদৃশ্য হয়ে যাওয়া হ'ল সমস্ত ওভারলেগুলি সঞ্চয় করা এবং এগুলি যুক্ত করা যা এটিও অনেক অপ্রয়োজনীয় কাজ। পুনরায় সূচনা মানচিত্রটি চিহ্নিতকারীদের এটি আবার স্ক্র্যাচ থেকে পুনরুদ্ধার করছে না এবং চিহ্নিতকারীদের অপসারণ করছে না।
স্যাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.