2010-11-24 7 views
5

J'ai créé un tableau de marqueurs. J'utilise ce tableau de marqueurs pour écouter «cliquer» et placer le marqueur sur Google Map, ainsi que créer des fonctions pour «effacer tous les marqueurs», «ré-afficher tous les marqueurs» et «supprimer tous les marqueurs». Le problème est, comment est-ce que je fais ceci d'une manière où je peux effacer ou supprimer un marqueur-à-la-fois? La raison est que si je me trouvais accidentellement à un endroit où je ne veux pas, et que je voudrais effacer/supprimer, je ne pouvais pas le faire. Si je devais effacer/supprimer ce marqueur particulier, le reste des marqueurs que j'ai comploté précédemment sera effacé/supprimé et ...Comment supprimer un marqueur à la fois sur google map

Mon code:

//Initialize the map 
function initialize() { 
    var myLatlng = new google.maps.LatLng(2,110); 
    var myOptions = { 
     zoom: 3, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

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

    infowindow = new google.maps.InfoWindow({ 
     content: "loading..." 
    }); 
} 

function changeForm(the_form) { 
    window.location = the_form; 
} 


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

// Place markers in by click 
function addMarker(location) { 
    marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
     title:"Specified Location", 
     icon: 'images/greenPoint.png' 
    }); 
    markersArray.push(marker); 
} 

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

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

Répondre

4

Lorsque vous créez votre Au lieu de tous les repérer sur la liste markersArray, vous pouvez les stocker en fonction de leur Lat/Lng (ou d'un événement mieux, une sorte d'ID), puis définir un gestionnaire d'événement sur chaque marqueur pour le retirer de la liste des marqueurs quand on clique dessus.

Je ne suis pas sûr si vous pouvez stocker des informations arbitraires avec un objet google.maps.Marker, mais vous pouvez toujours créer votre propre objet qui a un ID et un objet google.maps.Marker que ses membres:

function myMarker(id, location) { 
    this.id = id; 
    this.marker = new google.maps.Marker({...}); 
} 

Ensuite, markersArray[id] = new myMarker(myId, myLocation) vous permettrait de stocker tous vos marqueurs en fonction de leurs identifiants arbitraires. Ensuite, vous pouvez affecter le gestionnaire que j'ai décrit sur this.marker pour vous retirer du markersArray et de la carte.

Une autre façon de le faire serait de stocker vos marqueurs en fonction de leur Lat/LNGS, de sorte que votre markersArray sauverait les marqueurs le long des lignes de:

markersArray[location.lat][location.lng] = new google.maps.Marker({...}); 

Et vous pouvez alors utiliser votre gestionnaire d'événements saisissez le lat/lng du marqueur lorsque vous cliquez dessus, et retirez-vous de la matrice et mappez de cette façon. Faites-moi savoir si vous avez besoin de plus de détails.

Questions connexes