Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps API v3: Markers not being removed

I'm creating a map that loads & destroys markers based on both the bounding box and zoom level. I'm having a real problem getting markers to properly be removed, it seems to work sometimes for certain situations.

I have an object that contains the marker info, which also contains the google maps marker object. My code detects if the market should be deleted based on the bounding box or zoom-level. I set the marker object to "setMap(null);" and using firebug I can see that its being set, I then remove the parent object entirely and the objects data length is updated properly.

I output to the firebug console when a marker is supposedly deleted, seems to be working and I can see that the marker isn't being re-crated from the ajax call for markers on the boundingbox change.

Yet if I zoom around the map I can sometimes see that the markers are being removed, if I zoom away then pan back holding the mouse down. Or sometimes the markers will all be removed if I zoomout the first time, but if I zoom in again then back out they are not removed.

I must be doing something wrong with the logic of my code, I'm stumped.

You can view the source of http://www.trailforks.com/map/test.php?lat=49.352247&lon=-123.202413 the JS is http://www.trailforks.com/map/includes/map.js

the code for deleting a marker is at the bottom

function clearMarkerMemory(mapItem, i) {
  google.maps.event.removeListener(mapItem.lis);    // remove stored listener

  mapper.data[i].obj.setMap(null); // remove marker
  mapper.data.splice(i, 1);

  console.log("removed marker "+mapItem.icon+":"+mapItem.nid+' '+mapItem.name);
};

I added some more debug into to the console, going to a simple area of the map with only 2 markers http://www.trailforks.com/map/test.php?lat=49.43210641783767&lon=-123.49878636730955&z=14

I can see the markers created, then move the map a bit and see that the markers weren't re-created because they were detected in the marker object. I then move the viewport so one of the markers is off the screen and I can see that the marker is removed and the marker object length updates. But if I pan the map back over the marker is still on the map.

enter image description here

like image 479
Canadaka Avatar asked Jul 20 '12 23:07

Canadaka


People also ask

How do I remove a marker from Google Maps APi?

You can delete the markers by removing them from the map and then setting the array's length to 0 , which removes all references to the markers.

How do I remove all markings from Google Maps?

You remove markers by using set_map(null) on the particular marker you want to clear, if you want to clear all then loop through using this function.

How do I remove a marker cluster from Google Maps?

Removing all markers You can then clear all the markers using clearMarkers something like this: markerClusterer. clearMarkers(); markers = [];

How do I delete a google Marker?

Click the marker to reveal the editing options. Click the "Delete" link in the lower-left corner of the dialog box.


1 Answers

I was struggling with similar problem for a long while until I realized that the map marker's setMap-method is asynchronous. When you call that and immediately remove any references to that marker object, the browser's garbage collector steps in and cleans it up from the memory and thus prevents the actual remove operation from happening.

Try it out by just commenting out the line with the splice call and see if that helps. If it does help, you should consider delaying the removal of the object, or alternatively storing the reference to the marker object until it's really removed. How to detect if it's really removed? I have no idea.

I hope this helps!

like image 115
jylauril Avatar answered Oct 22 '22 20:10

jylauril