Google मानचित्र API v2 में, यदि मैं सभी मानचित्र मार्करों को हटाना चाहता हूं, तो मैं बस कर सकता हूं:
map.clearOverlays();
मैं Google मानचित्र API v3 में यह कैसे करूँ ?
संदर्भ API को देखते हुए , यह मेरे लिए अस्पष्ट है।
Google मानचित्र API v2 में, यदि मैं सभी मानचित्र मार्करों को हटाना चाहता हूं, तो मैं बस कर सकता हूं:
map.clearOverlays();
मैं Google मानचित्र API v3 में यह कैसे करूँ ?
संदर्भ API को देखते हुए , यह मेरे लिए अस्पष्ट है।
जवाबों:
बस निम्नलिखित करें:
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); }
:। उसके बाद सरणी को खाली करने की कोई आवश्यकता नहीं है।
एक ही समस्या है। यह कोड अब काम नहीं करता है।
मैंने इसे ठीक कर लिया है, क्लीयर मेकर्स का तरीका इस तरह से बदलें:
set_map (नल) ---> setMap (नल)
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/documentation/javascript/markers#remove
new Array();
?
ऐसा लगता है कि V3 में अभी तक ऐसा कोई फंक्शन नहीं है।
लोग सुझाव देते हैं कि मानचित्र में आपके सभी मार्करों के संदर्भ एक सरणी में रखें। और फिर जब आप उन्हें सभी को हटाना चाहते हैं, तो बस सरणी को लूप करें और प्रत्येक संदर्भ पर .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 मैंने मैन्युअल रूप से addMarker को कॉल करने की आवश्यकता को हटा दिया।
पेशेवरों
विपक्ष
यह मूल रूप से उपयोगकर्ताओं के मूल प्रश्न के मूल प्रतिक्रिया के तहत यिंगयांग मार 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();
};
मुझे नहीं लगता कि V3 में कोई एक है इसलिए मैंने उपरोक्त कस्टम कार्यान्वयन का उपयोग किया है।
डिस्क्लेमर: मैंने यह कोड नहीं लिखा था, लेकिन जब मैंने इसे अपने कोडबेस में मर्ज किया तो मैं एक संदर्भ बनाए रखना भूल गया, इसलिए मुझे नहीं पता कि यह कहां से आया है।
नए संस्करण v3 पर, उन्होंने सरणियों में रखने की सिफारिश की। निम्नलिखित के रूप में।
ओवरले-ओवरव्यू पर नमूना देखें ।
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;
}
}
Google की डेमो गैलरी में एक डेमो है कि वे इसे कैसे करते हैं:
http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html
आप स्रोत कोड देख सकते हैं कि वे मार्कर कैसे जोड़ते हैं।
लंबी कहानी छोटी, वे मार्करों को एक वैश्विक सरणी में रखते हैं। उन्हें हटाते / हटाते समय, वे सरणी के माध्यम से लूप करते हैं और दिए गए मार्कर ऑब्जेक्ट पर ".setMap (नल)" कहते हैं।
हालाँकि, यह उदाहरण एक 'चाल' दिखाता है। इस उदाहरण के लिए "स्पष्ट" का अर्थ है उन्हें मानचित्र से निकालना लेकिन उन्हें सरणी में रखना, जो एप्लिकेशन को मानचित्र में जल्दी से पुनः जोड़ने की अनुमति देता है। एक अर्थ में, यह उन्हें "छुपाने" जैसा काम करता है।
"हटाएं" सरणी को भी साफ करता है।
for (i in markersArray) {
markersArray[i].setMap(null);
}
केवल IE पर काम कर रहा है।
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>
आप Google डेवलपर या संपूर्ण दस्तावेज़, Google डेवलपर वेब साइट पर भी देख सकते हैं ।
रॉलिंग के उत्तर का एक साफ और आसान अनुप्रयोग।
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 API में काम नहीं करता है।
पता नहीं क्या हुआ होगा
अपडेट करें:
ऐसा प्रतीत होता है कि Google ने अपना API बदल दिया जैसे कि " 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();
});
2. मार्कर को मार्कर से जोड़ें
function loadMarkers() {
var marker = new google.maps.Marker({
title: title,
position: latlng,
icon: icon
});
mgr.addMarker(marker);
mgr.refresh();
}
3. मार्करों को साफ़ करने के लिए आपको बस मार्करमंगर के 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.addMarker (स्थान): यह फ़ंक्शन मैप पर मार्कर जोड़ने के लिए उपयोग किया जाता है
2.clearMarkers (): यह फ़ंक्शन मैप से सभी मार्करों को हटाता है, सरणी से नहीं
3.setMapOnAll (नक्शा): यह फ़ंक्शन सरणी में मार्कर जानकारी जोड़ने के लिए उपयोग किया जाता है
4.deleteMarkers (): यह फ़ंक्शन उनके संदर्भों को हटाकर सरणी के सभी मार्करों को हटा देता है।
// 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 = [];
}
ऐसा करने का सबसे साफ तरीका नक्शे की सभी विशेषताओं पर पुनरावृति करना है। मार्कर (पॉलीगन्स, पॉलीलाइन, ect के साथ) नक्शे की डेटा परत में संग्रहीत होते हैं ।
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 वर्ग विधियों का उपयोग करने की अनुमति देता है।
यह वह तरीका है जो Google स्वयं कम से कम एक नमूने में उपयोग करता है:
var markers = [];
// Clear out the old markers.
markers.forEach(function(marker) {
marker.setMap(null);
});
markers = [];
पूर्ण कोड उदाहरण के लिए Google नमूना देखें:
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);
}
});
बस स्पष्ट Googlemap
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/documentation#after-load
मुझे पता है कि यह शायद एक शिष्ट समाधान है, लेकिन यह वही है जो मैं करता हूं
$("#map_canvas").html("");
markers = [];
हर बार मेरे लिए काम करता है।