গুগল ম্যাপস এপিআই ভি 2-তে, আমি যদি সমস্ত মানচিত্র চিহ্নিতকারীকে সরাতে চাইতাম তবে আমি কেবল এটি করতে পারি:
map.clearOverlays();
গুগল ম্যাপস এপিআই v3 এ আমি কীভাবে করব ?
রেফারেন্স এপিআইয়ের দিকে তাকানো , এটি আমার কাছে অস্পষ্ট।
গুগল ম্যাপস এপিআই ভি 2-তে, আমি যদি সমস্ত মানচিত্র চিহ্নিতকারীকে সরাতে চাইতাম তবে আমি কেবল এটি করতে পারি:
map.clearOverlays();
গুগল ম্যাপস এপিআই v3 এ আমি কীভাবে করব ?
রেফারেন্স এপিআইয়ের দিকে তাকানো , এটি আমার কাছে অস্পষ্ট।
উত্তর:
কেবল নিম্নলিখিতটি করুন:
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();
ফাংশন করুন ।
এটাই!!
markersArray
এটির দৈর্ঘ্য নির্ধারণের পরিবর্তে একটি খালি অ্যারেতে সেট করতে পারেন যা আমি একরকম markersArray = [];
while
অ্যারে প্রক্রিয়াকরণের জন্য দৃষ্টীকোণ: while(markersArray.length) { markersArray.pop().setMap(null); }
। এর পরে অ্যারে সাফ করার দরকার নেই।
একই সমস্যা. এই কোডটি আর কাজ করে না।
আমি এটিকে সংশোধন করেছি, ক্লিয়ারমার্কস পদ্ধতিটি এইভাবে পরিবর্তন করুন:
সেট_ম্যাপ (নাল) ---> সেটম্যাপ (নাল)
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
new Array();
?
দেখে মনে হচ্ছে এখনও ভি 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 আমি নিজেই অ্যাডমার্কার কল করার প্রয়োজনটিকে সরিয়েছি।
পেশাদাররা
কনস
ব্যবহারকারীদের মূল প্রশ্নের মূল প্রতিক্রিয়ার অধীনে ইয়াংইয়াং মার্চ 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.
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-তে একটি রয়েছে তাই আমি উপরের কাস্টম প্রয়োগটি ব্যবহার করেছি।
দাবি অস্বীকার: আমি এই কোডটি লিখিনি তবে আমি যখন আমার কোডবেসে এটি একীভূত করেছি তখন কোনও রেফারেন্স ধরে রাখতে ভুলে গিয়েছিলাম যাতে আমি জানি না যে এটি কোথা থেকে এসেছে।
নতুন সংস্করণ ভি 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;
}
}
গুগলের ডেমো গ্যালারীটিতে তারা কীভাবে এটি করে তার একটি ডেমো রয়েছে:
http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html
তারা কীভাবে চিহ্নিতকারী যুক্ত করে তা দেখতে আপনি উত্স কোডটি দেখতে পারেন।
দীর্ঘ গল্প সংক্ষিপ্ত, তারা চিহ্নিতকারীদের একটি বিশ্বব্যাপী অ্যারে রাখে। এগুলি সাফ / মুছলে, তারা অ্যারের মধ্য দিয়ে লুপ করে এবং প্রদত্ত চিহ্নিতকারী অবজেক্টে ".setMap (নাল)" কল করে।
যাইহোক, এই উদাহরণটি একটি 'কৌশল' দেখায়। এই উদাহরণের জন্য "সাফ করুন" এর অর্থ তাদের মানচিত্র থেকে সরানো কিন্তু অ্যারেতে রাখা, যা অ্যাপ্লিকেশনটিকে তাদের দ্রুত মানচিত্রে পুনরায় যুক্ত করতে দেয়। এক অর্থে, এটি তাদের "লুকানোর" মতো কাজ করে।
"মুছুন" পাশাপাশি অ্যারেও সাফ করে।
for (i in markersArray) {
markersArray[i].setMap(null);
}
শুধু আইই উপর কাজ করছে।
for (var i=0; i<markersArray.length; i++) {
markersArray[i].setMap(null);
}
ক্রোম, ফায়ারফক্স, অর্থাৎ ...
সমাধানটি বেশ সহজ। আপনি পদ্ধতিটি ব্যবহার করতে পারেন: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>
আপনি গুগল বিকাশকারী বা গুগল বিকাশকারী ওয়েব সাইটে সম্পূর্ণ ডকুমেন্টেশনের সাথে পরামর্শ করতে পারেন ।
রোলিংয়ের উত্তরের একটি পরিষ্কার এবং সহজ প্রয়োগ।
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) ;
}
set_map
উভয় উত্তরে পোস্ট করা " " ফাংশনটি Google মানচিত্র v3 এপিআইতে আর কাজ করবে না বলে মনে হয়।
আমি ভাবলাম কি হয়েছে
হালনাগাদ:
গুগল তাদের এপিআই এমন পরিবর্তন করেছে যে " set_map
" নয় " setMap
"।
http://code.google.com/apis/maps/documentation/v3/reference.html
এখানে আপনি কীভাবে চিহ্নিতকারীদের অপসারণ করবেন তার একটি উদাহরণ পেতে পারেন:
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 = [];
}
অনন থেকে নিম্নলিখিতগুলি নিখুঁতভাবে কাজ করে, যদিও বারবার ওভারলেগুলি সাফ করার সময় ফ্লিকারদের সাথে।
কেবল নিম্নলিখিতটি করুন:
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()
যেখানে প্রয়োজন সেখানে ফাংশনটি কল করুন ।
এটাই!!
আশা করি এটি আপনাকে সহায়তা করবে।
for(in in markersArray){}
সম্ভবত আপনি এটি করার প্রত্যাশা করেন না। যদি Array
কোডের অন্য কোথাও প্রসারিত হয় তবে এটি কেবলমাত্র সূচিগুলিতে নয়, তবে সেই বৈশিষ্ট্যগুলির উপরেও পুনরাবৃত্তি করবে। এর জাভাস্ক্রিপ্ট সংস্করণ markersArray.forEach()
যা সর্বত্র সমর্থিত নয়। আপনি আরও ভাল হতে চাইfor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
আমি গুগল-ম্যাপস-ইউটিলিটি-লাইব্রেরি-ভি 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)
(আমি উত্সটি দেখেছি)। এগুলিকে একটি অ্যারে রাখার এবং এটি নিজেই করা কম কাজ হবে।
পলি, মার্কার, ইত্যাদি সহ সমস্ত ওভারলে সাফ করার জন্য ...
সহজভাবে ব্যবহার করুন:
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"));
}
মানচিত্র থেকে সমস্ত চিহ্নিতকারীকে সরাতে ফাংশনগুলি এমন কিছু তৈরি করুন:
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 = [];
}
এটি করার সর্বোত্তম উপায় হ'ল মানচিত্রের সমস্ত বৈশিষ্ট্য পুনরাবৃত্তি করা। চিহ্নিতকারীরা (বহুভুজ, পলিইনস, ইত্যাদি সহ) মানচিত্রের ডেটা স্তরে সংরক্ষণ করা হয় ।
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 শ্রেণীর পদ্ধতিগুলি ব্যবহার করতে দেয়।
গুগল নিজেরাই কমপক্ষে একটি নমুনায় ব্যবহার করে এমন পদ্ধতি:
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
আমি জানি না কেন, তবে 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);
}
});
গুগল্যাপ ঠিক করুন
mGoogle_map.clear();
আমি প্রস্তাবিত সমস্ত সমাধানের চেষ্টা করেছি, তবে আমার সমস্ত মার্কার একটি ক্লাস্টারের নিচে থাকাকালীন কিছুই আমার পক্ষে কার্যকর হয়নি। অবশেষে আমি কেবল এটি রেখেছি:
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();
আপনি কি তাদের লুকিয়ে রাখার মতো মুছে ফেলতে চান?
লুকিয়ে থাকলে:
function clearMarkers() {
setAllMap(null);
}
আপনি যদি এগুলি মুছতে চান:
function deleteMarkers() {
clearMarkers();
markers = [];
}
লক্ষ্য করুন যে আমি তাদের অ্যারে রাখতে এবং এটিকে ম্যানুয়ালি পুনরায় সেট করতে একটি অ্যারে চিহ্নিতকারী ব্যবহার করি।
আপনাকে সেই চিহ্নিতকারীটির কাছে মানচিত্র নাল সেট করতে হবে।
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);
}
আমি একটি শর্টহ্যান্ড ব্যবহার করি যা কাজটি ভাল করে। শুধু কর
map.clear();
যদি আপনি gmap V3 প্লাগইন ব্যবহার করেন:
$("#map").gmap("removeAllMarkers");
দেখুন: http://www.smashinglabs.pl/gmap/docamentation# after-लोड
আমি জানি এটি সম্ভবত একটি সিম্পল সমাধান, তবে আমি এটিই করি
$("#map_canvas").html("");
markers = [];
আমার জন্য প্রত্যেক সময় কাজ করে।